我需要有关如何使用 BigQuery UNNEST 函数的帮助。我的查询:
我有如图所示的表,我想取消嵌套当前由逗号分隔的字段“域”(字符串类型),以便我将每个逗号分隔的域放入每个“acname”的不同行中。所需的输出也包含在图像中:
我试过这个逻辑,但没有奏效:
选择 acc.acname,acc.amount,acc.domains 作为 accdomains from project.dataset.dummy_accountas acc CROSS JOIN UNNEST(acc.domains)
但这给出了错误“在 UNNEST 中引用的值必须是数组。UNNEST 包含字符串类型的表达式”。该错误完全有道理但不明白如何将字符串转换为数组。
有人可以帮助解决问题并解释一下,它实际上是如何工作的。谢谢你。
下面是 BigQuery 标准 SQL
#standardSQL
SELECT acname, amount, domain
FROM `project.dataset.dummy`,
UNNEST(SPLIT(domains)) domain
Run Code Online (Sandbox Code Playgroud)
您可以使用问题中的虚拟数据进行测试,玩上面的游戏,如下例所示
#standardSQL
WITH `project.dataset.dummy` AS (
SELECT 'abc' acname, 100 amount, 'a,b,c' domains UNION ALL
SELECT 'pqr', 300, 'p,q,r' UNION ALL
SELECT 'lmn', 500, 'l,m,n'
)
SELECT acname, amount, domain
FROM `project.dataset.dummy`,
UNNEST(SPLIT(domains)) domain
Run Code Online (Sandbox Code Playgroud)
带输出
Row acname amount domain
1 abc 100 a
2 abc 100 b
3 abc 100 c
4 pqr 300 p
5 pqr 300 q
6 pqr 300 r
7 lmn 500 l
8 lmn 500 m
9 lmn 500 n
Run Code Online (Sandbox Code Playgroud)
具有字段“域”的源表 project.dataset.dummy 具有逗号分隔值,但在逗号之后有一个空格(例如'a'commaspace'b'commaspacec a, b, c)。这导致值 bcqrmn 前有空格;在“取消嵌套后输出”表中的“域”字段中。现在我以“salesdomain”为键加入了这个表。但是因为bcqrmn之前有空格,接收到的输出不正确
为了解决这个问题 - 您可以简单地使用 TRIM 函数来删除所有前导和尾随空格,如下例所示
#standardSQL
WITH `project.dataset.dummy` AS (
SELECT 'abc' acname, 100 amount, 'a, b, c' domains UNION ALL
SELECT 'pqr', 300, 'p, q, r' UNION ALL
SELECT 'lmn', 500, 'l, m, n'
)
SELECT acname, amount, TRIM(domain, ' ') domain
FROM `project.dataset.dummy`,
UNNEST(SPLIT(domains)) domain
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8113 次 |
| 最近记录: |