Столбцы разделов при вставке в таблицу Hive из выбранного - программирование
Подтвердить что ты не робот

Столбцы разделов при вставке в таблицу Hive из выбранного

Я изучал разделы в Hive и натыкался:

http://www.brentozar.com/archive/2013/03/introduction-to-hive-partitioning/ В этой связи автор говорит: "При вставке данных в раздел необходимо включить столбцы разделов в качестве последних столбцов в запросе. Имена столбцов в исходном запросе не должны совпадать с именами столбцов разделов, но они действительно должен быть последним - нет возможности подключить Уль по-разному"

У меня есть запрос вроде:

insert overwrite table MyDestTable PARTITION (partition_date)
select
grid.partition_date,
….

У меня есть вышеупомянутый запрос, который работает некоторое время без ошибок. Как вы можете видеть, я выбираю столбец раздела как самый первый столбец. Это неправильно? Я попытался подтвердить утверждение авторов из других источников, но не нашел других документов, которые говорят то же самое. Кто-нибудь знает, что нужно делать? С моей стороны, будучи новичком в Hive, я просто иду, жалуется ли Hive или нет (что это не так).

КС

4b9b3361

Ответ 1

Пример:

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 ;

Ответ 2

Столбцы динамических разделов должны быть указаны последними среди столбцов в инструкции SELECT и в том же порядке, в котором они отображаются в предложении PARTITION().

см. hive wiki для получения дополнительной информации.

Ответ 3

Да, при вставке данных обязательно использовать разделенный столбец в качестве последнего столбца. Убедитесь, что столбец PARTITIONED BY не должен быть существующим столбцом в таблице. 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