Google cloud platform 从BigQuery中的最新时间戳分片表查询的特殊字符

Google cloud platform 从BigQuery中的最新时间戳分片表查询的特殊字符,google-cloud-platform,google-bigquery,Google Cloud Platform,Google Bigquery,从 : 您可以使用基于时间的命名方法(如[PREFIX]\u YYYYMMDD)对表进行分片 这使我能够做到: SELECT count(*) FROM `xxx.xxx.xxx_*` 并查询所有碎片。是否有只查询最新碎片的特殊符号?例如,我有: xxx_20180726 xxx_20180801 我可以做些类似于 SELECT count(*) FROM `xxx.xxx.xxx_{{ latest }}` 要查询xxx\U 20180801 受Mikhail Berlyant启发的单

从 :

您可以使用基于时间的命名方法(如[PREFIX]\u YYYYMMDD)对表进行分片

这使我能够做到:

SELECT count(*) FROM `xxx.xxx.xxx_*` 
并查询所有碎片。是否有只查询最新碎片的特殊符号?例如,我有:

xxx_20180726 xxx_20180801 我可以做些类似于

SELECT count(*) FROM `xxx.xxx.xxx_{{ latest }}` 
要查询xxx\U 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_%')

如果您确实关心成本,即查询将扫描多少个表,那么唯一的方法是分两步进行,如下所示

第一个问题

标准SQL 选择SUBSTRMAXtable_id,长度“PREFIX”+1 来自'xxx.xxx.\u表格\u摘要__` 其中表\u id像“前缀%” 第二个问题

标准SQL 选择计数* 来自`xxx.xxx.PREFIX_*` 其中_表_后缀= 所以,若第一个查询的结果是20180801,那个么第二个查询显然如下所示

标准SQL 选择计数* 来自`xxx.xxx.PREFIX_*` 其中_TABLE_SUFFIX='20180801' 如果您不关心成本,而只需要结果-您可以轻松地将上述两个查询合并为一个-但是-再次-记住-即使结果将超出最后一个表-成本将与您查询所有匹配xxx.xxx.PREFIX的表时相同


忘了提及,尽管这应该是显而易见的:当然,当您选择的只有COUNT1时,两个选项的成本都为零,但实际上,您很可能会拥有比COUNT1更值钱的东西,谢谢您的接受。如果还没有投票赞成:我真的不知道如何轻松地结合这两个查询?第一个查询的结果如何在第二个查询的WHERE子句中使用?在第二个查询中,不是复制粘贴第一个用括号括起来的查询。。。很明显,我不知道。是的,我错过了一件有_TABLE_后缀的小事情。我将更新我的问题,以反映您现在在BigQuery脚本中帮助我的内容。您可以将第一个查询的结果设置为一个变量,然后在第二个查询中将该变量用于过滤器。