Hive和Sqoop分区

时间:2015-01-28 20:48:23

标签: hadoop hive sqoop sqoop2

我有来自Netezza表的sqoopd数据,输出文件是HDFS,但是一列是时间戳,我想将它作为日期列加载到我的hive表中。使用该列我想在日期创建分区。我怎么能这样做?

示例:在HDFS数据中就像= 2013-07-30 11:08:36

在hive中我只想加载日期(2013-07-30)而不是时间戳。我想在该列DAILY上进行分区。

如何动态地按列传递分区?

我尝试将数据作为源加载到一个表中。在决赛桌中,我将通过(date_column =动态日期)插入覆盖表分区select * from table1

2 个答案:

答案 0 :(得分:0)

设置这两个属性 -

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

查询可以像 -

INSERT OVERWRITE TABLE TABLE PARTITION (DATE_STR)
SELECT 
  :
  :
 -- Partition  Col is the last column 
  to_date(date_column) DATE_STR
FROM table1;

您可以浏览hive-import的两个选项 - 如果是incremental import,您将能够获得当天的分区。

--hive-partition-key    
--hive-partition-value 

答案 1 :(得分:0)

您可以通过启用动态分区并使用to_date日期函数将时间戳转换为日期来从EMP加载EMP_HISTORY表

代码可能看起来像这样......

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

INSERT OVERWRITE TABLE EMP_HISTORY PARTITION (join_date)
    SELECT e.name as name, e.age as age, e.salay as salary, e.loc as loc, to_date(e.join_date) as join_date from EMP e ;