如何将原始数据插入到具有不同列序列的配置单元 table 中?
How to insert raw data into hive table having different column sequence?
鉴于:Hive Version 2.3.0 onwards
,我有一个 Hive
table 和一个固定的 DDL 从很长一段时间。现在 raw data
以与 text
文件不同的 columns
顺序出现,并且必须以具有固定分区标准的 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
文件中,注意列顺序更改。
我很难找到正确的信息,谁能解释一下如何处理这种情况的最佳做法?如果它是小文件,我们可以使用脚本来更正文本,但如果它是大文件并且每次文本文件都有不同的排列,该怎么办?感谢任何答案/反馈。
通过更改列的列顺序 and/or addition/deletion,一种选择是在将文件加载到 Hive table.Set 之前将文本文件转换为 Parquet
格式属性 hive.parquet.use-column-names = true
默认情况下是 false
,按列名而不是按列索引读取 Parquet 文件。(这样可以消除对源文件中列顺序的依赖)分区可以有不同的模式,你可以创建一个 table 与所需的整体列。
请注意,与托管 table 相比,external table
更易于维护,而无需在架构更改时四处移动数据。当架构更改时,您可以删除并重新创建 table 并执行 msck repair table ..
来读取数据。
要检测模式更改,您可以有一个进程 运行 检查文本文件的第一行(假设它们是列名)是否有任何更改。此过程的输出可以写入持久存储,例如具有适当模式的 MongoDB/DynamoDB 数据存储 versioning.This 有助于保留所有模式更改的历史记录。
鉴于:Hive Version 2.3.0 onwards
,我有一个 Hive
table 和一个固定的 DDL 从很长一段时间。现在 raw data
以与 text
文件不同的 columns
顺序出现,并且必须以具有固定分区标准的 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
文件中,注意列顺序更改。
我很难找到正确的信息,谁能解释一下如何处理这种情况的最佳做法?如果它是小文件,我们可以使用脚本来更正文本,但如果它是大文件并且每次文本文件都有不同的排列,该怎么办?感谢任何答案/反馈。
通过更改列的列顺序 and/or addition/deletion,一种选择是在将文件加载到 Hive table.Set 之前将文本文件转换为 Parquet
格式属性 hive.parquet.use-column-names = true
默认情况下是 false
,按列名而不是按列索引读取 Parquet 文件。(这样可以消除对源文件中列顺序的依赖)分区可以有不同的模式,你可以创建一个 table 与所需的整体列。
请注意,与托管 table 相比,external table
更易于维护,而无需在架构更改时四处移动数据。当架构更改时,您可以删除并重新创建 table 并执行 msck repair table ..
来读取数据。
要检测模式更改,您可以有一个进程 运行 检查文本文件的第一行(假设它们是列名)是否有任何更改。此过程的输出可以写入持久存储,例如具有适当模式的 MongoDB/DynamoDB 数据存储 versioning.This 有助于保留所有模式更改的历史记录。