【问题标题】:Using UNNEST Function in BigQuery在 BigQuery 中使用 UNNEST 函数
【发布时间】:2019-12-27 08:49:42
【问题描述】:

我需要有关如何使用 BigQuery UNNEST 函数的帮助。我的查询:

我有如图所示的表格,我想取消当前用逗号分隔的字段“域”(字符串类型),以便将每个逗号分隔的域放入每个“acname”的不同行中。所需的输出也包含在图像中:

enter image description here

我试过这个逻辑但没有奏效:

选择 acc.acname,acc.amount,acc.domains 作为 accdomains from project.dataset.dummy_account as acc 交叉连接 UNNEST(acc.domains)

但这给出了错误“UNNEST 中引用的值必须是数组。UNNEST 包含 STRING 类型的表达式”。该错误完全有道理,但不明白如何将字符串转换为数组。

有人可以帮助解决问题并解释一下,它实际上是如何工作的。谢谢。

【问题讨论】:

  • 域列的数据类型是什么?是字符串还是数组(重复字符串)?
  • 好的。谢谢你的更新。请参阅下面的答案

标签: google-bigquery


【解决方案1】:

以下是 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     

具有字段“domains”的源表 project.dataset.dummy 具有逗号分隔值,但在逗号之后有一个空格(例如 'a'commaspace'b'commaspacec a, b, c)。这导致在值 b c q r m n 之前有空格;在“Unnest 后输出”表中的“域”字段中。现在我以“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   

【讨论】:

  • 非常感谢 Mikhail Berlyant。非常感谢您的快速回复。
  • 在我的回答中查看更新。如果您有任何新问题或跟进 - 请发布新问题 - 不要使用 cmets 或答案来提出新问题 - 按照 StackOverflow 礼仪
猜你喜欢
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多