在 regexp_like 中组合 like 和 not like 以优化 Amazon Athena 中的配置单元查询

Posted

技术标签:

【中文标题】在 regexp_like 中组合 like 和 not like 以优化 Amazon Athena 中的配置单元查询【英文标题】:combine like and not like in regexp_like for optimizing hive query in Amazon Athena 【发布时间】:2018-07-24 14:08:26 【问题描述】:

我需要以优化的方式重写配置单元查询。我的查询的 where 子句是

WHERE counters is NOT null AND info LIKE '%sub-page-type=ext-rlol_%' AND info LIKE '%page-type=Faceout%' AND info NOT LIKE '%page-type=FaceoutRAW%'

雅典娜文档说我们可以优化配置单元查询https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/。请参考第 9 点。

谁能帮我写一个更优化的查询。此查询超时(超过 30 分钟)

【问题讨论】:

【参考方案1】:

我会选择一个正则表达式并使用正/负lookahead patterns。从理论上讲,这将是阅读文本数据的 3 倍:

WHERE 
counters is NOT null
AND info RLIKE 
'(?=.*sub-page-type=ext-rlol_)(?=.*page-type=Faceout)(?!.*page-type=FaceoutRAW)'

编辑: 显然,您的亚马逊文档表明您没有使用 HIVE,而是 presto。然后同样适用于其他语法:

WHERE 
counters is NOT null
AND  regexp_like (info,
'(?=.*sub-page-type=ext-rlol_)(?=.*page-type=Faceout)(?!.*page-type=FaceoutRAW)')

【讨论】:

以上是关于在 regexp_like 中组合 like 和 not like 以优化 Amazon Athena 中的配置单元查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中REGEXP_LIKE与LIKE的区别

在Oracle中使用REGEXP_LIKE和使用LIKE的性能哪个好

当 regexp_like 和 regexp_extract 工作正常时,Impala regexp_like 查询返回 null

Oracle:to_number() 在 WHERE 子句中结合 substr() 和 regexp_like()

如何在触发器的 When 条件中使用 REGEXP_LIKE?

Oracle Regexp_like 使用 AND 子句