例如,我有两个具有相似名称和不同模式的表。
project.dataset.orders_XXXXX_YYYYMMDD和
project.dataset.orders_static_XXXXX_YYYYMMDD其中XXXXX是数字和字母的混合,YYYYMMDD是日期。通配符表只能用于具有类似模式的表,因此
SELECT * FROM
`project.dataset.orders_*`
WHERE NOT _TABLE_SUFFIX LIKE 'static.*'WHERE子句不会限制扫描的表。如何使用通配符过滤掉静态表?
UPD:正如答案中善意的建议,我正在完善问题描述
在query parsing...Filtering out检索通配符表的架构,在查询执行时执行静态表。
此问题发生在查询解析过程中,同时使用以下错误解析不同的模式:
Field name field0 does not exist in STRUCT<record1 STRUCT<field1 STRING, field2 STRING, field3 STRING, ...>, record2 STRUCT<field4 FLOAT64, field5 STRING, field6 STRING>, field7 STRING, ...>这个问题可以用遗留SQL中的REGEXP_MATCH解决。不能够在标准SQL中解决这个问题是很奇怪的。
发布于 2020-04-14 02:09:12
由于_TABLE_SUFFIX是一个包含与前缀匹配的值的字符串,另一个选项是:
SELECT *
FROM `project.dataset.orders*`
WHERE NOT _TABLE_SUFFIX LIKE '_static%'这里更多使用_TABLE_SUFFIX过滤的示例
更新:
在LegacySQL中,函数匹配可以用来检索带有正则表达式的表。我已经进行了测试,而且由于我的测试中没有对模式进行评估,所以它似乎可以适用于您的用例:
SELECT * FROM TABLE_QUERY([project:dataset],'REGEXP_MATCH(table_id, r"orders_\d{5}_*")') 发布于 2020-04-13 20:36:56
如何使用通配符过滤出静态表?
SELECT * FROM
`project.dataset.orders_*`
WHERE NOT _TABLE_SUFFIX LIKE 'static%'https://stackoverflow.com/questions/61195747
复制相似问题