[英]Extract suburb name from address string in Bigquery
我有一個地址(屬性)表,我只需要從中提取郊區名稱。 我有另一個包含所有郊區名稱的表(郊區)。
我遇到了多詞郊區名稱的問題,其中一個詞和兩個詞都匹配。 我需要它與最長的郊區名稱相匹配,例如。 帶有“North Bondi”的地址應該只匹配郊區“North Bondi”而不是郊區“Bondi”。
我在網上找到了一些在連接中使用 MAX function 的示例,但 Bigquery 不允許我在連接中使用 function。
如果有人可以提出更正建議或提供有關其他解決方案的指導(例如,對郊區表進行排序並僅檢索一個結果?),將不勝感激!謝謝!
表:屬性
地址 |
---|
12 Smith Street Surry Hills NSW |
新南威爾士州邦迪瓊斯街 34 號 |
15 Sunny Road North Bondi NSW |
表:郊區
市郊 | state |
---|---|
薩里山 | 新南威爾士州 |
邦迪 | 新南威爾士州 |
北邦迪 | 新南威爾士州 |
當前使用的代碼:
Select * from ( SELECT p.address, s.suburb
FROM `property` p
JOIN `suburbs` s
ON INITCAP(p.address) LIKE CONCAT('%', INITCAP(s.suburb),' ', INITCAP(s.state), '%')
GROUP BY p.address, s.suburb
) x
join `property` p
ON p.address = x.address
where p.address is not null;
實際結果:
地址 | 市郊 |
---|---|
12 Smith Street Surry Hills NSW | 薩里山 |
新南威爾士州邦迪瓊斯街 34 號 | 邦迪 |
15 Sunny Road North Bondi NSW | 邦迪 |
15 Sunny Road North Bondi NSW | 北邦迪 |
期望的結果:
地址 | 市郊 |
---|---|
12 Smith Street Surry Hills NSW | 薩里山 |
新南威爾士州邦迪瓊斯街 34 號 | 邦迪 |
15 Sunny Road North Bondi NSW | 北邦迪 |
嘗試這個:
select v1.address,
string_agg(v1.addr_part, " ") as suburb,
from (
select t.address,
addr_part,
from property t
cross join unnest(split(t.address, " ")) addr_part WITH OFFSET AS ofst
where ofst > 2
qualify row_number() over(partition by t.address order by ofst desc) > 1
) v1
group by v1.address
;
但是:這種方法假設:
我在網上找到了一些在連接中使用 MAX function 的示例,但 Bigquery 不允許我在連接中使用 function。
使用 window function 而不是MAX function,
Select * from ( SELECT p.address, s.suburb
FROM `property` p
JOIN `suburbs` s
ON INITCAP(p.address) LIKE CONCAT('%', INITCAP(s.suburb),' ', INITCAP(s.state), '%')
) x
QUALIFY RANK() OVER (PARTITION BY address ORDER BY LENGTH(suburb) DESC) = 1
地址 | 市郊 |
---|---|
12 Smith Street Surry Hills NSW | 薩里山 |
15 Sunny Road North Bondi NSW | 北邦迪 |
新南威爾士州邦迪瓊斯街 34 號 | 邦迪 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.