在蜂巢中,如何仅按列的子字符串查询带有组的表?

时间:2018-10-24 00:28:45

标签: regex hive

例如,如果存在带有“路径”列的示例表“ 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 =”开头,以“ \”或“ no”结尾。该表中的某些记录的page_id可能不存在。如何编写查询来实现这一目标。

1 个答案:

答案 0 :(得分:1)

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

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

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