首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_TABLE_SUFFIX不过滤表的通配符

_TABLE_SUFFIX不过滤表的通配符
EN

Stack Overflow用户
提问于 2020-04-13 19:58:53
回答 2查看 513关注 0票数 0

例如,我有两个具有相似名称和不同模式的表。

代码语言:javascript
复制
project.dataset.orders_XXXXX_YYYYMMDD

代码语言:javascript
复制
project.dataset.orders_static_XXXXX_YYYYMMDD

其中XXXXX是数字和字母的混合,YYYYMMDD是日期。通配符表只能用于具有类似模式的表,因此

代码语言:javascript
复制
SELECT * FROM
`project.dataset.orders_*`
WHERE NOT _TABLE_SUFFIX LIKE 'static.*'

WHERE子句不会限制扫描的表。如何使用通配符过滤掉静态表?

UPD:正如答案中善意的建议,我正在完善问题描述

在query parsing...Filtering out检索通配符表的架构,在查询执行时执行静态表。

此问题发生在查询解析过程中,同时使用以下错误解析不同的模式:

代码语言:javascript
复制
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中解决这个问题是很奇怪的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-14 02:09:12

由于_TABLE_SUFFIX是一个包含与前缀匹配的值的字符串,另一个选项是:

代码语言:javascript
复制
SELECT * 
FROM `project.dataset.orders*`
WHERE NOT _TABLE_SUFFIX LIKE '_static%'

这里更多使用_TABLE_SUFFIX过滤的示例

更新:

在LegacySQL中,函数匹配可以用来检索带有正则表达式的表。我已经进行了测试,而且由于我的测试中没有对模式进行评估,所以它似乎可以适用于您的用例:

代码语言:javascript
复制
SELECT * FROM TABLE_QUERY([project:dataset],'REGEXP_MATCH(table_id, r"orders_\d{5}_*")') 
票数 1
EN

Stack Overflow用户

发布于 2020-04-13 20:36:56

如何使用通配符过滤出静态表?

代码语言:javascript
复制
SELECT * FROM
`project.dataset.orders_*`
WHERE NOT _TABLE_SUFFIX LIKE 'static%'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61195747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档