Вы можете попытаться сгенерировать запрос и записать в файл. После этого вы можете вызвать существующий hive hive с помощью команды источника:
Вот примеры запросов на вашем примере:
Создать таблицу и фиктивные данные:
CREATE EXTERNAL TABLE IF NOT EXISTS a_table(
a1 string,
a2 string,
a3 string,
b1 string,
b2 string,
b3 string)
LOCATION '/user/xyz/a_table';
insert into table a_table
VALUES ('a11', 'a12', 'a13','b11','b12','b13'), ('a21', 'a22', 'a23','b21','b22','b23');
CREATE EXTERNAL TABLE IF NOT EXISTS b_table (
key string,
value string
)
LOCATION '/user/xyz/b_table';
insert into table b_table
VALUES ('a', 'a1'), ('a','a2'),('a','a3'), ('b', 'b1'), ('b','b2'),('b','b3');
Проверьте данные в таблицу:
select * from a_table;
OK
a11 a12 a13 b11 b12 b13
a21 a22 a23 b21 b22 b23
Time taken: 0.124 seconds, Fetched: 2 row(s)
select * from b_table;
OK
a a1
a a2
a a3
b b1
b b2
b b3
Time taken: 0.15 seconds, Fetched: 6 row(s)
Это часть hive hql
для генерации оператора на основе заданного ключа и последующего использования source
для выполнения запроса:
insert overwrite local directory '/home/xyz/temp_hql/out'
select concat_ws(" ", "select",concat_ws("," , collect_list(value)), "from a_table")
from b_table where key = 'a';
source /home/xyz/temp_hql/out/000000_0;
OK
a11 a12 a13
a21 a22 a23
insert overwrite local directory '/home/xyz/temp_hql/out'
select concat_ws(" ", "select",concat_ws("," , collect_list(value)), "from a_table")
from b_table where key = 'b';
source /home/xyz/temp_hql/out/000000_0;
OK
b11 b12 b13
b21 b22 b23