【问题标题】:Use Geocoding Service in Bigquery UDFs在 Bigquery UDF 中使用地理编码服务
【发布时间】: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

提前谢谢你!

【问题讨论】:

    标签: google-bigquery geocoding reverse-geocoding google-geocoding-api bigquery-udf


    【解决方案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 服务解析剩余地址。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-21
        • 2013-08-17
        相关资源
        最近更新 更多