public note

Stairlight v0.2.0 を公開しました

データリネージツール Stairlight の v0.2.0 を公開しました。

Stairlight とは

テーブルレベルのデータリネージツールです。詳しくはこちらの記事をご参照ください。

ts223.hatenablog.com

ts223.hatenablog.com

主なアップデート

  1. ラベル機能
  2. 同じテーブルを複数回結合している SELECT への対応
  3. Python 3.10 対応

github.com

1. ラベル機能

SQLファイルとテーブルのマッピング設定に、ラベル機能(=タグ機能) を追加しました。

mapping.yaml ファイルにて、各テーブルに対して、任意のラベルを key-value 形式で複数設定できます。

SQLファイルに紐づくテーブルに対しては mapping で設定すればよいですが、SQLの中にしか現れないテーブルについては、以下のように metadata のセクションに設定します。

mapping:
  - file_suffix: "tests/sql/main/test_b.sql"
    tables:
      - table: "PROJECT_D.DATASET_E.TABLE_F"
        params:
          PROJECT: PROJECT_J
          DATASET: DATASET_K
          TABLE: TABLE_L
        labels:
          source: fs
          app: stairlight
metadata:
  - table: "PROJECT_A.DATASET_A.TABLE_A"
    labels:
      source: Null
      test: a

設定したラベルは出力結果に含まれますので、出力結果からさらにラベルでフィルタリングする、といったことができます。 たとえば、特定の部署やサービスに依存するデータパイプラインのみを抽出したい、といった使い方ができるかなと思います。

CLI では、up/down コマンドに --label (-l) オプションを追加しました。

これまでは --table オプションでテーブルを指定して 依存関係を抽出していましたが、ラベルを指定してまとめて抽出できるようになりました。

# app=stairlight と env=production というラベルが設定されている各テーブルについて、その下流に位置するテーブルを出力
stairlight down -l app:stairlight -l env:production

2. 同じテーブルを複数回結合している SELECT への対応

SELECT 文で、同一のテーブルを複数回結合しているケースに対応できるようになりました。 以下は、test_project.beam_streaming.taxirides_realtime テーブルを2回結合している SELECT 文を読み取った例ですが、 ファイルの6行目と15行目の2箇所を検出できています。

"test_project.beam_streaming.taxirides_aggregation": {
  "test_project.beam_streaming.taxirides_realtime": {
    "type": "fs",
    "file": "tests/sql/main/test_union_same_table.sql",
    "uri": "/stairlight/tests/sql/main/test_union_same_table.sql",
    "lines": [
      {
        "num": 6,
        "str": "    test_project.beam_streaming.taxirides_realtime"
      },
      {
        "num": 15,
        "str": "    test_project.beam_streaming.taxirides_realtime"
      }
    ]
  }
},

3. Python 3.10 対応

2021/10/4 にリリースされた Python 3.10 に対応しました。

PyPi パッケージ の Requires の範囲を広げ、GitHub Actions での CI テスト対象に追加しています。