BigQuery-仅使用键值模式查询表中的键子集

时间:2018-07-30 12:33:00

标签: google-cloud-platform google-bigquery

所以我有一个具有以下架构的表:

timestamp: TIMESTAMP
key: STRING
value: FLOAT

大约有200个唯一键。我正在按日期对数据集进行分区。

我想每天在此数据库上运行几个查询(当前为5-6个,但我希望至少再增加15个)。蛮力迫使他们每天要花很多钱,我想避免。

问题在于,由于这种键-值格式,并且BigQuery是列式数据库,因此尽管每个查询实际上最多使用4个键,但每个查询都查询整天的数据。对此进行优化的最佳方法是什么?

我认为现在最好的方法是为每个密钥创建单独的临时表,作为日常批处理过程,对它们运行查询,然后删除它们。

我想采用的理想方法是按键分区,我不确定是否有这样的规定?

1 个答案:

答案 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上查看更多信息