Столбцы разделов при вставке в таблицу 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 или нет (что это не так).
КС
Ответы
Ответ 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