如何从impala中的表中删除列
Posted
技术标签:
【中文标题】如何从impala中的表中删除列【英文标题】:how to drop columns from a table in 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]
我做错了什么?
感谢您的帮助
【问题讨论】:
【参考方案1】:当为表定义的架构(在这种情况下为列的数据类型)与表的相应 Parquet 文件中存在的架构冲突时,会发生此错误。
要解决此问题,您可以检查以下内容,
-
执行
SHOW CREATE TABLE proceso.prueba
并列出列。
运行命令parquet-tools meta hdfs://nameservice1/user/hive/warehouse/proceso.db/prueba/914a7dd4a8462ff1-
860a4c1d00000011_978927331_data.1.parq
以查看包含列详细信息的元数据。
比较 #1、#2 的结果以查看列数是否正确,并查看列 subsegm
(在 #2 结果中)的数据类型是否与它应该具有的(在 # 1 个结果)。
将表数据类型修改为正确的值、结构(如果需要)应该可以帮助您解决此问题。
希望有帮助!
【讨论】:
第二条指令不运行! 您可能需要下载 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 级别更改数据类型是一个很好的解决方法。以上是关于如何从impala中的表中删除列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Impala 中显示复杂数据列(地图类型)中的所有字段?