首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通配符与_TABLE_SUFFIX和子查询匹配

通配符与_TABLE_SUFFIX和子查询匹配
EN

Stack Overflow用户
提问于 2019-03-23 04:22:29
回答 3查看 681关注 0票数 1

_TABLE_SUFFIX特性非常棒,这正是我想要解决问题的地方--但是,当我使用子查询来确定要匹配哪些表时,它会扫描通配符匹配的所有数据。

如果您对_TABLE_SUFFIX上的一组值执行=、BETWEEN或IN等操作,您可以看到与简单的通配符相比,正在扫描的数据量会下降:

SELECT sample_data FROM `test.dataset.*` WHERE _TABLE_SUFFIX IN ("NWD1","NWD2","NWD3","NWD4","NWD5") -已扫描1.8 GB

但是,如果我执行以下操作:

SELECT sample_data FROM `test.dataset.*` WHERE _TABLE_SUFFIX IN (SELECT ID FROM subset) -50 in已扫描(此子选择包含与explicit IN子句中显示的值相同的值)

EN

回答 3

Stack Overflow用户

发布于 2019-03-23 05:37:50

_TABLE_SUFFIX上的常量筛选器将减少查询的数据量,但如果这些筛选器来自动态子查询,则不会。

作为替代方案-您是否考虑过群集存储?

聚集表能够优化查询的数据量,即使在使用动态子查询进行筛选时也是如此。

代码语言:javascript
复制
SELECT sample_data FROM `test.dataset.*`
  WHERE clustered_column IN (SELECT ID FROM subset)

会起作用的。

例如

代码语言:javascript
复制
SELECT MAX(title), wiki
FROM `fh-bigquery.wikipedia_v3.pageviews_2018` 
WHERE DATE(datehour) = '2018-01-10'
AND wiki IN (
  SELECT wiki 
  FROM  `fh-bigquery.wikipedia_v3.pageviews_2018`   
  WHERE  DATE(datehour) = '2018-01-01'
  AND NOT wiki LIKE 'e%'
  LIMIT 3
)
GROUP BY 2 

查询0.341 GB,而不是10 GB

票数 3
EN

Stack Overflow用户

发布于 2019-03-23 04:42:54

也许你能做的最好的事情就是用下面这样的查询生成IN子句,然后用生成的IN子句形成另一个查询:

代码语言:javascript
复制
select concat('IN ("', string_agg(ID, '", "'), '")') as in_clause 
from subset;
票数 1
EN

Stack Overflow用户

发布于 2019-03-23 17:50:24

它不关于子查询本身-如果限制数据位于查询中,那么一切都很好-即使使用子查询也是如此:

代码语言:javascript
复制
CREATE TEMP FUNCTION daterange(suf string) as ( suf between '04' and '06');

WITH vars AS (
  SELECT
    '04' as startDate,
    '06' as endDate,
    ['04', '05', '06'] as daterange
  )

SELECT 
  *
FROM
    `bigquery-public-data.google_analytics_sample.ga_sessions_201611*` t -- 513.6
WHERE 
  _TABLE_SUFFIX between '04' and '06' -- 39.4
  --(select _table_suffix between startDate and endDate from vars) -- 39.4
  --daterange(_table_suffix) -- 39.4
  --_table_suffix in unnest( (select daterange from vars) ) -- 39.4

哈!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55307282

复制
相关文章

相似问题

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