0

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

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

在蜂巢中,我只想加载日期(2013-07-30)而不是时间戳。我想每天对该列进行分区。

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

我尝试将数据加载到一个表中作为源。在最终表中,我将通过 (date_column=dynamic date) select * from table1 插入覆盖表分区

4

2 回答 2

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 的两个选项 - 如果它是增量导入,您将能够获取当天的分区。

--hive-partition-key    
--hive-partition-value 
于 2015-01-28T22:46:51.110 回答
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 ;
于 2015-10-12T16:01:39.357 回答