【问题标题】:Load local csv file to hive parquet table directly,not resort to a temp textfile table直接将本地 csv 文件加载到 hive parquet 表,而不是使用临时文本文件表
【发布时间】:2017-03-13 06:00:42
【问题描述】:

我现在正准备将 .csv 文件中的数据存储到 hive 中。当然,由于 parquet 文件格式的性能好,hive 表应该是 parquet 格式。所以,正常的做法是创建一个格式为textfile的临时表,然后我将本地CSV文件数据加载到这个临时表中,最后创建一个相同结构的parquet表并使用sqlinsert into parquet_table values (select * from textfile_table);

但我不认为这个临时文本文件表是必要的。所以,我的问题是,有没有办法让我将这些本地 .csv 文件直接加载到 hive parquet-format 表中,即不使用临时表?或者更简单的方法来完成这项任务?

【问题讨论】:

    标签: hive local parquet


    【解决方案1】:

    Hive documentation中所述:

    加载命令不会根据架构验证数据。

    如果文件在 hdfs 中,则将其移动到 Hive 控制的文件系统命名空间中。

    您可以将CREATE TABLE AS SELECT 用于镶木地板,从而跳过一个步骤。

    所以你将有 3 个步骤:

    1. 创建定义架构的文本表
    2. 将数据加载到文本表中(将文件移动到新表中)
    3. CREATE TABLE parquet_table AS SELECT * FROM textfile_table STORED AS PARQUET;supported from hive 0.13

    【讨论】:

    • 在我的例子中,数据每小时生成一次。所以,我可以将每小时数据移动到 hdfs 中的文本模式表目录中,运行 sql:CREATE TABLE parquet_table AS SELECT * FROM textfile_table STORED AS PARQUET ;然后,一小时后,我可以用新的 com 数据替换 hdfs 文件,而不是每小时删除并重新创建一个 tmp 表,对吗?
    • 是的,没错。但是,如果您的文本表已分区,并且您正在添加分区,则需要运行 MSCK REPAIR TABLE textfile_table 以使它们显示在 SELET *...
    • 这种方法仍然是实现这一目标的唯一方法,或者可以跳过结构化和临时表的步骤以预先加载文本文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多