簡體   English   中英

臨時 function 的 BigQuery LEFT OUT JOIN 錯誤?

[英]BigQuery LEFT OUT JOIN error for a temp function?

我有一個在 BigQuery 中創建的表。

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

然后我想我可以簡單地更新占位符值,所以我寫了一個小臨時 function

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”。

我不明白的是為什么? 我的意思是,這個 function 是獨立的,對嗎? 它只接受 2 個參數並返回一個字符串,那么為什么它突然想要一個連接呢?

您遇到 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

Output:

在此處輸入圖像描述

查詢project-id.dataset_id.collated_data表:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM