2016-11-07 40 views
1

我正在使用Google BigQuery将用户数据活动存储在我的应用中。Google BigQuery价格优化

我在BigQuery中创建了一个表,我们称之为“user_activities_data”。

该数据包括许多数据用户活动,每秒都会更新一次。每秒钟都会有数千个新数据插入到表格中。

我对这张表做了很多查询。

我知道BigQuery的收费标准是您为每个查询使用了多少数据。我已经尝试优化我的查询,尽可能使用数据大小(只选择需要的列)。

例如:

SELECT username,activity FROM user_activities_data WHERE date_activities>='2016-10-01' and date_activities<='2016-10-31' 

但因为每天我的数据的数量始终不断增加,定价变得越来越太。即使我使用相同的查询与限制相同(例如上面的查询)。

所以我的问题是什么是优化定价的最优方法?

上个月对于每个查询,我将收取0.2美元左右的费用,而本月因为我的数据量增加了一倍,所以我得到的每个查询费用为0.4美元。我每天都会做数百次查询,所以如果管理不好,定价可能非常庞大。

我有几种选择:在BigQuery的

  1. 日常使用的分区选项,但我不知道如果我这样做是正确 定价(通过处理的数据的数量)是相同的。 (我在这里做错了什么?)

  2. 将表格划分成许多表格,例如: user_data_activities_oct16,user_data_activities_nov16等等。 注意:有些时候我需要查询月份之间的数据,比如2016年8月31日至2016年11月5日的 用户活动数据,请问这是不是很好的解决方案?

我打开任何建议:)

非常感谢您

回答

1

您需要使用Partitioned Tables

您需要创建一个按天分类的表格,例如。正如你看到的伪列_PARTITIONTIME是限制查询只接触一个分区的方式

SELECT 
    field1 
FROM 
    mydataset.partitioned_table 
WHERE 
    _PARTITIONTIME BETWEEN TIMESTAMP("2016-05-01") 
    AND TIMESTAMP("2016-05-06") 

:然后你就可以写入每一天的数据这样mydataset.table$20160519,你会这样的查询。这意味着查询价格将仅计算在所提到的日期间隔期间触及的数据,而不是整个表格。这也不会阻止你做你的全表查询。