sql - 在 BigQuery 中拆分并重新加入部分字符串
问题描述
我在 bigquery 中查询 github sample_files 数据集,我想获取不包括文件名的路径。
所以如果我有 /path/to/file.txt 我希望它返回 /path/to
在python中我可以做类似的事情
"/".join(str.split(a, "/")[0:-1])
但我不确定如何在 bigquery/sql 中做到这一点有什么想法吗?谢谢!
解决方案
我会使用 REGEXP_EXTRACT 如下例所示
REGEXP_EXTRACT(full_path, r'(.+)/[^/]*$')
在 BigQuery 中拆分并重新加入部分字符串
如果由于某种原因您需要或更习惯于模仿与您的问题中的 SPLIT 相同的方法(拆分和重新加入) - 您可以使用以下方法(与用于测试的示例数据一起提供,玩)
#standardSQL
WITH `project.dataset.table` AS (
SELECT '/path/to/file.txt' full_path UNION ALL
SELECT '/path/to/'
)
SELECT full_path,
(
SELECT STRING_AGG(part, '/')
FROM UNNEST(SPLIT(full_path, '/')) part WITH OFFSET
WHERE OFFSET < ARRAY_LENGTH(SPLIT(full_path, '/')) - 1
) path
FROM `project.dataset.table`
带输出
Row full_path path
1 /path/to/file.txt /path/to
2 /path/to/ /path/to
推荐阅读
- excel - 在水平列表中查找文本并将单元格值返回到右侧
- c# - 如何获得过滤后的列表?
- c# - Unity 和 UDP 组播组
- swift - UITableViewCell 高度自动布局在 iOS 10 上不起作用
- r - ggplot2 facet_grid 使用 facet_grid 具有不同的 x 轴标签
- delphi - 使用 ContentType "multipart/mixed" 将数据和文件发布到 REST-API
- javascript - ReactJS 与 React Router 单页应用程序 SPA 与单独的登录页面
- asp.net-core - 将 Swashbuckle (OpenAPI) 配置为忽略模型中的命名空间
- mysql - Spring Data JPA 表情符号即将到来?而不是实际的表情符号
- android - 将 React-Native 捆绑图像传递给原生模块