為了節省計算資源、簡化季度、年度資料處理流程,我們將從「使用 PostgresSQL 合併跨月資料」,改為「使用 ClickHouse local 合併跨月資料」。除了少數欄位名稱更改外,使用上並無其餘影響。
對新合併法有興趣者,歡迎參見合併原始碼。
以下將以「原合併法」代稱「使用 PostgresSQL 合併跨月資料」,「新合併法」代稱「使用 clickhouse-local 合併跨月資料」。
調整的欄位(只影響消除重複住宅):
- 「最大刊登者編碼」改為「常見刊登者編碼」
- 「約略地點範圍」改為兩個欄位:「常見約略地點_x」、「常見約略地點_y」
- 新增「物件最後更新時間」
兩種合併法的資料解釋差異
新合併法的主要特性為:
- 傾向使用「最常出現的數值」,而非「最新出現的數值」
- 因為上述原因,在「消除重複住宅資料集」中,合併的標的將由原本的「各住宅的各欄位的最新的數值」,改為「各住宅各欄位最常出現的數值」
在新合併法中,針對時間類型以外的欄位,我們使用 anyHeavy
當作合併的方法,而非原本的 last
,也就是說,資料集會呈現此同一個物件中「最常出現」,而非「最後一個月份出現」的數值。以「常見刊登者編碼」為例,假設某個物件在 2021 年 1 月、2 月、3 月都出現過,且刊登者編碼分別為 A、A、B,那麼在新合併法中,此物件的「常見刊登者編碼」為 A,而非原合併法中的 B。
在「消除重複住宅資料集」中,新原合併法的流程方別為:
- 原合併法:
- 針對「儲存各物件最新數值的資料表」,以表訂的共同欄位合併
- 新合併法:
- 下載對應的各月份資料集
- 以物件編號為索引,合併為單一資料集,合併時留用最常出現的數值
- 針對合併後的單一資料集,以表訂的共同欄位合併
由於新合併法流程上的設計,自 2023 起的季度、年度「消除重複住宅資料集」,將會使用「以月為單位,最常出現的數值」為物件最後的數值。
新合併法的優點
- 執行速度、費用均顯著減少
- 由於原仰賴 PostgresSQL,需要較多設定、記憶體,才能執行幾十萬筆資料的合併,以季度資料為例,至少需要 16GB 記憶體,執行至少 4 小時。
- 新合併法無須架設伺服器,僅需以個人電腦執行,大約 30 秒即可完成季度資料的整併。
- 修正就合併法的問題
- 在檢查新合併法的資料正確性時發現,由於原合併法使用 Django ORM 撰寫 SQL ,因此在特定情況下,沒有將「不同月份,標為不同出租狀態的同物件」合併的情況,新合併法則正確合併這類物件。
歡迎自行調整合併邏輯
由於新合併法的執行成本、環境需求均遠低於原合併法,因此也更適合由資料分析者自行調整合併的邏輯,以符合各自的需求。
若有需要自行調整合併邏輯的需求,可參考資料合併小幫手原始碼。
ClickHouse local 使用小秘訣
- 由於這裡的 CSV 資料集,都是用
-
作為空白欄位的標記,因此下 SQL 時,記得在開頭加上SET format_csv_null_representation = '-';
,讓 ClickHouse 自行轉換空白值,讓欄位資料型態判斷更準確。 - 除了
anyHeavy
外,ClickHouse 也有提供不少 aggregation 函式,例如topK
groupArray
,可以顯示合併前的多筆數值,更多用法可參考 Aggregate Functions。- 要注意的是,由於使用 ClickHouse 時, 無法指定各 CSV 檔的匯入順序,因此使用
last_value
時,並無法保證一定是最後一個月的資料。
- 要注意的是,由於使用 ClickHouse 時, 無法指定各 CSV 檔的匯入順序,因此使用