修改列重复Bigquery

时间:2016-02-25 19:06:35

标签: google-bigquery

我有一个重复列的表,没有重复。

{
"Id": "0",
"textField": [
  "value1",
  "value2",
  "value3"
],
"numericField": [
  "10"
],
"dateField": "2016-02-24 15:48:00 UTC"
}

Id              INTEGER     REQUIRED
textField       STRING      REPEATED
numericField    INTEGER     REPEATED
dateField       TIMESTAMP   NULLABLE

但是“textField”字段必须重复,“numericField”字段必须为“REPEATED”。

我尝试将信息复制到另一个包含已更改字段的表中,但这会替换我的字段并让我删除字段REPEATED https://cloud.google.com/bigquery/docs/tables#copyingtable

我尝试从查询创建表,但我不知道如何定义查询,以便“REPEATED”的“textField”字段不会更改,“numericField”变为未重复。 https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.query.tableDefinitions

如何在不丢失信息的情况下更改字段?

1 个答案:

答案 0 :(得分:1)

您可以使用FLATTEN功能查询并关闭查询结果自动展平来执行此操作。

SELECT Id, textField, numericField, dateField 
FROM FLATTEN([dataset.table], numericField);

您可以关闭查询结果的自动展平,这将保留textField的重复性。在查询配置中,将allowLargeResults设置为true,将flattenResults设置为false。这两个选项在Web UI或bq CLI中都可以使用相似的名称。

警告:如果一行中有多个numericField值,这将导致行的跨产品扩展(例如,每个输入行中每个numericField值一个输出行)。这对您来说可能是也可能不是问题(您的示例行没有多个numericField值),可能会或可能不是您想要做的。