我使用
.setSchemaUpdateOptions
和 ALLOW_FIELD_RELAXATION
将数据附加到我的表中,该表的 REQUIRED 字段有多个不存在/空值。我的印象是它会暂时放宽所需的限制。不幸的是,它似乎已将我的所有字段永久更改为 NULLABLE。
有没有办法在不重播整个表的情况下恢复此更改?
您需要重新创建表,您可以就地执行此操作:
CREATE OR REPLACE TABLE dataset.table
(
x INT64 NOT NULL,
y STRING NOT NULL,
z BOOL NOT NULL
) AS
SELECT *
FROM dataset.table
您必须列出列及其类型,以及您想要的列的 NOT NULL 属性。
由于此表中的某些行现在存在空值,因此您将无法将表恢复为具有必需的约束
在此处了解更多信息:https://cloud.google.com/bigquery/docs/managing-table-schemas
放松栏目模式 目前,您可以对列模式进行的唯一受支持的修改是将其从 REQUIRED 更改为 NULLABLE。将列的模式从 REQUIRED 更改为 NULLABLE 也称为列松弛。您可以放宽必填栏:
手动 当您使用加载或查询作业覆盖表时 当您使用查询作业将数据追加到表中时 注意:将 REQUIRED 列更改为 NULLABLE 无法撤消。
BigQuery 非常擅长的是在表之间移动大量数据集(注意成本) 你可以: 1.更新当前表中的空值 2. 使用 REQUIRED 字段重新创建一个新表(如果您想保留该名称,则还必须在 TEMP 表中停止) 3. 启动一个简单的加载作业,将数据从旧表迁移到新表
您无法通过单个 DDL 来实现此目的,但您可以避免创建临时表并为此修复支付两次费用。
您可以这样做:
CREATE OR REPLACE TABLE `dataset1.table1`
(
a INT64 NOT NULL,
b STRING NOT NULL
) AS
SELECT
COALESCE(a, 0) AS a,
COALESCE(b, '') AS b
FROM `dataset1.table1`;