Перенос запроса на Impala

#sql #variables #hive #hiveql #impala

#sql #переменные #улей #hiveql #impala

Вопрос:

Я пытаюсь понять небольшой фрагмент запроса, который должен быть адаптирован Impala.

 Select
.
.

from ${ENV_PREFIX}private_datalap_storage_customer_v1 cus
lateral view explode(adresses) address as addr
where year = substr(${REF_DATE}, 1, 4)
and month = substr(${REF_DATE}, 5, 2)
 

Может кто-нибудь, пожалуйста, помочь понять, что происходит в from and Where ?

Кроме того, я буду признателен, если кто-нибудь сможет объяснить, почему у меня возникает ошибка ниже при попытке выполнить запрос на Impala

Строка 35: 20 исключения ParseException не может распознать ввод рядом с ‘,’ «1» ‘,’ в спецификации функции

Ответ №1:

substr() получает строку, начальную позицию и длину в символах для извлечения из начальной позиции. substr('2021-02-20', 1, 4) следует извлечь 2021 .

Скорее всего, переменная не разрешена, и вы получаете substr(, 1, 4) вместо, например substr('2021-02-20', 1, 4) .В Impala переменные представлены в этой форме ${var:var_name} , проверьте, как вы их передаете и как они разрешаются с помощью select '${var:var_name}'

Также я не знаю, как вы передаете переменную в Hive, но строковый литерал должен быть заключен в кавычки, если сама переменная не содержит кавычек, это substr(${REF_DATE}, 1, 4) разрешается как substr(2021-02-20, 1, 4) , что неверно, поэтому дважды проверьте, нужно ли вам заключать ${REF_DATE} в кавычки или она уже содержит кавычки.