例如,如果存在带有“路径”列的示例表“ 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可能不存在。如何编写查询来实现这一目标。
答案 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|&)