我有一个重复列的表,没有重复。
{
"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
如何在不丢失信息的情况下更改字段?
答案 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值),可能会或可能不是您想要做的。