Bigquery 函数中是不是有等效的 pandas split(expand=True) ?
Posted
技术标签:
【中文标题】Bigquery 函数中是不是有等效的 pandas split(expand=True) ?【英文标题】:Is there a pandas split(expand=True) equivalent in Bigquery function?Bigquery 函数中是否有等效的 pandas split(expand=True) ? 【发布时间】:2021-10-22 12:18:16 【问题描述】:我正在尝试在 BigQuery 中重现以下示例:
从表格开始:
ROW VALUE
0 AAA
1 BBB
2 CCC ~ DDD
我想在 BigQuery 中重现以下行为:
df["VALUE"].str.split("~",expand=True)
返回:
0 1
0 AAA None
1 BBB None
2 CCC DDD
有没有办法在 BigQuery 中实现这一点?
到目前为止,我有以下查询:
SELECT SPLIT(VALUE, "~")
FROM my_dataset.my_table
但它会返回:
Row f0_
1 683600749R
______________
2 284A92167R
______________
3 281150577R
281154695R
______________
虽然我想拥有:
Row f0_ f1_
1 683600749R None
____________________________
2 284A92167R None
____________________________
3 281150577R 281154695R
____________________________
【问题讨论】:
【参考方案1】:这不是一个完美的解决方案,但要获得拆分的第 1 部分和第 2 部分,您可以编写:
with tab1 as (
SELECT NULL as col1
UNION ALL
SELECT 'AAA' as col1
UNION ALL
SELECT 'BBB' as col1
UNION ALL
SELECT 'CCC ~ DDD'as col1
)
SELECT
col1,
SPLIT(col1, "~")[OFFSET(0)] AS part_1,
CASE
WHEN ARRAY_LENGTH(SPLIT(col1, "~")) < 2 THEN NULL
ELSE SPLIT(col1, "~")[OFFSET(1)]
END AS part_2
FROM tab1
# output
Row col1 part_1 part_2
1 null null null
2 AAAA AAAA null
3 BBBB BBBB null
4 CCC ~ DDDD CCC DDD
如果您不使用 CASE WHEN 来获取 OFFSET(1),当 SPLIT 不会(至少)生成两个部分时,您将收到错误 Array index 1 is out of bounds
。
【讨论】:
以上是关于Bigquery 函数中是不是有等效的 pandas split(expand=True) ?的主要内容,如果未能解决你的问题,请参考以下文章
PySpark 中是不是有与 Pandas 聚合函数 any() 等效的函数?
pandas 中是不是有与 excel 中的 MATCH 函数等效的函数?
Bigquery Standard Sql 等效于 Legacy Sql 中的 GROUP_CONCAT_UNQUOTED