鉴于: Hive Version 2.3.0 onwards
,我有一个 Hive
表和一个固定的ddl。现在 raw data
是以不同的顺序来的 columns
作为 text
必须将数据存储在 parquet
使用固定分区条件格式化。我的问题是如何处理这种情况时,传入的数据已被删除 different arrangement of columns
.
例子:
CREATE TABLE users ( col1 string, col2 int, col3 string ... )
PARTITIONED BY (...)
STORED AS PARQUET;
输入数据的排列方式
col1 col3 col2
(row) x p 1
y q 2
在 text
文件,请注意列顺序的更改。
我很难找到正确的信息,有人能解释一下如何处理这种情况的最佳实践吗?如果是小文件,我们可以用脚本来更正文本,但如果它的批量和每次文本文件有不同的排列,该怎么办?感谢您的回答/反馈。
1条答案
按热度按时间o7jaxewo1#
更改列顺序和/或添加/删除列时,一个选项是将文本文件转换为
Parquet
在将文件加载到配置单元表之前设置格式。设置属性hive.parquet.use-column-names = true
哪个是false
默认情况下,要按列名而不是按列索引读取Parquet文件(这样就消除了对源文件中列顺序的依赖),分区可以有不同的模式,并且可以创建一个包含所需全部列的表。请注意
external table
与托管表相比更易于维护,而不必在模式更改时移动数据。当模式更改时,您可以删除并重新创建表并执行msck repair table ..
读取数据。要检测模式更改,可以运行一个进程,检查文本文件的第一行(假设它们是列名)是否有任何更改。此进程的输出可以写入持久性存储,如具有适当架构版本控制的mongodb/dynamodb数据存储。这有助于保留所有架构更改的历史记录。