And*_*idy 4 google-bigquery google-cloud-platform
从 https://cloud.google.com/bigquery/docs/partitioned-tables:
您可以使用基于时间的命名方法(例如 [PREFIX]_YYYYMMDD)对表进行分片
这使我能够做到:
SELECT count(*) FROM `xxx.xxx.xxx_*`
Run Code Online (Sandbox Code Playgroud)
并查询所有分片。是否有仅查询最新分片的特殊符号?例如说我有:
我可以做一些类似的事情吗
SELECT count(*) FROM `xxx.xxx.xxx_{{ latest }}`
Run Code Online (Sandbox Code Playgroud)
查询xxx_20180801?
受 Mikhail Berlyant 启发的单一查询:
SELECT count(*) as c FROM `XXX.PREFIX_*` WHERE _TABLE_SUFFIX IN ( SELECT
SUBSTR(MAX(table_id), LENGTH('PREFIX_') + 2)
FROM
`XXX.__TABLES_SUMMARY__`
WHERE
table_id LIKE 'PREFIX_%')
Run Code Online (Sandbox Code Playgroud)
如果您确实关心成本(意味着您的查询将扫描多少表) - 这样做的唯一方法是分两步进行,如下所示
第一次查询
#standardSQL
SELECT SUBSTR(MAX(table_id), LENGTH('PREFIX') + 1)
FROM `xxx.xxx.__TABLES_SUMMARY__`
WHERE table_id LIKE 'PREFIX%'
Run Code Online (Sandbox Code Playgroud)
第二次查询
#standardSQL
SELECT COUNT(*)
FROM `xxx.xxx.PREFIX_*`
WHERE _TABLE_SUFFIX = '<result of first query>'
Run Code Online (Sandbox Code Playgroud)
所以,如果第一个查询的结果是20180801
这样,第二个查询显然如下所示
#standardSQL
SELECT COUNT(*)
FROM `xxx.xxx.PREFIX_*`
WHERE _TABLE_SUFFIX = '20180801'
Run Code Online (Sandbox Code Playgroud)
如果您不关心成本而只需要结果 - 您可以轻松地将上述两个查询合并为一个 - 但是 - 再次 - 请记住 - 即使结果将不在最后一个表中 - 成本将是您查询所有匹配的表 xxx.xxx.PREFIX_*
忘了提及(即使它应该是显而易见的):当然,当你只有COUNT(1)
你的SELECT
- 两种选择的成本都是 0(零) - 但实际上 - 很可能你会拥有比计数更有价值的东西(1 )
归档时间: |
|
查看次数: |
517 次 |
最近记录: |