передача нескольких дат в качестве параметров запроса Hive - PullRequest
2 голосов
/ 10 июля 2019

Я пытаюсь передать список дат в качестве параметра в мой запрос улья.

#!/bin/bash
echo "Executing the hive query - Get distinct dates"
var=`hive -S -e "select distinct  substr(Transaction_date,0,10) from test_dev_db.TransactionUpdateTable;"`
echo $var
echo "Executing the hive query - Get the parition data"
hive -hiveconf paritionvalue=$var -e 'SELECT Product FROM test_dev_db.TransactionMainHistoryTable where tran_date in("${hiveconf:paritionvalue}");'
echo "Hive query - ends"

Вывести как:

Executing the hive query - Get distinct dates
2009-02-01 2009-04-01
Executing the hive query - Get the parition data

Logging initialized using configuration in file:/hive/conf/hive-log4j.properties
OK
Product1
Product1
Product1
Product1
Product1
Product1
Time taken: 0.523 seconds, Fetched: 6 row(s)
Hive query - ends

В качестве входных данных используется только первая дата.Я хотел бы передать свои даты как ('2009-02-01', '2009-04-01'). Примечание. TransactionMainHistoryTable разделен на столбец tran_date со строковым типом.

1 Ответ

2 голосов
/ 10 июля 2019

Соберите массив различных значений, используя collect_set, и объедините его с разделителем ','.Это создаст список без внешних кавычек 2009-02-01','2009-04-01 и во втором сценарии также добавит внешние кавычки ', или вы можете добавить их в первый запрос.И при выполнении inline sql (опция -e) вам не нужно передавать переменную hiveconf, будет работать прямая замена переменных оболочки.Используйте hiveconf при выполнении сценария из файла (опция -f)

Рабочий пример:

date_list=$(hive -S -e "select concat_ws('\',\'',collect_set(substr(dt,0,10))) from (select stack (2,'2017-01', '2017-02')as dt)s ;")

hive -e "select * from (select stack (2,'2017-01', '2017-02')as dt)s where dt in ('${date_list}');"

Возвращает:

OK

2017-01
2017-02
Time taken: 1.221 seconds, Fetched: 2 row(s)
...