所以我有一个具有以下架构的表:
timestamp: TIMESTAMP
key: STRING
value: FLOAT
大约有200个唯一键。我正在按日期对数据集进行分区。
我想每天在此数据库上运行几个查询(当前为5-6个,但我希望至少再增加15个)。蛮力迫使他们每天要花很多钱,我想避免。
问题在于,由于这种键-值格式,并且BigQuery是列式数据库,因此尽管每个查询实际上最多使用4个键,但每个查询都查询整天的数据。对此进行优化的最佳方法是什么?
我认为现在最好的方法是为每个密钥创建单独的临时表,作为日常批处理过程,对它们运行查询,然后删除它们。
我想采用的理想方法是按键分区,我不确定是否有这样的规定?
答案 0 :(得分:0)
您可以尝试使用最近推出的https://www.youtube.com/watch?v=J_d4bEKUG2Q
在BigQuery中创建集群表格时,表格数据是根据表格架构中一个或多个列的内容自动组织的。您指定的列用于并置相关数据。当您使用多个列对一个表进行聚类时,指定的列顺序很重要。指定列的顺序确定数据的排序顺序。
聚类可以提高某些类型的查询的性能,例如使用过滤子句的查询和聚合数据的查询。当查询作业或装入作业将数据写入群集表时,BigQuery将使用群集列中的值对数据进行排序。这些值用于将数据组织到BigQuery存储中的多个块中。当您提交包含根据聚类列过滤数据的子句的查询时,BigQuery使用排序的块来消除对不必要数据的扫描。
类似地,当您提交基于聚类列中的值汇总数据的查询时,由于排序的块将具有相似值的行并置在一起,因此性能得到了改善。
更新(从评论中移出 )
还请记住以下
Feature Partitioning Clustering
--------------- ------------- -------------
Cardinality Less than 10k Unlimited
Dry Run Pricing Available Not available
Query Pricing Exact Best Effort
要特别注意Dry Run Pricing
-不幸的是-群集表不支持基于群集键的空运行(验证)-而是仅显示基于分区的验证。但是如果您正确设置群集,则实际运行将以较低的成本完成。您应该尝试使用较小的数据来适应
在clustering partitioned tables
上查看更多信息