使用BigQuery上传bike_hire表后字段均显示nullable但可查询的问题咨询
BigQuery表字段全为Nullable但可正常查询的说明
场景:上传
bigquery_public_data.NY bike_rides.bike_hire表后,预览时所有字段都显示为可为空(nullable),但对该表的查询操作能正常执行。核心原因:
- BigQuery默认规则:如果上传时没显式给字段指定
NOT NULL约束,所有字段都会被标记为nullable,哪怕源数据里压根没空值。 - 元数据与实际数据的区别:预览显示的是表的元数据定义,nullable只是标记字段允许存空值,但实际查询时只要现有数据没问题,就能正常运行,这个标记不限制对现有非空数据的查询。
- 继承源表属性:如果原始的
bike_hire表字段本身就是nullable的,上传后的表会直接继承这个设置。
- BigQuery默认规则:如果上传时没显式给字段指定
验证和调整方法:
- 检查实际是否有空值:用下面的SQL逐个字段排查,确认数据里到底有没有空值
SELECT * FROM `你的项目ID.你的数据集ID.bike_hire` WHERE 目标字段名 IS NULL - 修正字段约束(如果需要):如果确认数据里没有空值,可以新建一个带非空约束的表
注意:如果源数据里存在空值,执行这个SQL会报错,得先清理空值再操作。CREATE OR REPLACE TABLE `你的项目ID.你的数据集ID.bike_hire_fixed` AS SELECT tripduration NOT NULL, starttime NOT NULL, -- 按实际字段依次添加NOT NULL约束 * EXCEPT(tripduration, starttime) -- 其他字段如果不需要改就保留原有定义 FROM `你的项目ID.你的数据集ID.bike_hire`
- 检查实际是否有空值:用下面的SQL逐个字段排查,确认数据里到底有没有空值
内容的提问来源于stack exchange,提问作者Bradley Hutchins
相关产品推荐
相关产品推荐

