【问题标题】:Google BigQuery Price OptimizationGoogle BigQuery 价格优化
【发布时间】:2017-03-20 10:59:58
【问题描述】:

我正在使用 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'

但是因为每天我的数据量都在增加,所以价格也在增加。即使我使用具有相同 where 限制的相同查询(如上面的查询示例)。

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

上个月,我每次查询的费用约为 0.2 美元,而本月由于我的数据量翻了一番,我每次查询的费用为 0.4 美元。我每天进行大约数百次查询,所以如果管理不善,价格可能会非常高。

我有几个选择:

  1. 在 BigQuery 中使用每日分区选项,但我不知道我是否这样做了 正确的定价(按处理的数据数量)是相同的。 (我是不是做错了什么?)

  2. 每月将表分成许多表,例如: user_data_activities_oct16、user_data_activities_nov16 等。 注意:有时我需要查询月份之间的数据,例如 从 2016 年 8 月 31 日到 2016 年 11 月 5 日的用户活动,这是 一个好的解决方案?

我愿意接受任何建议:)

非常感谢

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您需要使用Partitioned Tables

    例如,您需要创建一个按天分区类型的表。然后你可以像mydataset.table$20160519这样写入每天的数据,你会像这样查询:

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

    如您所见,伪列_PARTITIONTIME 是将查询限制为仅触及分区的方法。这意味着查询价格将仅针对在提到的日期间隔内触及的数据计算,而不是针对整个表。这也不会阻止您进行全表查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多