BigQuery通配符表-有什么限制?

时间:2020-01-30 20:14:49

标签: google-bigquery

我正在考虑组织一个BigQuery数据集,其中包含多个可以使用通配符查询的表。

在此用例中,可能会有1000多个表,每个表代表一个不同的客户。我需要能够分别查询它们,并且还需要同时查询所有它们。

我正在考虑使用具有群集的多个表而不是单个表,因为当仅针对特定客户运行查询时,我希望能够仅扫描所需的数据。

Quotas and limits页列出了以下适用的限制:

  • 每个查询引用的最大表数-1,000
  • 已解析的最大遗留和标准SQL查询长度-12 MB
  • 已解析查询长度的限制包括该查询引用的所有视图和通配符表的长度。

我的问题是:

1)在使用通配符(例如SELECT * FROM `project_id.dataset_id.table_*`)运行查询时,是否将与该通配符匹配的所有单个表都计入该1000个表的限制?

2)在12 MB的限制内到底要算什么?例如,假设我有以下表格project_id.dataset_id.table_1project_id.dataset_id.table_2project_id.dataset_id.table_3

  • 如果我在table_*上运行SELECT,将构成解析的查询长度吗?它是否包含所有表(project_id.dataset_id.table_1project_id.dataset_id.table_2project_id.dataset_id.table_3)的完全限定名称?
  • 如果我使用通配符table_*但在_TABLE_SUFFIX上包含过滤器(例如WHERE _TABLE_SUFFIX = "1"),这是否会从解析的查询中消除与过滤器不匹配的表?

3)我应该注意其他限制吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

我的建议是反对的。您将快速达到1000个表,并且无法查询所有表。另一个是将每个表分别保存将无法维护。

您可以使用群集来提供帮助。 如果您的一列是tenant_id,则可以在群集中使用它。

答案 1 :(得分:2)

使用通配符运行查询时,是否将与通配符匹配的所有单个表都计入该1000个表的限制?

所有与通配符和_TABLE_SUFFIX过滤器匹配的表都将计入1000个限制

在12 MB的限制内到底算什么?

以上解释的1000个表的限制中计算的所有表的全限定名称的长度将计入12 MB的限制

还有其他应注意的限制吗?

建议-分区和群集的组合将在问题中描述的用例中为您提供更好的服务。特别是现在您可以按integer range进行分区
这将使您在维护和处理数据时具有更高的灵活性,以与分片表方法进行比较
显然,仍有limitations related to partitioned tables要考虑