如何在BigQuery中通过SELECT语句为新表指定非空列约束?
实现方法
当然有可行的实现方式!下面分享两种常用的方案,都能确保新表的no_more_null列带有REQUIRED(非空)约束:
方案一:CREATE TABLE AS SELECT 结合显式Schema定义
这种方式一步到位,直接在创建表时指定列的约束,同时填充查询结果:
CREATE TABLE `你的项目ID.你的数据集ID.新表名` ( no_more_null 字段类型 REQUIRED -- 替换为实际字段类型,比如INT64、BOOL、STRING等 ) AS SELECT contains_null AS no_more_null FROM `你的项目ID.你的数据集ID.XXXXX` WHERE contains_null IS NOT NULL;
注意:字段类型必须和原表中contains_null列的类型一致,避免类型不匹配错误。
方案二:先创建空表再插入数据
如果需要更灵活地控制表的其他属性(比如分区、集群等),可以先创建带约束的空表,再插入数据:
-- 1. 创建带非空约束的空表 CREATE TABLE `你的项目ID.你的数据集ID.新表名` ( no_more_null 字段类型 REQUIRED -- 同样替换为实际类型 ); -- 2. 插入过滤后的查询结果 INSERT INTO `你的项目ID.你的数据集ID.新表名` (no_more_null) SELECT contains_null AS no_more_null FROM `你的项目ID.你的数据集ID.XXXXX` WHERE contains_null IS NOT NULL;
关键说明
因为原查询已经通过WHERE contains_null IS NOT NULL过滤掉了所有空值,所以插入到REQUIRED列时不会触发非空约束的错误,可以放心执行。
内容的提问来源于stack exchange,提问作者Andrew Cassidy
相关产品推荐
相关产品推荐

