【发布时间】:2022-10-25 04:09:55
【问题描述】:
我有一个看起来像这样的 BigQuery 表:
--------------------------------------------------------
| col1 | cols 2-10 | col 11 |
--------------------------------------------------------
| event1 | metatdata | [0,0,0,0,0,0,0...1, 30, 50, 43] |
--------------------------------------------------------
最后一列是代表事件数据的 int64 数组(数组中的位置以及任何前导零都很重要)。通常 ARRAY_AGG 可以聚合最后一列中的计数(这是所有这一切的最终目标),但在我的情况下,数据实际上是运行长度编码(RLE),所以它可能看起来像这样:
[-20, 1, 4, 5, 10, 20]
[-10, 2, 4, 10, 3, 8]
其中任何负数表示零的数量。
所以 [-10, 1] 是: [0,0,0,0,0,0,0,0,0,0,1]
我试图想办法在查询时用正确长度的数组 0 替换负数,这样我就可以将它输入 ARRAY_AGG。
一个理想的解决方案将能够在查询时用适当数量的零替换数组中的任意数量的负数,以允许聚合准确计算。一个不太理想的解决方案将允许固定数量的替换(甚至 1 个)。
所以,理想: [-4, 3, -2, 1, -3, 9] -> [0,0,0,0,3,0,0,1,0,0,0,9]
到目前为止,我的尝试使用了 UNNEST 和 IF 语句,但我还没有走得太远。
感谢您的任何意见。
【问题讨论】:
标签: google-cloud-platform google-bigquery bigtable