【问题标题】:Google cloud Big query UDF limitations谷歌云 Bigquery UDF 限制
【发布时间】:2017-08-20 09:51:37
【问题描述】:

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

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

所以我们切换到 Google bigquery UDF 选项。一种选择是 Bigquery 旧版 UDF。 Bigquery 旧版 UDF 具有逐行处理的限制,因此我们逐步淘汰了此选项。因为我们需要多行来处理结果。

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

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

【问题讨论】:

    标签: java google-bigquery google-cloud-platform user-defined-functions google-cloud-dataflow


    【解决方案1】:

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

    这不准确。标准 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 标签。

    【讨论】:

    • 在链接页面上写着“UDF 是临时的。这意味着您只能将它们用于当前查询或命令行会话。您不使用 Web UI 中的 UDF 编辑器选项卡在创建用于标准 SQL 查询的用户定义函数时。UDF 编辑器选项卡用于旧版 SQL。"
    • 能否请您告诉我如何从 java 客户端触发标准 SQL 支持标量 UDF。
    • 我扩展了答案以指出如何启用标准 SQL。 CREATE TEMPORARY FUNCTION 子句需要添加到使用它的每个查询之前。
    【解决方案2】:

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

    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);
    

    【讨论】:

    • 嗨,Elliot,我有大约 100 行 JS 代码用于这个 UDF。我应该以同样的方式编写 UDF 吗?
    • 没错。它应该与查询文本的其余部分一起使用。或者,您可以加载 JavaScript 文件 from GCS as a library 的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2018-03-01
    相关资源
    最近更新 更多