在 Bigquery UDF 中使用地理编码服务
Posted
技术标签:
【中文标题】在 Bigquery UDF 中使用地理编码服务【英文标题】:Use Geocoding Service in Bigquery UDFs 【发布时间】:2022-01-22 07:25:50 【问题描述】:我正在尝试创建一个使用 Googles Geocoding service 的 Bigquery UDF 函数。
看来我们可以使用option parameter 导入外部库,但我觉得我不能在这里使用地理编码服务。
按照我的函数方法:
CREATE OR REPLACE FUNCTION
functions.returnGeoCode(address STRING)
RETURNS Array<String>
LANGUAGE js AS """
var geocoder = new google.maps.Geocoder();
geocoder.geocode( 'address': address, function(results, status)
if (status == google.maps.GeocoderStatus.OK)
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
alert(latitude);
);
"""
抱怨是因为当我尝试使用该功能时它不知道google
当然会说ReferenceError: google is not defined at UDF$1(STRING) line 2, columns 23-24
。
我的最终目标是将我在 Bigquery 数据集中的地址转换为纬度/经度,这样我就可以在可视化工具中创建热图。
对我的方法或完全不同的方法有什么建议吗?我看到了一些使用一些公共 Bigquery 数据集 (openstreetmaps suggestion) 的建议,但我有来自德国的地址,但它并没有很好地涵盖。
Bigquery 似乎也不支持the conversion this way。
提前谢谢你!
【问题讨论】:
【参考方案1】:由于您需要的功能来自Geocoding,我建议您可以在我想的javascript 中编写所有使用BigQuery API(执行查询)和地理编码API(执行地理编码计算)的内容。您可以将 Geocoder 的计算与查询分开执行,然后使用 BigQuery API 将 Geocoder 返回的值用于您的查询。
【讨论】:
【参考方案2】:您可以包含一个自包含的外部 javascript 库,但它不适用于 Geocoder 服务 - 这里 javascript 库进行外部 HTTP 调用,这对于 javascript UDF 是不允许的。
我认为合适的解决方案是 Cloud DataFlow - 您可以在其中包含任意代码,不受 UDF 的安全性和性能限制,从 BigQuery 表中读取数据,然后将结果写回。
如果您有大量数据,并且 Geocoder 服务变得昂贵,我认为 OpenStreetMaps 可以提供帮助 - 尝试使用 OSM 表解析数据,然后使用 Geocoder 服务解析剩余地址。
【讨论】:
以上是关于在 Bigquery UDF 中使用地理编码服务的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery -- 在公开共享项目中使用 UDF 的问题
在 BigQuery 中使用 javascript udf 进行 tf idf 计算时,UDF 工作程序在执行期间超时