Singer

summary:

Singer[/ˈsɪŋɚ/]とは,異なるデータソース間でのデータ移動を標準化するために設計された,オープンソースのETL[Extract, Transform, Load]仕様である.具体的には,データの抽出元[データソース]と書き込み先[データターゲット]を,それぞれタップ[tap]とターゲット[target]という2種類の独立したコンポーネントとして定義し,両者が標準入力・出力を通じてJSON Lines形式のデータをやり取りすることで,高い柔軟性と再利用性を実現する.この仕様は,タップとターゲットを任意に組み合わせて使用できることを前提としており,コードの再利用性を促進し,さまざまなデータ統合ニーズに対応可能な仕組みを提供している.Singerは基本的にUNIXのパイプ構文[|]で連結できるように設計されたCLIツールの集合体であり,タップとターゲットはそれぞれのコンポーネントとして独立して動作する.

Singerは2017年,クラウド型ETLサービスを提供していた企業Stitch社[後にTalend社が買収]によって開発された.同社は当時,急速に拡大するSaaSやクラウドデータソースとの連携ニーズに対応するため,従来の一体型ETLソリューションの限界を超える,よりオープンでモジュール化されたアプローチを模索していた.こうした背景から,Singerは,プラグイン形式のETLコンポーネントをPythonで簡潔に実装できるようにする,という設計思想のもとに公開され,以後,データエンジニアコミュニティにおいて一定の支持を集めてきた.

Singer仕様に基づいて実装されたタップやターゲットは,データベース,クラウドサービス,SaaSアプリケーション,ファイルストレージなど幅広いデータソースに対応しており,その多くはオープンソースで共有されている.また,Singerの設計は処理のステート管理やスキーマ検出の仕組みも含んでおり,大規模データ処理の堅牢性を担保する要素も備えている.

タップとターゲットの基本的な使い方

PostgreSQLからデータを抽出し[tap-postgres],BigQueryに書き込む[target-bigquery]場合は,基本的にbashなどのシェルから直接コマンドを実行する.すなわち,Unixパイプ[|]を使用してtap[データソース]とtarget[データ送信先]を接続する.

tap-postgres --config tap-postgres-config.json | target-bigquery --config target-bigquery-config.json

この例の場合,tap-postgres は PostgreSQL からデータを JSON Lines 形式で出力.その出力が target-bigquery に 標準入力として渡され,BigQuery にロードされる.

このコマンドを実行すると3種類のSingerメッセージが生成される.まず,tap-postgres が PostgreSQL からデータを抽出しながら,まず SCHEMA を出力.次に,1行ずつ RECORD を出力.つまり,ストリームとして標準出力上をリアルタイムに流れる.そして,処理の途中や完了時などに,適宜, STATE を一定のタイミングで標準出力に出力[emit]する.

なお,Meltanoのようなオーケストレーションツールを使えば,こうした低レベルのコマンド実行は隠蔽され,より高度な機能[スケジューリング,エラーハンドリング,状態管理など]が提供される.

上記の例で,PostgreSQL用のpostgres-config.jsonの中身は以下のようになる.

{
"host": "your-postgres-host",
"port": 5432,
"user": "your-username",
"password": "your-password",
"dbname": "your-database",
"schema": "public"
}

BigQuery用のbigquery-config.jsonの中身は次のようになる.

{
"project_id": "your-gcp-project-id",
"dataset_id": "your_bigquery_dataset",
"location": "US",
"credentials_path": "/path/to/your-service-account-key.json"
}

両ファイルは,たとえば以下のような構成で保存される.

my-etl-pipeline/
├── postgres-config.json
├── bigquery-config.json
└── run.sh (上記コマンドを記述したシェルスクリプト)

run.shの内容は以下のようになる.

#!/bin/bash

# ETL 実行スクリプト
tap-postgres --config postgres-config.json \
| target-bigquery --config bigquery-config.json

参照

  1. Singer GitHub.(n.d.). Singer GitHub repository. Retrieved April 13, 2025, from https://github.com/singer-io
  2. Meltano Hub.(n.d.). Singer準拠のタップ・ターゲット一覧. Retrieved April 13, 2025, from https://hub.meltano.com

Mathematics is the language with which God has written the universe.





















TDM HIP Fivetran Airbyte NewSQL Open Table Format