Если дата таблицы указана в UTC, а параметры в IST, то вы можете преобразовать параметры в UTC:
SELECT from_utc_timestamp(arrival_date, "IST") AS `Date`
FROM table_name
WHERE arrival_date BETWEEN to_utc_timestamp('2018-12-01 00:00:00', "IST")
AND to_utc_timestamp('2018-12-02 00:00:00', "IST");
Наилучшим способом будет вычисление параметров отдельно, если это возможно, и передача дат уже в UTC.Например, используя оболочку и вызовите скрипт куста с параметрами.
Например, выполните в оболочке:
date_start_IST="2018-12-01 00:00:00"
date_end_IST="2018-12-02 00:00:00"
date_start_UTC=$( export TZ='GMT' && date -d 'TZ="Asia/Kolkata" '"$date_start_IST" +"%F %H:%M:%S" )
date_end_UTC=$( export TZ='GMT' && date -d 'TZ="Asia/Kolkata" '"$date_end_IST" +"%F %H:%M:%S" )
echo "$date_start_UTC, $date_end_UTC"
# prints 2018-11-30 18:30:00, 2018-12-01 18:30:00
#call Hive script:
hive -hiveconf date_start_UTC="$date_start_UTC" -hiveconf date_end_UTC="$date_end_UTC" -f your_script.hql
В сценарии your_script.hql:
SELECT from_utc_timestamp(arrival_date, "IST") AS `Date`
FROM table_name
WHERE arrival_date BETWEEN '${hivecong:date_start_UTC}'
AND '${hivecong:date_end_UTC}';
Таким образом, будет работать отсечение секций (если таблица секционирована по прибытию) , потому что никакая функция не применяется к предикату, и оптимизатор может получить секцию даже до выполнения.
Если он не разбит на разделы, а файл - ORC, сработает предикатное нажатие.
Если он не разбит на разделы и не ORC, тоэто будет полное сканирование , не имеет значения, будут ли это функции в предикатах и столбцах или нет.