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

鉴于:Hive Version 2.3.0 onwards,我有一个Hive表和很长一段时间的固定DDL。现在raw datacolumns文件以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文件中,请注意列顺序更改。

我很难找到正确的信息,任何人都可以解释最佳做法来应对这种情况吗?如果是小文件,我们可以使用脚本来更正文本,但是如果它是成批的并且每次文本文件具有不同的排列方式,该怎么办?感谢任何答案/反馈。

chz_zc 回答:如何将原始数据插入具有不同列顺序的配置单元表中?

通过更改列顺序和/或增加/删除列,一种选择是在将文本文件加载到Hive表之前将文本文件转换为Parquet格式。设置属性hive.parquet.use-column-names = true默认情况下,false可以按列名而不是按列索引来读取Parquet文件。(这样可以消除对源文件中列顺序的依赖)分区可以具有不同的架构,并且可以使用所需的整体列。

请注意,external table与托管表相比更易于维护,而架构更改时无需四处移动数据。模式更改时,可以删除并重新创建表,然后执行msck repair table ..以读取数据。

要检测架构更改,可以运行一个过程,该过程检查文本文件的第一行(假设它们是列名)是否存在任何更改。此过程的输出可以写入具有适当模式版本控制的持久性存储(如MongoDB / DynamoDB数据存储),这有助于保留所有模式更改的历史记录。

本文链接:https://www.f2er.com/2775914.html

大家都在问