【问题标题】:BigQuery StandardSQL udf to call external .jar librariesBigQuery StandardSQL udf 调用外部 .jar 库
【发布时间】:2018-08-29 20:08:29
【问题描述】:

如何在 bigquery UDF 中调用外部 Java 库。有可能吗?

以下是我的用例: 是否可以在标准 sql bigquery UDF 中进行纬度/经度计算。

import org.gavaghan.geodesy.*;

...

GeodeticCalculator geoCalc = new GeodeticCalculator();

Ellipsoid reference = Ellipsoid.WGS84;  

GlobalPosition pointA = new GlobalPosition(latitude, longitude, 0.0); // Point A

GlobalPosition userPos = new GlobalPosition(userLat, userLon, 0.0); // Point B

double distance = geoCalc.calculateGeodeticCurve(reference, userPos, pointA).getEllipsoidalDistance(); 

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您可以尝试 BigQuery GIS(公共 alpha),而不是 UDF 方向

    根据您的示例 - 它可能类似于下面的简化/愚蠢示例

    #standardSQL
    WITH start AS (
        SELECT 
            state_name state,
            CAST(internal_point_lat AS FLOAT64) lat, 
            CAST(internal_point_lon AS FLOAT64) lon
        FROM `bigquery-public-data.utility_us.us_states_area`
        WHERE state_name IN ('California', 'Arizona')
    ),  finish AS (
        SELECT 
            state_name state,
            CAST(internal_point_lat AS FLOAT64) lat, 
            CAST(internal_point_lon AS FLOAT64) lon
        FROM `bigquery-public-data.utility_us.us_states_area`
        WHERE state_name IN ('Florida', 'New York')
    )
    SELECT 
        start.state start,
        finish.state finish,
        ROUND(ST_DISTANCE(ST_GEOGPOINT(start.lon,start.lat),ST_GEOGPOINT(finish.lon,finish.lat))*0.000621371,2) distance
    FROM start, finish    
    
    Row start       finish      distance
    1   California  Florida     2223.17
    2   California  New York    2331.66
    3   Arizona     Florida     1761.82
    4   Arizona     New York    2019.12
    

    注意:BQ-GIS 处于公共 Alpha 版,因此您的 GCP 项目需要被列入白名单才能尝试这些查询。您可以注册以请求访问here

    更新(基于评论

    我明白了。所以 GIS 示例只是“意外”示例,根本不是问题的焦点。知道了。从 UDF 开始 - 现在 BigQuery 仅支持 JavaScript 和 SQL UDF,也支持 JS UDF 外部库。到目前为止,java/python 都不走运。您可以检查的唯一其他疯狂选项是使用 Web 程序集。
    您可以查看几个示例来了解一下:

    【讨论】:

    • 谢谢米哈伊尔。我的问题是关于调用外部 .jar 文件的一般性问题。基本上我们正在从 Hadoop 迁移到 Bigquery。我们正在将 HiveQL 脚本转换为 BQScripts。我们有引用 java/python 库的配置单元 UDF。如何在 Big Query 中获得相同的功能。
    【解决方案2】:

    BigQuery UDF 支持 JavaScript 作为语言,而不是 Java,因此无法调用外部 Java 库。但是,您可以load external libraries with JavaScript UDFs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2016-03-29
      相关资源
      最近更新 更多