首页 > 解决方案 > 如何在 Impala 的 LIKE 语句中使用子查询?

问题描述

我有一个查找表,其中包含禁止的值/字符串和一个规则编号,该编号描述了该值不能出现的位置。因此,例如,我将“C/O”作为一个值,这不能出现在名称字段的任何地方。我也有不能出现在地址中的“P.O”。我正在尝试创建一个数据质量报告来标记这些值而无需硬编码。我努力了:

Select 
A.name
,A.address
From customer A
Where a.name LIKE (Select concat(‘%’, exclusion_value, ‘%’) from DQ_lookup where rule_number=2)
Or a.address LIKE (Select concat(‘%’, exclusion_value, ‘%’) from DQ_lookup where rule_number=1)

这失败了。如果有的话我怎么能让它工作?

标签: hadoopimpala

解决方案


对于配置单元中的匹配模式,您需要使用rlike.

A RLIKE B :如果 A 或 B 为 NULL,则为 NULL,如果 A 的任何(可能为空)子字符串与 Java 正则表达式 B 匹配,则为 TRUE,否则为 FALSE。例如,'foobar' RLIKE 'foo' 评估为 TRUE,'foobar' RLIKE '^f.*r$' 也是如此。

如下所示。

Select 
 A.name,
 A.address
From customer A
Where 
 a.name RLIKE (Select exclusion_value from DQ_lookup where rule_number=2)
 OR a.address RLIKE (Select exclusion_value from DQ_lookup where rule_number=1)

注意:exclusion_value 应该是一个正则表达式。


推荐阅读