我需要关于如何使用BigQuery UNNEST功能的帮助。我的问题是:
我有一个如图所示的表,我想要解套当前由逗号分隔的“域”(字符串类型)字段,以便将每个逗号分隔的域放入每个"acname“的不同行中。所需的输出也包含在图像中:
我尝试了这个逻辑,但不起作用:
从project.dataset.dummy_account
中选择acc.acname、acc.amount、acc.domains作为Acc域,作为acc交叉加入UNNEST(acc.domains)
但这给出了错误“在UNNEST中引用的值必须是数组。UNNEST包含字符串类型的表达式”。该错误完全有意义,但不理解如何将字符串转换为数组。
有没有人可以帮我解决这个问题,并解释一下它的实际工作原理。谢谢。
发布于 2019-08-22 13:24:46
下面是针对BigQuery标准SQL的说明
#standardSQL
SELECT acname, amount, domain
FROM `project.dataset.dummy`,
UNNEST(SPLIT(domains)) domain
您可以使用问题中的虚拟数据进行测试,如下面的示例所示
#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
带输出
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
取消嵌套后输出“
”字段的源表project.dataset.dummy具有逗号分隔值,但逗号后有一个空格(例如,‘a’‘commaspace’b‘’commaspace a,b,c)。这将导致在“取消嵌套后输出”表中的字段"domains“中,值b c q r m n前有空格。现在我将使用"salesdomain”作为键连接此表。但由于b c q r m n之前有空格,因此收到的输出不正确
为了解决这个问题,您可以简单地使用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
https://stackoverflow.com/questions/57602387
复制相似问题