我在HDFS中有一个日志文件,值由逗号分隔.例如:
2012-10-11 12:00,opened_browser,userid111,deviceid222
现在我想将此文件加载到Hive表,该表具有"timestamp","action"列,并由"userid","deviceid"分区.我如何让Hive将日志文件中的最后2列作为表的分区?所有示例e.g. "hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');"都需要在脚本中定义分区,但我希望从HDFS文件自动设置分区.
一个解决方案是创建具有所有4列的中间非分区表,从文件填充它然后创建一个INSERT into first_table PARTITION (userid,deviceid) select from intermediate_table timestamp,action,userid,deviceid;但是这是另外的任务,我们将有2个非常类似的表.或者我们应该创建外部表作为中间.
Den*_*Lee 16
张宁在http://grokbase.com/t/hive/user/114frbfg0y/can-i-use-hive-dynamic-partition-while-loading-data-into-tables上对此主题做出了很好的回应.
快速的背景是:
正如@Denny Lee 的回答中提到的,我们需要涉及一个临时表(invites_stg)管理或外部,然后从临时表插入到分区表(在这种情况下是邀请)。
确保我们将这两个属性设置为:
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
Run Code Online (Sandbox Code Playgroud)最后插入邀请,
INSERT OVERWRITE TABLE India PARTITION (STATE) SELECT COL's FROM invites_stg;
Run Code Online (Sandbox Code Playgroud)请参阅此链接寻求帮助:http : //www.edupristine.com/blog/hive-partitions-example
| 归档时间: |
|
| 查看次数: |
57633 次 |
| 最近记录: |