在 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 中使用地理编码服务的主要内容,如果未能解决你的问题,请参考以下文章

从 js UDF 输出 INT64

在 BigQuery 的查询中使用 UDF 作为列

BigQuery -- 在公开共享项目中使用 UDF 的问题

在 BigQuery 中使用 javascript udf 进行 tf idf 计算时,UDF 工作程序在执行期间超时

如何在 BigQuery 中使用 UDF 展平 Google Analytics 自定义维度?

BigQuery JavaScript UDF:V8 实例的区域