重复字段的 BigQuery 记录

Posted

技术标签:

【中文标题】重复字段的 BigQuery 记录【英文标题】:BigQuery record of repeated fields 【发布时间】:2018-03-12 08:18:06 【问题描述】:

我有一个 Bigquery 表,其中(从概念上讲)一个包含重复记录的字段。

但是,此字段存储为重复字段的记录。这是由 AppEngine DataStore 的导出(使用 Mache)或数据的表示(使用 Objectify 3)引起的;我不知道。

所以我有一个字段 (exercises),看起来像这样:

exercises           RECORD  NULLABLE    exercises
exercises.id        INTEGER REPEATED    id
exercises.weight    FLOAT   REPEATED    weight
exercises.duration  STRING  REPEATED    duration

而不是

exercises           RECORD  REPEATED    exercises
exercises.id        INTEGER NULLABLE    id
exercises.weight    FLOAT   NULLABLE    weight
exercises.duration  STRING  NULLABLE    duration

后者可以使用FLATTEN(旧版SQL)或UNNEST(标准SQL)轻松查询。但是,对于我现在拥有的架构,我似乎被卡住了。 我想我必须以某种方式将exercises 字段从数组记录转换为记录数组。 exercises 的子字段始终具有相同的长度,所以这应该不是问题。

如何查询和选择该字段?

【问题讨论】:

【参考方案1】:

我试过UNNEST WITH OFFSET,正如here建议的那样:

SELECT
  exerciseId, exofs,
  exercises.weight[OFFSET(exofs)] AS exerciseWeight,
  exercises.duration[OFFSET(exofs)] AS exerciseDuration
FROM Session, UNNEST(exercises.id) AS exerciseId WITH OFFSET exofs

这行得通!此功能仅在标准 SQL 中可用。旧版 SQL 中的 FLATTEN 不支持 WITH OFFSET

【讨论】:

以上是关于重复字段的 BigQuery 记录的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:选择重复记录中字段之间的最小差异

BigQuery 从查询中创建重复记录字段

根据 BigQuery 重复记录中的字段计算聚合

在 BigQuery 中嵌套多个重复字段

bigquery 嵌套和重复字段查询

在 BigQuery 中取消嵌套多个嵌套字段