【问题标题】:Translate multiple fields per record into multiple records and a single field将每条记录的多个字段转换为多个记录和一个字段
【发布时间】:2016-05-11 18:13:52
【问题描述】:

我正在尝试将每条记录的多个字段(在本例中为三个字段)转换为多个记录的单个字段。例如,如果架构是

 userId, timestamp, field1, field2, field3

我想把它转换成

 userId, timestamp, field

例如

 abc123, 12:00:00, dog, dog, bird
 abc789, 12:00:01, wolf, sheep, horse

会变成

 abc123, 12:00:00, dog
 abc123, 12:00:00, dog
 abc123, 12:00:00, bird
 abc789, 12:00:00, wolf
 abc789, 12:00:00, sheep
 abc789, 12:00:00, horse

排序无关紧要

这是因为这些字段的数据是并行捕获的,但我希望能够计算这些字段中特定值出现的次数,无论它们是在字段 1、字段 2 还是字段 3 中。具体来说,我希望能够数出 2 条狗、1 条鸟、1 条狼、1 条羊和 1 匹马。

有什么建议吗?

【问题讨论】:

  • 那么到目前为止你尝试了什么?
  • 我真的不知道从哪里开始。
  • 看我的回答 - 这对你来说不是一个好的开始吗? :o)
  • 哈哈我没注意到!谢谢!成功了!

标签: google-bigquery


【解决方案1】:

为了完整起见,您可以使用带有数组文字的standard SQL(取消选中“显示选项”下的“使用旧版 SQL”框)来实现此目的;无需连接然后拆分。例如,

SELECT
  userId,
  timestamp,
  [field1, field2, field3] AS field 
FROM YourTable;

【讨论】:

    【解决方案2】:

    对于 BigQuery 旧版 SQL:

    SELECT 
      userId, 
      timestamp, 
      SPLIT(CONCAT(field1, ',', field2, ',', field3)) AS field 
    FROM YourTable
    

    【讨论】:

    • 很酷的解决方案!我使用了 Unions 并最终得到了一个巨大的查询,这要好得多。
    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多