【问题标题】:Converting arrays to nested fields in BigQuery在 BigQuery 中将数组转换为嵌套字段
【发布时间】:2019-07-18 21:31:21
【问题描述】:

我正在将 Stackdriver 日志流式传输到 Bigquery,它们最终以以下格式显示在 textPayload 字段中:


member_id_hashed=123456789,

member_age -> Float(37.0,244),

operations=[92967,93486,86220,92814,92943,93279,...],

scores=[3.214899,2.3641025E-5,2.5823574,2.3818345,3.9919448,0.0,...],

[etc]

然后,我使用原始日志条目在表上定义一个查询/视图,如下所示:

SELECT
member_id_hashed as member_id, member_age,
split(operations,',') as operation,
split(scores,',') as score 
FROM
(
  SELECT
  REGEXP_EXTRACT(textPayload, r'member_id=([0-9]+)') as member_id_hashed,
  REGEXP_EXTRACT(textPayload, r'member_age -> Float\(([0-9]+)') as member_age,
  REGEXP_EXTRACT(textPayload, r'operations=\[(.+)') as operations,
  REGEXP_EXTRACT(textPayload, r'scores=\[(.+)') as scores
  from `myproject.mydataset.mytable`
)

导致一行有两个单个字段和两个数组:

理想情况下,为了进一步分析,我希望将两个数组嵌套(例如 operation.id 和 operation.score)或在保持位置的同时逐行展平数组(即数组 1 的第 1 行应该出现在数组 2 的第 1 行等):

任何人都可以指出一种从数组中生成嵌套字段或展平数组的方法吗?我尝试了取消嵌套和加入,但这会给我的结果带来太多可能的交叉组合。

感谢您的帮助!

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您可以像这样压缩两个数组。它使用操作 ID 对数组进行嵌套并获取每个元素的索引,然后选择具有分数的数组的对应元素。请注意,这假设数组具有相同数量的元素。如果他们不这样做,您可以使用SAFE_OFFSET 而不是OFFSET,以便在ID 多于分数时获取NULL。

    SELECT
      member_id_hashed, member_age,
      ARRAY(
        SELECT AS STRUCT id, split(scores,',')[OFFSET(off)] AS score
        FROM UNNEST(split(operations,',')) AS id WITH OFFSET off
        ORDER BY off
      ) AS operations
    FROM (
      SELECT
        REGEXP_EXTRACT(textPayload, r'member_id=([0-9]+)') as member_id,
        REGEXP_EXTRACT(textPayload, r'member_age -> Float\(([0-9]+)') as member_age,
        REGEXP_EXTRACT(textPayload, r'operations=\[(.+)') as operations,
        REGEXP_EXTRACT(textPayload, r'scores=\[(.+)') as scores
      from `myproject.mydataset.mytable`
    )
    

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 2018-02-16
      • 2014-03-16
      • 2015-12-22
      • 1970-01-01
      • 2018-06-06
      相关资源
      最近更新 更多