首页 > 解决方案 > 在 hive 中,如何仅通过列的子字符串查询具有组的表?

问题描述

例如,如果有一个带有“path”列的示例表“sample_hive_tables”。如果总共有 3 条记录的路径为

"abc&page_id=defghi&other_parameters"
"abc&page_id=defghi"
"abc&page_id=efghi"
"abc"

查询应该告诉我们 page_id 为“defghi”的记录出现两次,page_id 为“efghi”的记录出现一次。page_id 的值将以“&page_id=”开头,以空或“&”结尾。表中某些记录的 page_id 可能不存在。如何编写查询来实现这一点。

标签: regexhive

解决方案


page_id=使用介于and之间的值创建一个新列,(&,")并使用它来分组和计数。

select val,count(val) from
(
    select regexp_extract(path,(?<=page_id=).*?(?=\"|&)) as val 
    from sample_hive_tables
) a
group by val;

注意:我假设每个字符串的末尾都有一个 ",如果不使用以下正则表达式(?<=page_id=)(.*?)(?=\b|&)


推荐阅读