将可为 Null 的字段恢复为必填字段

问题描述 投票:0回答:3

我使用

.setSchemaUpdateOptions
ALLOW_FIELD_RELAXATION
将数据附加到我的表中,该表的 REQUIRED 字段有多个不存在/空值。我的印象是它会暂时放宽所需的限制。不幸的是,它似乎已将我的所有字段永久更改为 NULLABLE。

有没有办法在不重播整个表的情况下恢复此更改?

google-bigquery
3个回答
6
投票

您需要重新创建表,您可以就地执行此操作:

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 属性。


1
投票

由于此表中的某些行现在存在空值,因此您将无法将表恢复为具有必需的约束

在此处了解更多信息:https://cloud.google.com/bigquery/docs/managing-table-schemas

放松栏目模式 目前,您可以对列模式进行的唯一受支持的修改是将其从 REQUIRED 更改为 NULLABLE。将列的模式从 REQUIRED 更改为 NULLABLE 也称为列松弛。您可以放宽必填栏:

手动 当您使用加载或查询作业覆盖表时 当您使用查询作业将数据追加到表中时 注意:将 REQUIRED 列更改为 NULLABLE 无法撤消。

BigQuery 非常擅长的是在表之间移动大量数据集(注意成本) 你可以: 1.更新当前表中的空值 2. 使用 REQUIRED 字段重新创建一个新表(如果您想保留该名称,则还必须在 TEMP 表中停止) 3. 启动一个简单的加载作业,将数据从旧表迁移到新表


0
投票

您无法通过单个 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`;
© www.soinside.com 2019 - 2024. All rights reserved.