查询移植到 Impala

Query Porting to 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)

有人可以帮助了解 fromWhere 中发生了什么吗?

此外,如果有人能解释为什么我在尝试 运行 Impala

上的查询时出现以下错误,我将不胜感激

ParseException line 35:20 cannot recognize input near ',' ''1'' ',' in function specification

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

最有可能的是,变量没有被解析,你得到 substr(, 1, 4) 而不是 substr('2021-02-20', 1, 4)。在 Impala 中,variables 是这种形式 ${var:var_name},检查你是如何传递它的,它是如何使用 select '${var:var_name}'

解决的

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