将本地CSV文件直接加载到Hive Parquet表中,而不需要借助于临时文本文件表。

4
我现在正在准备将.csv文件中的数据存储到Hive中。当然,由于Parquet文件格式的良好性能,Hive表应该是Parquet格式。因此,通常的做法是创建一个格式为textfile的临时表,然后将本地CSV文件数据加载到这个临时表中,最后创建一个相同结构的Parquet表并使用SQL insert into parquet_table values (select * from textfile_table);
但我认为这个临时textfile表并不是必要的。所以,我的问题是,有没有一种方法可以直接将这些本地的.csv文件加载到Hive Parquet格式表中,即不需要借助临时表?或者有更简单的方法来完成这个任务吗?
1个回答

4
Hive 文档 中所述:

Load 命令不会对数据进行模式验证。

如果文件在 HDFS 中,它会被移动到 Hive 控制的文件系统命名空间中。

你可以使用 CREATE TABLE AS SELECT 来跳过一步来创建 parquet 表。

因此,您需要完成 3 步操作:

  1. 创建文本表定义模式
  2. 将数据加载到文本表中 (移动文件到新表中)
  3. CREATE TABLE parquet_table AS SELECT * FROM textfile_table STORED AS PARQUET; 支持自 hive 0.13 起

在我的情况下,数据每小时生成一次。因此,我可以将每小时的数据移动到HDFS中的文本模式表目录中,运行SQL:CREATE TABLE parquet_table AS SELECT * FROM textfile_table STORED AS PARQUET; 然后,一个小时后,我可以用新的数据替换HDFS文件,而不是每小时删除并重新创建临时表,对吗? - wuchang
是的,那是正确的。但是,如果您的文本表被分区,并且您正在添加分区,则需要运行“MSCK REPAIR TABLE textfile_table”才能在“SELET *...”中显示它们。 - Alex Libov
这种方法仍然是实现此目标的唯一途径,或者可以跳过结构化和临时表的步骤,直接加载文本文件。 - Andres Urrego Angel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接