【发布时间】:2016-06-29 08:55:03
【问题描述】:
我创建了一个在列上具有动态分区的配置单元表。有没有办法使用“LOAD DATA”语句直接从文件中加载数据?还是我们只需要创建一个非分区的中间表并将文件数据加载到其中,然后将数据从这个中间表插入到分区表中,如Hive loading in partitioned table中提到的那样?
【问题讨论】:
标签: dynamic hive partitioning
我创建了一个在列上具有动态分区的配置单元表。有没有办法使用“LOAD DATA”语句直接从文件中加载数据?还是我们只需要创建一个非分区的中间表并将文件数据加载到其中,然后将数据从这个中间表插入到分区表中,如Hive loading in partitioned table中提到的那样?
【问题讨论】:
标签: dynamic hive partitioning
不,LOAD DATA 命令仅将文件复制到目标目录。它不读取输入文件的记录,因此不能根据记录值进行分区。
如果您的输入数据已经根据分区拆分为多个文件,您可以直接将文件复制到 HDFS 中您手动创建的分区目录下的表位置(或者在 EXTERNAL 表的情况下仅指向它们的当前位置)并使用以下 ALTER 命令添加分区。这样您就可以完全跳过 LOAD DATA 语句。
ALTER TABLE <table-name>
ADD PARTITION (<...>)
【讨论】:
没别的了,如果要直接插入,就需要手动指定分区了。
对于动态分区,我们需要临时表,然后从那里插入。
【讨论】: