iT邦幫忙

2023 iThome 鐵人賽

DAY 23
1

這邊先快速探討一下 EL 工具的常見解決方案:

  1. Fivetran
  2. Stitch
  3. Singer
  4. Airbyte
  5. Meltano

Fivetran 與 Stitch 是比較早就進入這個市場的領導廠商,偏好成熟、穩定軟體產品的讀者,可以優先考慮這兩家。

Singer 是 Stitch 公司開源的資料交換格式 (data exchange format)。 Airbyte 與 Meltano 這兩家是比較晚進入市場的廠商,也都支援 Singer 這個資料交換格式。

我偏好開源、新廠商的產品。一般而言,開源的軟體產品,它們有更高的機會可以被客製化、因為源碼有可能會形成社群。而新廠商能夠存活,往往是因為產品有一些創新性,畢竟,較晚開始發展的軟體產品通常有更多的機會發現過去設計的盲點,而汲取前人經驗再重練過的產品當然是有機會可以做得更好。

綜合以上所述,我的首選是 Airbyte 與 Meltano 。Airbyte 的設計,走 low code/no code 路線,這跟我的喜好有點不合,所以我選擇 Meltano ,因為它是 code first 的解決方案。

安裝 Meltano

Meltano 也有提供雲端版本的,所以如果可以考慮雲端版本的讀者們,我也推荐使用雲端版本,畢竟維護本地端版本的軟體,還是滿費心的。

簡易安裝步驟:

  1. 準備好 python 環境,即 python 直譯器。
  2. pipx install "meltano"

跟安裝 dbt 類似的一件事是:「準備好 python 環境」依然棘手。一旦系統有超過一個 python 直譯器,管理或是切換不同的 python 直譯器 ,就是一大麻煩。我認為,合理的解決之道,應該是要先安裝 python 直譯器的管理器,比方說,pyenv

pipx 是一個管理 python CLI 工具的管理器,它基本上依賴於 pipvenv 來達成功能。讀者可以把它想象成一個先進版本的 pip ,因為它既可以安裝 CLI 工具,又可以同時確保這些安裝好的 CLI 工具所依賴的函式庫不會彼此衝突。

讀者看到這邊,可能會問,「咦,那 dbt 可不可以也用 pipx 來安裝?會不會更省事呢?這樣子就不用自己去管理 venv 了。」其實應該也很有可能,目前在 github 上已經有一些討論圍繞著這個議題發生了。

Meltano 範例專案 (從 operational database 拷貝資料到 data warehouse)

接下來會以一個常用的範例專案來示範 Meltano 用法。在資料工程的領域,最常見的用法,就是把營運資料庫 (operational database) 的資料拷貝到資料倉儲 (data warehouse) 了。

範例專案的細節

  • 營運資料庫是 Postgres
  • 資料倉儲也是 Postgres
  • 將會從營運資料庫裡,搬移一張叫 customers 的資料表,該表位於 dbt_alice 的命名空間之內。
  • 而上述的表,最後會出現在資料倉儲的 tap_postgres 的命名空間之內

Meltano 專案 - 關鍵 3 步驟

  1. 初始化 Meltano 專案
  2. 設置並且安裝 Meltano 的插件 (plugin)
  3. 啟動 Meltano ,開始同步資料

第一步:初始化 Meltano 專案

選擇合適的資料夾裡,下指令生成 meltano 的專案,專案名稱叫 my-meltano。

  • meltano init my-meltano-project
  • cd my-meltano-project

第一步完成後,可以看到 meltano.yaml 的內容,會有7行。

version: 1
default_environment: dev
project_id: c612a465-4663-4e6b-adf0-72d571865232
environments:
- name: dev
- name: staging
- name: prod

第二步:設置並且安裝 Meltano 的插件 (plugin)

在這個步驟,通常是安裝一個 tap 與一個 target 。tap 是負責抽取 (Extract),而 target 是負責載入 (Load)。 這邊為了簡單,可以考慮直接編輯 meltano.yml 。編輯完成後,檔案內容如下:

version: 1
default_environment: dev
project_id: c612a465-4663-4e6b-adf0-72d571865232
environments:
- name: dev
- name: staging
- name: prod
plugins:
  extractors:
  - name: tap-postgres
    variant: meltanolabs
    pip_url: git+https://github.com/MeltanoLabs/tap-postgres.git
    config:
      host: localhost
      port: 5432
      user: laurencechen
      password: password
      database: jaffle_shop
      default_replication_method: FULL_TABLE
    select:
    - dbt_alice-customers.*
  loaders:
  - name: target-postgres
    variant: meltanolabs
    pip_url: meltanolabs-target-postgres~=0.0.7
    config:
      host: localhost
      port: 5432
      user: laurencechen
      password: password
      database: laurencechen

最後,下指令 meltano install 就會開始安裝插件 (plugin)。

第三步:啟動 Meltano ,開始同步資料

下完指令 meltano run tap-postgres target-postgres 後,就可以看到畫面出現許多 meltano 運作時產生的訊息。如果順利成功的話,就可以到資料倉儲去檢查,資料表是否同步了。

meltano.png

replication method 屬性

meltano.yml 裡需要特別注意 replication-method。設置時,務必要去考慮原始資料的儲存特性,要想清楚,到底資料是可變 (mutable),還是不可變 (immutable) 。做對了,可以節省很多不必要的拷貝,大幅減少營運資料庫 (operational database) 的壓力喔。


其它資源

  1. 對 dbt 或 data 有興趣 👋?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加
  2. 歡迎訂閱 PruningSuccess 電子報,主要談論軟體開發、資料處理、資料分析等議題。

上一篇
Transformation layer: SQL 效能改進
下一篇
實務應用:常見的資料應用
系列文
當代資料工程與資料分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言