[英]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.