PubSub-to-BigQuery订阅中defaultValueExpression不生效问题咨询
问题原因及解决办法
核心原因
PubSub-to-BigQuery订阅的写入逻辑会覆盖BigQuery的字段默认值,具体两点:
- 当你的PubSub主题Schema包含
ingestion_time字段时,哪怕消息里没带这个值,订阅在构造BigQuery插入请求时,会显式将该字段设为NULL并加入插入列列表中。 - BigQuery的
defaultValueExpression只有在插入语句完全不包含该字段(连字段名都没出现)时才会触发,显式传入NULL的话,会直接覆盖默认值。
解决办法
- 修改主题Schema:把
ingestion_time从PubSub主题的Schema里移除。这样订阅写入时不会把该字段加入插入请求,BigQuery就会自动用CURRENT_TIMESTAMP()填充这个字段。 - 配置订阅字段映射:在PubSub-to-BigQuery订阅的设置里添加字段映射规则,直接将
ingestion_time映射为CURRENT_TIMESTAMP()。这样订阅会在写入时直接生成时间戳,不需要依赖表的默认值。 - BigQuery视图补全(备选):如果没法修改主题或订阅配置,可以在BigQuery上创建一个视图,将
ingestion_time为NULL的行替换为CURRENT_TIMESTAMP()(但这是事后处理,不是写入时实时生效)。
内容的提问来源于stack exchange,提问作者Keith Cozart
相关产品推荐
相关产品推荐

