查询移植到 Impala

问题描述

我正在尝试理解 Query 中必须由 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)

有人可以帮助了解fromWhere发生的事情吗?

另外,如果有人能解释为什么我在 Impala 上运行查询时出现以下错误,我将不胜感激

ParseException 行 35:20 无法识别靠近 ',' ''1'' ',' 的输入 功能说明

解决方法

substr() 接收字符串、起始位置和字符长度以从起始位置提取。 substr('2021-02-20',1,4) 应该提取 2021

最有可能的是,变量未解析,您得到 substr(,4) 而不是例如 substr('2021-02-20',4)。在 Impala 中,variables 采用这种形式 ${var:var_name},检查如何您通过它以及如何使用 select '${var:var_name}'

解决它

另外我不知道你是如何在 Hive 中传递变量的,但是应该引用字符串文字,如果变量本身不包含引号,这个 substr(${REF_DATE},4) 被解析为 substr(2021-02-20,4),这是错误的,所以仔细检查您是否需要将 ${REF_DATE} 放在引号中或它已经包含引号。