代码之家  ›  专栏  ›  技术社区  ›  user_1357

BigQuery:对大型数据集运行查询

  •  0
  • user_1357  · 技术社区  · 7 年前

    我有大约100TB的数据需要通过运行查询来填充,以转换字段,然后将转换写入另一个表。此表按摄取时间戳进行分区。我将这两个操作都作为单个查询的一部分,如下所示。我计划通过摄取时间戳范围手动以较小的块多次运行此查询。

    有没有更好的方法来处理这个过程,而不是手动运行查询块?例如,可以使用数据流或其他框架。

    CREATE TABLE IF NOT EXISTS dataset.table
    PARTITION BY DATE(timestamp) AS
    with load as (SELECT *, _TABLE_SUFFIX as tableId
        FROM `project.dataset.table_*`
        WHERE _TABLE_SUFFIX BETWEEN '1' AND '1531835999999'
        ),................
         ...................
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Pentium10    7 年前

    您需要准确地处理运行的查询,因为执行报价非常有限。

    分区表

    • 每个分区表的最大分区数4000

    • 单个作业修改的最大分区数2000

    • 每个作业操作(查询或加载)最多可以影响2000个分区。任何影响超过2000个分区的查询或加载作业都将被Google BigQuery拒绝。

    • 每天每个表5000的最大分区修改数 对于分区表,每天最多只能修改5000个分区。可以使用附加或覆盖分区中数据的操作来修改分区。修改分区的操作包括:加载作业、将结果写入分区的查询或修改分区中数据的DML语句(插入、删除、更新或合并)。

    • 一个作业可能会影响多个分区。例如,DML语句可以更新多个分区中的数据(对于摄取时间表和分区表)。查询作业和加载作业也可以写入多个分区,但只能写入分区表。当确定作业消耗的配额的多少时,google bigquery使用受作业影响的分区数。流式插入不影响此配额。

    • 最大分区操作速率每10秒50个分区操作

    大多数情况下,您达到了第二个限制,单个作业不超过2000个,如果您进一步并行,则每10秒执行50个分区操作。

    另一方面, DML MERGE 语法可能会对您有所帮助。

    如果您有销售代表,请联系BQ团队,如果他们可以增加您的一些配额,他们会做出积极的反应。

    此外,我还看到人们使用多个项目来运行超出配额的工作。