在Bigquery

时间:2018-12-27 12:36:40

标签: google-bigquery

我正在运行查询以更改列数据类型,然后选择目标表查询表本身。我选择写首选项“覆盖表”。表的所​​有列都是必需的,表不为空。但是运行查询后,所有列模式都将更改为NULLABLE。我的演员表查询如:

SELECT CAST(id AS STRING) as id, column1, column2 FROM dataset.mytable;

总是这样吗,还是我犯错了?

1 个答案:

答案 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`