如何用正确语法查询BigQuery中多语言多日期格式的多张表?
BigQuery批量查询带语言标识与日期后缀表的语法
方法1:用表通配符+正则匹配(推荐,适合大量表)
如果你的表是[lang]_table_[YYYYMMDD]的固定格式,用_TABLE_SUFFIX或直接匹配table_id的方式最灵活,能一次性覆盖所有符合条件的表:
SELECT * FROM `project.dataset.*` WHERE -- 匹配语言前缀为fr或en,且后缀是8位日期的表 REGEXP_CONTAINS(table_id, r'^(fr|en)_table_\d{8}$') -- 筛选2022年10月1日到30日的表 AND PARSE_DATE('%Y%m%d', SUBSTR(table_id, -8)) BETWEEN DATE('2022-10-01') AND DATE('2022-10-30')
也可以拆分通配符位置,让匹配更精准:
SELECT * FROM `project.dataset.*_table_*` WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, r'^fr_table_|^en_table_') AND PARSE_DATE('%Y%m%d', REGEXP_EXTRACT(_TABLE_SUFFIX, r'(\d{8})$')) BETWEEN DATE('2022-10-01') AND DATE('2022-10-30')
方法2:UNION ALL手动合并(适合少量表)
如果需要查询的表数量不多,直接用UNION ALL把各个表拼起来就行:
SELECT * FROM `project.dataset.fr_table_20221001` UNION ALL SELECT * FROM `project.dataset.fr_table_20221002` -- 依次添加其他需要查询的表 UNION ALL SELECT * FROM `project.dataset.en_table_20221030`
注意:所有表的字段结构要一致,否则会报错。
方法3:创建视图复用查询逻辑
要是需要反复查询这批表,不如先建个视图封装逻辑,之后直接查视图就好:
CREATE OR REPLACE VIEW `project.dataset.combined_lang_date_tables` AS SELECT * FROM `project.dataset.*` WHERE REGEXP_CONTAINS(table_id, r'^(fr|en)_table_\d{8}$') AND PARSE_DATE('%Y%m%d', SUBSTR(table_id, -8)) BETWEEN DATE('2022-10-01') AND DATE('2022-10-30')
查询视图的语句很简单:
SELECT * FROM `project.dataset.combined_lang_date_tables`
内容的提问来源于stack exchange,提问作者badinmaths
相关产品推荐
相关产品推荐

