【问题标题】:BigQuery LEFT OUT JOIN error for a temp function?临时函数的 BigQuery LEFT OUT JOIN 错误?
【发布时间】:2021-10-11 19:49:38
【问题描述】:

我有一个在 BigQuery 中创建的表。

在该表中,我在字段中有一些占位符值。

然后我想我可以简单地更新占位符值,所以我写了一个小临时函数

CREATE TEMP FUNCTION getBoroughFromCoords(longitude FLOAT64, latitude FLOAT64 )
    RETURNS STRING 
    AS ((SELECT CAST(UPPER(tz_loc.borough)as STRING) FROM `bigquery-public-data.new_york_taxi_trips.taxi_zone_geom` tz_loc WHERE (ST_DWithin(tz_loc.zone_geom, ST_GeogPoint(longitude, latitude),0)) )
);

并像这样sql select getBoroughFromCoords(-73.95908, 40.705246) 对其进行了测试,它返回了“BROOKLYN”——这很棒。

但是当我尝试更新一个值(并且我在这里专门针对单行进行测试)时,使用:

UPDATE `project-id.datasetid.collated_data` 
SET NEIGHBORHOOD = (select getBoroughFromCoords(LONG, LAT))
WHERE collision_date = "2019-10-27" AND LAT = 40.705246 AND LONG = -73.95908

我收到错误“如果没有连接两侧的字段相等的条件,就不能使用 LEFT OUTER JOIN。”

我不明白为什么?我的意思是,这个功能是独立的,对吗?它只接受 2 个参数并返回一个字符串,那为什么突然要加入呢?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您遇到 LEFT OUTER JOIN 错误,因为您没有在子查询中将值传递给 LONG 和 LAT。要解决此问题,您应该在查询开始时为这些变量设置值。

    DECLARE long_var, lat_var  FLOAT64;
    SET long_var = -73.95908;
    SET lat_var = 40.705246;
    

    为了测试这一点,我刚刚创建了一个带有虚拟值的表,足以满足您的 WHERE 条件。

    使用的查询:

    DECLARE long_var, lat_var  FLOAT64;
    SET long_var = -73.95908;
    SET lat_var = 40.705246;
    
    CREATE TEMP FUNCTION getBoroughFromCoords(longitude FLOAT64, latitude FLOAT64 )
        RETURNS STRING 
        AS ((SELECT CAST(UPPER(tz_loc.borough)as STRING) FROM `bigquery-public-data.new_york_taxi_trips.taxi_zone_geom` tz_loc 
        WHERE (ST_DWithin(tz_loc.zone_geom, ST_GeogPoint(longitude, latitude),0)))
    );
    
    UPDATE `project-id.dataset_id.collated_data` 
    SET NEIGHBORHOOD = (select getBoroughFromCoords(long_var, lat_var))
    WHERE collision_date = "2019-10-27" AND LAT = lat_var AND LONG = long_var
    

    输出:

    查询project-id.dataset_id.collated_data表:

    【讨论】:

    • 答案是完全正确的——我想我可以用它来帮助我,但我不能:(但这并不能阻止答案是正确的
    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2018-01-14
    相关资源
    最近更新 更多