google-bigquery - BigQuery - 仅按分隔符拆分一次
问题描述
有没有办法只用分隔符分割一次?我的数据可能在多个索引处有分隔符。我希望能够将一个字段分成两个单独的字段。
例如,当使用句点作为分隔符时,我希望字符串how.now.brown.cow分成两个字段:[how, now.brown.cow]。
SPLIT({field}, 'delimiter')[SAFE_OFFSET(0)] 可以很好地获取第一部分,但我的数据中可能有不相等的数组长度,所以我无法连接其他索引。
解决方案
以下是 BigQuery 标准 SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'how.now.brown.cow' col UNION ALL
SELECT 'how'
)
SELECT col,
SPLIT(col, '.')[OFFSET(0)] AS first_item,
( SELECT STRING_AGG(item, '.' ORDER BY OFFSET)
FROM UNNEST(SPLIT(col, '.')) item WITH OFFSET
WHERE OFFSET > 0
) AS rest_of_items
FROM `project.dataset.table`
带输出
Row col first_item rest_of_items
1 how.now.brown.cow how now.brown.cow
2 how how null
注意:以上只是其中一种方法。看起来有很多方法可以实现相同的结果 - 例如
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'how.now.brown.cow' col UNION ALL
SELECT 'how'
)
SELECT col,
REGEXP_EXTRACT(col, r'^([^.]*)\.?') AS first_item,
REGEXP_EXTRACT(col, r'^[^.]*\.?(.*)$') AS rest_of_items
FROM `project.dataset.table`
带输出
Row col first_item rest_of_items
1 how.now.brown.cow how now.brown.cow
2 how how
推荐阅读
- bash - 伊斯坦布尔工具安装错误:github.com/ethereum/go-ethereum/crypto/bn256/cloudflare.gfpMul:未定义重定位目标runtime.support_bmi2
- javascript - Android - 当互联网中断时继续使用 HTML5 javascript 播放音频 - 获取、blob
- java - 返回一个单独的随机列表?
- java - 随机数不断变化
- r - 如何过滤掉R中的小子图
- mysql - MySQL Workbench expecting command between table name and columns
- matlab - 检测图像中的高斯
- android - 找不到工具链:Android Studio
- java - Regular Expression for filtering invalid windows characters in Java
- firebase - How do I make Firebase HTTP restful calls using just an API key?