Oracle 到 Impala 查询转换

Posted

技术标签:

【中文标题】Oracle 到 Impala 查询转换【英文标题】:Oracle to Impala Query Conversion 【发布时间】:2017-12-02 01:46:58 【问题描述】:

我们正在从 Oracle 迁移到 Hadoop,我正在尝试将以下用 Oracle sql 编写的查询转换为 Impala sql:

CASE WHEN UPPER(table1.ACC_NBR) = LOWER(table1.ACC_NBR) THEN SUBSTR(table1.ACC_NBR,5,1)||'-'||SUBSTR(table1.ACC_NBR,8,2)||'-'|| SUBSTR(table1.ACC_NBR,10,3)||'-'||SUBSTR(table1.ACC_NBR,13,6) ELSE SUBSTR(table1.ACC_NBR,5,1)||'-'||SUBSTR(table1.ACC_NBR,6,2)||'-' || SUBSTR(table1.ACC_NBR,10,2)||'-'||SUBSTR(table1.ACC_NBR,13,6) END

我在业务对象宇宙设计工具中使用此查询,它给了我错误

SUBSTR(table1.ACC_NBR,5,1) 或 ||'-'||是一个布尔预期字符串

。有人可以看看查询,看看有什么遗漏或多余的吗?

提前致谢。

【问题讨论】:

【参考方案1】:

|| 在 impala 中未被识别为连接运算符。请改用CONCAT 函数。

CASE
   WHEN
      UPPER(table1.ACC_NBR) = LOWER(table1.ACC_NBR) 
   THEN
      CONCAT ( SUBSTR(table1.ACC_NBR, 5, 1), '-', SUBSTR(table1.ACC_NBR, 8, 2), '-',
               SUBSTR(table1.ACC_NBR, 10, 3), '-', SUBSTR(table1.ACC_NBR, 13, 6) ) 
   ELSE
      CONCAT ( SUBSTR(table1.ACC_NBR, 5, 1), '-', SUBSTR(table1.ACC_NBR, 6, 2), '-' , 
               SUBSTR(table1.ACC_NBR, 10, 2), '-', SUBSTR(table1.ACC_NBR, 13, 6) ) 
END

【讨论】:

以上是关于Oracle 到 Impala 查询转换的主要内容,如果未能解决你的问题,请参考以下文章

Apache Impala(五) Impala数据导入方式

Impala 中的 fnv_hash() 与 oracle 哈希值

我的sql查询到oracle查询的转换

oracle时间转换查询

使用SparkSQL迁移oracle数据到impala创建的kudu表中,出现Primary key column riskcode is not set错误

使用SparkSQL迁移oracle数据到impala创建的kudu表中,出现Primary key column riskcode is not set错误