#hadoop #hive #hiveql
#hadoop #hive #hiveql
Вопрос:
У меня есть таблица hive, которая разделена по дате. У меня есть данные на дату «2020-08-18». Я хочу скопировать (дублировать) те же данные в другой раздел.
Есть ли для этого такая команда
SELECT * FROM table_a WHERE date = "2020-08-18" INTO table_a WHERE date = "2020-08-10"
Ответ №1:
приведенный ниже запрос может быть вам полезен,
INSERT OVERWRITE TABLE table_a PARTITION (odate="2020-08-18")
select empdate,empvalue from table_a where odate='2020-08-10';
Примечание: Не включайте столбец partition в инструкцию select.
create table if not exists table_a (empdate string, empvalue string) PARTITIONED BY
(odate string) row format delimited fields terminated by ',' stored as textfile;
INSERT OVERWRITE TABLE table_a PARTITION (odate="2020-08-10")
values ('101001','A'),('200101','B'),('100619','C'),('110707','D');
hive> select * from table_a;
OK
101001 A 2020-08-10
200101 B 2020-08-10
100619 C 2020-08-10
110707 D 2020-08-10
-- dont include the odate column in the select statement otherwise it will lead
-- to Cannot insert into target table because column number/types are different
-- '"2020-08-18"': Table insclause-0 has 2 columns, but query has 3 columns error.
INSERT OVERWRITE TABLE table_a PARTITION (odate="2020-08-18")
select empdate,empvalue from table_a where odate='2020-08-10';
hive> select * from table_a;
OK
101001 A 2020-08-10
200101 B 2020-08-10
100619 C 2020-08-10
110707 D 2020-08-10
101001 A 2020-08-18
200101 B 2020-08-18
100619 C 2020-08-18
110707 D 2020-08-18