首页 > 解决方案 > 在 BigQuery 中拆分并重新加入部分字符串

问题描述

我在 bigquery 中查询 github sample_files 数据集,我想获取不包括文件名的路径。

所以如果我有 /path/to/file.txt 我希望它返回 /path/to

在python中我可以做类似的事情

"/".join(str.split(a, "/")[0:-1])

但我不确定如何在 bigquery/sql 中做到这一点有什么想法吗?谢谢!

标签: sqlgoogle-bigquery

解决方案


我会使用 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

 

推荐阅读