我正在运行查询以更改列数据类型,然后选择目标表查询表本身。我选择写首选项“覆盖表”。表的所有列都是必需的,表不为空。但是运行查询后,所有列模式都将更改为NULLABLE。我的演员表查询如:
SELECT
CAST(id AS STRING) as id, column1, column2
FROM
dataset.mytable;
总是这样吗,还是我犯错了?
答案 0 :(得分:5)
我犯错了吗?
不是,这是设计使然,当您覆盖表时,原始架构会丢失并且列默认情况下可以为空
总是这样吗?
您应该使用CREATE OR REPLACE TABLE
DDL语句来实现您的目标。如下
CREATE OR REPLACE TABLE `project.dataset.mytable` (
id STRING NOT NULL,
column1 INT64 NOT NULL,
column2 INT64 NOT NULL
) AS
SELECT CAST(id AS STRING) as id, column1, column2
FROM `project.dataset.mytable`