我有来自Netezza表的sqoopd数据,输出文件是HDFS,但是一列是时间戳,我想将它作为日期列加载到我的hive表中。使用该列我想在日期创建分区。我怎么能这样做?
示例:在HDFS数据中就像= 2013-07-30 11:08:36
在hive中我只想加载日期(2013-07-30)而不是时间戳。我想在该列DAILY上进行分区。
如何动态地按列传递分区?
我尝试将数据作为源加载到一个表中。在决赛桌中,我将通过(date_column =动态日期)插入覆盖表分区select * from table1
答案 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 ;