簡體   English   中英

PostgreSQL街道地址數據中缺失數據的檢測與填充

[英]Detecting and filling in missing data in PostgreSQL street address data

我有一個從公共數據源構建的芬蘭街道地址數據庫。 格式為<street name> <number> [<a possible suffix of letters and dashes>] ,例如Aurakatu 8Aurakatu 12b 在對源數據進行一些過濾以去除異常或垃圾數據后,DB 大約有 1.8M 行。 其中大約 195k 包含后綴。

源數據合理但不完整。 我要處理的問題是:街道名稱 + 號碼組合存在 IRL(例如Aurakatu 12 ),但數據僅包含字母后綴形式( Aurakatu 12aAurakatu 12b )。 例如,所有三種形式都是有效的,並且指向 Google 地圖中的離散位置。

總而言之,這就是我想要實現的目標:在地址表中找到每個街道名稱 + 號碼組合,其中只存在后綴版本,並創建一個非后綴條目。

在上述示例的情況下,一個或多個查詢會發現對於假設的Aurakatu 12街道名稱/號碼組合,僅存在后綴版本12a12b ,並將創建純12版本。

在設置(或顯着更新)服務器實例時,數據導入很少運行,因此最大效率並不是最重要的。

street_namenumberaddresses表中單獨的表列。 數字本身不一定是連續的; Somestreet 24這樣的東西存在但Somestreet 25不存在是很常見的。

考慮:

insert into addresses (street_name, street_number)
select street_name, regexp_replace(street_number, '\D+$', '')
from addresses
group by 1, 2
having count(*) filter(where street_number ~ '\d$') = 0

regexp_replace()表達式regexp_replace()字符串末尾的(潛在)尾隨非數字字符; 然后查詢將具有相同street_name和(剝離) street_number所有行組合在一起。 having條款,然后過濾掉已經包含了無后綴組street_number (即以數字結束街道號碼):剩下的是插入到表中。

您可以(並且應該!)首先獨立運行select查詢以查看將插入的內容。

暫無
暫無

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

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