【问题标题】:All columns have NULLABLE problem when destination table with overwrite preference on Bigquery当目标表在 Bigquery 上具有覆盖首选项时,所有列都存在 NULLABLE 问题
【发布时间】:2018-12-27 12:36:39
【问题描述】:

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

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

总是这样,还是我搞错了?

【问题讨论】:

  • 如果您将目标表设置为新表,而不是覆盖源表,会发生什么情况 - 您是否获得了所需的结果?由于您无法更改表中的数据类型 (stackoverflow.com/questions/53745229/…),我不希望覆盖函数以这种方式工作。

标签: google-bigquery


【解决方案1】:

我错了吗?

不,这是设计使然,当您覆盖表时,原始架构会丢失,并且默认情况下列可以为空

总是这样吗?

您应该使用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`

【讨论】:

  • 感谢您的帮助,它工作正常。但是,按摄取时间表分区不能这样工作。我怎样才能覆盖这些表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多