regex - 在 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 可能不存在。如何编写查询来实现这一点。
解决方案
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|&)
推荐阅读
- java - Android 密钥库密码正确但无法恢复密钥
- php - php foreach 从文件夹中删除 mysql 和图像
- powershell - 如何获取用户有权访问 Exchange2010 的所有共享邮箱的列表 Exchange 命令行管理程序还是 PowerShell?
- powershell - 指定所有属性时,Get-ADUser 未返回所有可能的 AD 属性
- django - wagtail 中是否有文件大小限制或扩展名限制?
- c# - 捆绑包的 MVC5 授权
- openshift - OpenShift 主机路径卷和重音字符
- python - 从打开的简历中的图片中删除大对象
- json - 提取数据后在 JSON 行之间插入分隔符
- r - 警告:在 predict.lm 中,来自秩不足拟合的预测可能会产生误导