将列及其数据附加到 BigQuery table
Append a column and its data to a BigQuery table
我已经成功地使用此 link 将列附加到 BigQuery table。这只会更新架构,但我还想填写新添加的列的字段。有办法吗?
谢谢!
BigQuery 只能追加,因此您无法更新现有行。对于新插入,您可以填充您添加的新列。
如果您想更新以前的数据,您需要将 table 重新创建为一个新数据,然后您就可以在插入时添加您想要的数据。
如果您想填写新列,您可以 运行 执行此操作的查询,写入处置 "write truncate"。例如,如果您有 table mydataset.mytable
字段 a、b 和 c,则添加 d,并希望在任何行中为 d 填写值 "foo"没有,你可以这样做:
SELECT a,b,c,IFNULL(d, "foo") as d FROM mydataset.mytable
然后您可以将目标 table 设置为 mydataset.mytable
,设置 'allow large results',并将写入首选项设置为 'Overwrite Table'。 (这是如果您使用 UI... 如果您直接使用 API,则查询作业配置的查询选项部分有映射。)
请注意,如果您有任何嵌套字段(假设 'b' 是嵌套的),您将在 select 列表中使用 b.*
而不是 b
并清除查询选项中的 'flatten results' 字段。
我已经成功地使用此 link 将列附加到 BigQuery table。这只会更新架构,但我还想填写新添加的列的字段。有办法吗?
谢谢!
BigQuery 只能追加,因此您无法更新现有行。对于新插入,您可以填充您添加的新列。
如果您想更新以前的数据,您需要将 table 重新创建为一个新数据,然后您就可以在插入时添加您想要的数据。
如果您想填写新列,您可以 运行 执行此操作的查询,写入处置 "write truncate"。例如,如果您有 table mydataset.mytable
字段 a、b 和 c,则添加 d,并希望在任何行中为 d 填写值 "foo"没有,你可以这样做:
SELECT a,b,c,IFNULL(d, "foo") as d FROM mydataset.mytable
然后您可以将目标 table 设置为 mydataset.mytable
,设置 'allow large results',并将写入首选项设置为 'Overwrite Table'。 (这是如果您使用 UI... 如果您直接使用 API,则查询作业配置的查询选项部分有映射。)
请注意,如果您有任何嵌套字段(假设 'b' 是嵌套的),您将在 select 列表中使用 b.*
而不是 b
并清除查询选项中的 'flatten results' 字段。