Google 云大查询 UDF 限制

Google cloud Big query UDF limitations

我在 Google bigquery 中遇到问题。我有一些复杂的计算需要做并将结果保存在 Bigquery 中。因此,我们在 Java 中进行复杂计算,并在 Google 云数据流的帮助下将结果保存在 google bigquery 中。

但是这个复杂的计算需要大约 28 分钟才能在 java 内完成。客户要求20秒内完成

所以我们切换到 Google bigquery UDF 选项。一种选择是 Bigquery 遗留 UDF。 Bigquery 旧版 UDF 的局限性在于它只能逐行处理,因此我们逐步淘汰了此选项。因为我们需要多行来处理结果。

第二个选项是标量 UDF。大查询标量 UDF 只能从 WEB UI 或命令行调用,不能从 java 客户端触发。

如果有人有任何想法,请提供有关如何处理问题的方向。

Big query scalar UDF are only can be called from WEB UI or command line and can not be trigger from java client.

这不准确。标准 SQL 通过 CREATE TEMPORARY FUNCTION 语句支持标量 UDF,可以从任何应用程序和任何客户端使用 - 它只是 SQL 查询的一部分:

https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions

要了解如何启用标准 SQL,请参阅此文档:https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql 特别是,最简单的方法是在 SQL 查询的开头添加 #standardSql 标记。

只要在请求的 query 属性中传递 CREATE TEMPORARY FUNCTION 语句,您就可以从任何客户端 API 使用具有标准 SQL 的标量 UDF。例如,

QueryRequest queryRequest =
    QueryRequest
        .newBuilder(
            "CREATE TEMP FUNCTION GetWord() AS ('fire');\n"
                + "SELECT COUNT(DISTINCT corpus) as works_with_fire\n"
                + "FROM `bigquery-public-data.samples.shakespeare`\n"
                + "WHERE word = GetWord();")
        // Use standard SQL syntax for queries.
        // See: https://cloud.google.com/bigquery/sql-reference/
        .setUseLegacySql(false)
        .build();
QueryResponse response = bigquery.query(queryRequest);