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