蜂巢装在分区表(Hive loading in partitioned table)

2019-07-03 11:03发布

我在HDFS日志文件,值由逗号分隔。 例如:

2012-10-11 12:00,opened_browser,userid111,deviceid222

现在,我希望加载这个文件来撵它具有列“时间戳”,“行动”和由“userid”,“设备ID”分区表。 我怎么能要求蜂巢采取日志文件中最后2列作为分区表? 所有的实施例eg "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页非常相似的表...或者,我们应该创建外部表的中间。

Answer 1:

张宁对在主题了很大的反响http://grokbase.com/t/hive/user/114frbfg0y/can-i-use-hive-dynamic-partition-while-loading-data-into-tables 。

快速上下文是:

  1. 数据加载简单的拷贝数据,它不会读它,所以它不能找出分区什么
  2. 建议你将数据加载到一个中间表第一(或使用一个外部表指向所有文件),然后让分区动态插入踢将其加载到一个分区表


Answer 2:

我从事这个非常相同的情况下,反而,我们所做的就是创建独立的HDFS数据文件,为每个需要加载分区。

由于我们的数据是从MapReduce工作即将到来,我们使用MultipleOutputs在我们的减速机类的数据多路复用到其相应的分区文件。 此后,它仅仅是一个建筑使用来自HDFS文件名分区脚本的问题。



Answer 3:

  1. 正如@Denny李的答复中提到,我们需要涉及到一个临时表(invites_stg)管理的或外部的,然后从中间表分区表(在这种情况下邀请)插入。

  2. 确保我们有这两个属性设置为:

     SET hive.exec.dynamic.partition=true; SET hive.exec.dynamic.partition.mode=nonstrict; 
  3. 最后插入到邀请,

     INSERT OVERWRITE TABLE India PARTITION (STATE) SELECT COL's FROM invites_stg; 

请参阅此链接帮助: http://www.edupristine.com/blog/hive-partitions-example



Answer 4:

CREATE TABLE India (

OFFICE_NAME STRING,

OFFICE_STATUS     STRING,

PINCODE           INT,

TELEPHONE   BIGINT,

TALUK       STRING,

DISTRICT    STRING,

POSTAL_DIVISION   STRING,

POSTAL_REGION     STRING,

POSTAL_CIRCLE     STRING

)

PARTITIONED BY (STATE   STRING)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ','

STORED AS TEXTFILE;

5.指示蜂房动态加载分区

SET hive.exec.dynamic.partition = true;

SET hive.exec.dynamic.partition.mode = nonstrict;


Answer 5:

怎么样

LOAD DATA INPATH '/path/to/HDFS/dir/file.csv' OVERWRITE INTO TABLE DB.EXAMPLE_TABLE PARTITION (PARTITION_COL_NAME='PARTITION_VALUE');



文章来源: Hive loading in partitioned table
标签: loading hive