BigQuery StandardSQL udf调用外部.jar库

时间:2018-08-29 20:08:29

标签: google-bigquery

如何在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(); 

2 个答案:

答案 0 :(得分:5)

您可以尝试使用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程序集。
您可以查看一些示例来了解一个想法:

答案 1 :(得分:1)

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