我在使用 parquet 文件将Impala的柱类型从string
更改为int
时遇到了问题。
使用:alter table DATABASE.TABLE change COL COL Int
(从字符串到整数)
或alter table DATABASE.TABLE change COL COL string
(从整型到字符串)
阅读数据时产生错误:
文件x具有与列“db.table. col”不兼容Parquet架构。列类型:INT, parquet 结构模式:可选的字节数组列[i:1 d:1 r:0]
通过阅读this文档,我了解到:
- 微小至微小/微小:好的
- SMALLINT到INT:好的
考虑到以下几点:
列的任何其他类型转换都会在查询过程中产生转换错误
这是否意味着除上述类型转换之外的所有类型转换都是可能的(查询通过),但在查询时会引发错误?
其他信息:
- 在计算统计信息(或选择)之前刷新表并不能解决此问题。
- 更改列类型后使元数据失效时也是如此。
- 该问题出现在色调或使用python脚本时。
- 我使用的是impalad版本2.12.0-cdh5.16.2发行版
- 该错误与第一个 parquet 文件有关(更新类型前包含表内容的文件)。x1c 0d1x
1条答案
按热度按时间brjng4g31#
由于你正在改变数据类型(metadata),你需要
invalidate metadata
以便impala强制寻找元数据而不使用旧的元数据。所以,在你的alter语句之后,请使用这个来修复错误。Impala将在查询时使用最新的元数据,SQL将正常工作。