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

调用远程函数时增加BigQuery批处理大小

  •  0
  • TravisChambers  · 技术社区  · 2 年前

    我正在使用GCloud的 remote functions 通过BigQuery为表中的每一行调用我的API。

    最终,这些请求用一行数据击中了我的API,这太小了。

    我看到请求的大小限制是10MB- source ,所以我不明白为什么BigQuery决定每个批次只包含一行。

    Google's docs 引用了一种方法来限制HTTP请求集中的最大行数,但我看不到任何增加最小行数的配置。

    您可以在OPTIONS中指定max_batching_rows作为每个HTTP请求中的最大行数,以避免Cloud Functions超时。如果未指定,BigQuery将决定一个批次中包含的行数。

    在调用远程函数时,是否有任何配置可以更改以使BigQuery每批使用多行?

    0 回复  |  直到 2 年前
        1
  •  1
  •   lukehsiao    2 年前

    我不知道这是否能解决您的特定问题,但我个人已经注意到BigQuery的类似行为。特别是,我注意到格式的BigQuery查询

    CREATE 
    OR REPLACE TABLE project.dataset.table AS (
      SELECT 
        STRING(
          JSON_EXTRACT(
            project.dataset.remote_fn_example( 
              TO_JSON(
                ARRAY[TO_JSON(Example) ]
              )
            ), 
            "$[0]"
          )
        ) AS example_processed 
      FROM 
        (
          SELECT 
            * 
          FROM 
            project.dataset.other_table 
          ORDER BY 
            id
        )
    )
    

    BigQuery将发送一批行。

    但是,如果省略ORDER BY

    CREATE 
    OR REPLACE TABLE project.dataset.table AS (
      SELECT 
        STRING(
          JSON_EXTRACT(
            project.dataset.remote_fn_example( 
              TO_JSON(
                ARRAY[TO_JSON(Example) ]
              )
            ), 
            "$[0]"
          )
        ) AS example_processed 
      FROM 
        (
          SELECT 
            * 
          FROM 
            project.dataset.other_table 
        )
    )
    

    BigQuery似乎一次只发送一行。

    我不确定是什么原因导致了这种行为,但在撰写本文时,添加ORDER BY子句似乎可以减轻我的问题( ORDER BY RAND() ).

    当然,正如您链接到的文档所提到的,BigQuery最终可以选择他们将发送多少行到该max_batching_rows,因此不能保证此解决方法会继续有效,甚至不能保证此方法对您有效。但是,无论如何都要发布,以防对其他人有帮助。