BigQuery空前缀通配符查询匹配错误表原因咨询
问题根因
出现该问题的核心原因是BigQuery 通配符表查询的 Schema 推断发生在查询编译阶段,早于 _TABLE_SUFFIX 过滤条件的执行,具体逻辑如下:
- 当你使用空前缀通配符
`my_project.my_dataset.*`时,编译阶段会扫描数据集下所有表来推断本次查询的输出 Schema:- 新增
ios_daily_report_20210505表后,通配符匹配到了结构不同的Android_ad_revenue_raw_20210428和ios_daily_report_20210505两个表 - 两个表结构不兼容时,BigQuery 默认会选取最新创建的
ios_daily_report_20210505的表结构作为本次查询的输出 Schema - 后续执行阶段才会应用
_TABLE_SUFFIX = 'Android_ad_revenue_raw_20210428'过滤条件,此时实际读取的是Android表的数据,但列结构已经被固定为iOS表的结构,两者列不匹配,因此返回的所有行数据都是null
- 新增
- 当你调整为带前缀的通配符
`lovely-pets-2-dog-world-173288.appsflyer.A*`时:- 编译阶段通配符仅匹配A开头的表,只有
Android_ad_revenue_raw_20210428符合匹配规则,因此直接使用该表的结构作为查询输出Schema - 执行阶段过滤
_TABLE_SUFFIX后读取的数据结构和输出结构完全匹配,因此可以返回正常结果
- 编译阶段通配符仅匹配A开头的表,只有
内容的提问来源于stack exchange,提问作者Karen Avdalyan
相关产品推荐
相关产品推荐

