【问题标题】:how to drop columns from a table in impala如何从impala中的表中删除列
【发布时间】:2019-07-19 21:59:48
【问题描述】:

我有一个超过 2000 列的表,但我只需要删除一列 有什么有效的方法可以在 impala 中制作它?

我正在尝试这种方式:

alter table proceso.prueba drop subsegm
select * from proceso.prueba

但是,我在“选择”中遇到了这个错误:

 'hdfs://nameservice1/user/hive/warehouse/proceso.db/prueba/914a7dd4a8462ff1- 
860a4c1d00000011_978927331_data.1.parq' has an incompatible Parquet schema 
for column 'proceso.prueba.nfi_meses_antiguedad_bco'. Column type: INT, 
Parquet schema: optional byte_array subsegm [i:4 d:1 r:0]

我做错了什么?

感谢您的帮助

【问题讨论】:

    标签: impala hue


    【解决方案1】:

    当为表定义的架构(在这种情况下为列的数据类型)与表的相应 Parquet 文件中存在的架构冲突时,会发生此错误。

    要解决此问题,您可以检查以下内容,

    1. 执行SHOW CREATE TABLE proceso.prueba 并列出列。
    2. 运行命令parquet-tools meta hdfs://nameservice1/user/hive/warehouse/proceso.db/prueba/914a7dd4a8462ff1- 860a4c1d00000011_978927331_data.1.parq 以查看包含列详细信息的元数据。
    3. 比较 #1、#2 的结果以查看列数是否正确,并查看列 subsegm(在 #2 结果中)的数据类型是否与它应该具有的(在 # 1 个结果)。
    4. 将表数据类型修改为正确的值、结构(如果需要)应该可以帮助您解决此问题。

    希望有帮助!

    【讨论】:

    • 第二条指令不运行!
    • 您可能需要下载 parquet-tools 才能运行该命令。即使您有 parquet-tools jar,您是否也面临任何错误?
    • 但假设我们需要修改数据类型。我该怎么做?
    • @JuanDavid 。您可以从这里下载 parquet-tools。您也可以在那里阅读以了解它。链接:github.com/apache/parquet-mr/tree/master/parquet-tools
    • 要修改数据类型 - 您需要在 Impala 中运行 ATLER TABLE 语句。 ALTER TABLE table_name CHANGE column_name new_name new_type; 旁注:更改 Parquet 文件中的数据类型并不容易。需要使用新数据类型从源重新生成整个文件。因此,在 Metastore 级别更改数据类型是一个很好的解决方法。
    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多