我正在考虑组织一个BigQuery数据集,其中包含多个可以使用通配符查询的表。
在此用例中,可能会有1000多个表,每个表代表一个不同的客户。我需要能够分别查询它们,并且还需要同时查询所有它们。
我正在考虑使用具有群集的多个表而不是单个表,因为当仅针对特定客户运行查询时,我希望能够仅扫描所需的数据。
Quotas and limits页列出了以下适用的限制:
我的问题是:
1)在使用通配符(例如SELECT * FROM `project_id.dataset_id.table_*`
)运行查询时,是否将与该通配符匹配的所有单个表都计入该1000个表的限制?
2)在12 MB的限制内到底要算什么?例如,假设我有以下表格project_id.dataset_id.table_1
,project_id.dataset_id.table_2
,project_id.dataset_id.table_3
。
table_*
上运行SELECT,将构成解析的查询长度吗?它是否包含所有表(project_id.dataset_id.table_1
,project_id.dataset_id.table_2
,project_id.dataset_id.table_3
)的完全限定名称?table_*
但在_TABLE_SUFFIX
上包含过滤器(例如WHERE _TABLE_SUFFIX = "1"
),这是否会从解析的查询中消除与过滤器不匹配的表? 3)我应该注意其他限制吗?
谢谢。
答案 0 :(得分:2)
我的建议是反对的。您将快速达到1000个表,并且无法查询所有表。另一个是将每个表分别保存将无法维护。
您可以使用群集来提供帮助。
如果您的一列是tenant_id
,则可以在群集中使用它。
答案 1 :(得分:2)
使用通配符运行查询时,是否将与通配符匹配的所有单个表都计入该1000个表的限制?
所有与通配符和_TABLE_SUFFIX过滤器匹配的表都将计入1000个限制
在12 MB的限制内到底算什么?
以上解释的1000个表的限制中计算的所有表的全限定名称的长度将计入12 MB的限制
还有其他应注意的限制吗?
建议-分区和群集的组合将在问题中描述的用例中为您提供更好的服务。特别是现在您可以按integer range进行分区
这将使您在维护和处理数据时具有更高的灵活性,以与分片表方法进行比较
显然,仍有limitations related to partitioned tables要考虑