我正在研究Hive中的分区并且发现:
http://www.brentozar.com/archive/2013/03/introduction-to-hive-partitioning/ 在此链接中,作者说:"在将数据插入分区时,必须将分区列包含在最后查询中的列.源查询中的列名称不需要与分区列名称匹配,但它们确实需要是最后一个 - 没有办法以不同的方式连接Hive"
我有一个查询:
insert overwrite table MyDestTable PARTITION (partition_date)
select
grid.partition_date,
….
我有上面的查询已运行一段时间没有错误.如您所见,我选择分区列作为第一列.这是错的吗?我试图从其他来源证实作者的陈述,但我没有找到其他相同的文件.这里有人知道正确的做法是什么吗?从我的角度来看,作为一个蜂巢新手,我只是想知道Hive是否抱怨(事实并非如此).
KS
小智 34
例:
set hive.exec.dynamic.partition=true;  
set hive.exec.dynamic.partition.mode=nonstrict;  
drop table tmp.table1;
create table tmp.table1(  
col_a string,col_b int)  
partitioned by (ptdate string,ptchannel string)  
row format delimited  
fields terminated by '\t' ;  
insert overwrite table tmp.table1 partition(ptdate,ptchannel)  
select col_a,count(1) col_b,ptdate,ptchannel
from tmp.table2
group by ptdate,ptchannel,col_a ;
是的,在插入数据时必须使用分区列作为最后一列.Hive将获取最后一栏中的数据.
CREATE EXTERNAL TABLE temp (
DATA_OWNER STRING,
DISTRICT_CODE STRING,
BILLING_ACCOUNT_NO STRING,
INST_COUNTY STRING,
INST_POST_CODE STRING,
INST_STATUS STRING,
INST_EXCHANGE_GROUP_CODE STRING,
EXCHANGE_CODE STRING
) PARTITIONED BY (TS_LAST_UPDATED STRING)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\001'
STORED AS TEXTFILE LOCATION 'user/entity/site/inbound/CSS_INSTALLATION_PARTITIONED';
INSERT OVERWRITE TABLE temp PARTITION (TS_LAST_UPDATED)
SELECT
DATA_OWNER,
DISTRICT_CODE,
BILLING_ACCOUNT_NO,
INST_COUNTY,
INST_POST_CODE,
INST_STATUS,
INST_EXCHANGE_GROUP_CODE,
EXCHANGE_CODE,TO_DATE(TS_LAST_UPDATED) FROM temp1 
| 归档时间: | 
 | 
| 查看次数: | 81897 次 | 
| 最近记录: |