bigdata—如何将原始数据插入到具有不同列序列的配置单元表中?

zaq34kh6  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(311)

鉴于: 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 文件,请注意列顺序的更改。
我很难找到正确的信息,有人能解释一下如何处理这种情况的最佳实践吗?如果是小文件,我们可以用脚本来更正文本,但如果它的批量和每次文本文件有不同的排列,该怎么办?感谢您的回答/反馈。

o7jaxewo

o7jaxewo1#

更改列顺序和/或添加/删除列时,一个选项是将文本文件转换为 Parquet 在将文件加载到配置单元表之前设置格式。设置属性 hive.parquet.use-column-names = true 哪个是 false 默认情况下,要按列名而不是按列索引读取Parquet文件(这样就消除了对源文件中列顺序的依赖),分区可以有不同的模式,并且可以创建一个包含所需全部列的表。
请注意 external table 与托管表相比更易于维护,而不必在模式更改时移动数据。当模式更改时,您可以删除并重新创建表并执行 msck repair table .. 读取数据。
要检测模式更改,可以运行一个进程,检查文本文件的第一行(假设它们是列名)是否有任何更改。此进程的输出可以写入持久性存储,如具有适当架构版本控制的mongodb/dynamodb数据存储。这有助于保留所有架构更改的历史记录。

相关问题