Using UNNEST Function in BigQuery
我需要有关如何使用BigQuery UNNEST函数的帮助。 我的查询:
我具有图片中所示的表,并且想要取消嵌套当前用逗号分隔的字段" domains"(字符串类型),以便为每个" acname"将每个逗号分隔的域放入不同的行中。 所需的输出也包含在图像中:
在此处输入图片说明
我尝试了这种逻辑,但没有起作用:
从
交叉加入嵌套(根据域)
但这给了错误" UNNEST中引用的值必须是数组。UNNEST包含类型为STRING的表达式"。 该错误完全有意义,但不了解如何将字符串转换为数组。
有人可以提供解决方案的帮助,也可以解释一下它的实际工作原理。 谢谢。
以下是BigQuery标准SQL
1 2 3 4 | #standardSQL SELECT acname, amount, domain FROM `project.dataset.dummy`, UNNEST(SPLIT(domains)) domain |
您可以使用问题中的虚拟数据来测试,玩游戏,如下例所示
1 2 3 4 5 6 7 8 9 | #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 |
带输出
1 2 3 4 5 6 7 8 9 10 | 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 |
The source table project.dataset.dummy which had field"domains" has comma separated values but after the comma there is a space (e.g. 'a'commaspace'b'commaspacec a, b, c). This results in space before the values b c q r m n; in the field"domains" in"Output After Unnest" table. Now I'm joining this table with"salesdomain" as a key. But because of space before b c q r m n, the output received is not correct
为了解决这个问题,您可以简单地使用TRIM函数删除所有前导和尾随空格,如下例所示
1 2 3 4 5 6 7 8 9 | #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 |