2016-02-25 61 views
3

我有一个列重复和不重复的表。修改列重复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”字段不能重复。

我tryed到的信息复制到与改变字段的另一个表,但它取代我的领域,让我场反复 https://cloud.google.com/bigquery/docs/tables#copyingtable

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

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

回答

1

您可以通过查询使用FLATTEN函数并关闭查询结果自动展平来完成此操作。

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

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

注意事项:如果在一行中有多个numericField值,则会导致行的跨产品扩展(例如,每个输入行中每个numericField值有一个输出行)。这对你来说可能是也可能不是问题(你的示例行没有多个numericField值),并且可能会或可能不是你想要做的。

+0

感谢您的回答! –