ClickHouseデータリネージ:マテリアライズドビューを通じた列の追跡

ClickHouseのデータリネージ これは、ClickHouseパイプライン内で列がどのように流れるかを示すマップです。どのKafkaエンジンテーブル、マージツリーテーブル、およびマテリアライズドビューのSELECT文が各下流列にデータを提供し、どの関数と集計状態が途中でデータを変換するかを示します。ClickHouseのマテリアライズドビューはすべてSQLで定義されているため、正確なデータリネージはSQLを解析することによって得られます。 Gudu SQLFlow 専用のClickHouse方言パーサーを使用してこれを実現し、対話型の列レベルの系統図を返します。

今すぐお試しください: 貼り付け マテリアライズドビューを作成する 声明を 無料のSQLFlowビジュアライザーClickHouseの方言を選択すると、MVチェーンの列レベルの系統図が数秒で表示されます。

ClickHouseのデータリネージがマテリアライズドビューの問題である理由

ほとんどのデータウェアハウスでは、変換ロジックはスケジュールされたバッチジョブに存在します。ClickHouseでは、変換ロジックはマテリアライズドビューに存在します。ClickHouseのMVは挿入トリガーです。ソーステーブルに書き込まれたすべてのブロックは、MVのSELECT文を通してターゲットテーブルに挿入されます。本番パイプラインはこれらを連結します。KafkaエンジンテーブルからMVにデータが供給され、そのMVが生の行をMergeTreeテーブルに格納します。さらに別のMVがそのテーブルを読み取り、SummingMergeTreeまたはAggregatingMergeTreeのロールアップを作成します。ダッシュボードはこれらのロールアップに対してクエリを実行します。

その設計は高速だが、データフローが多数の小さな場所に分散してしまう。 マテリアライズドビューを作成する ステートメント。ダッシュボードの数値が間違っているように見える場合、または誰かが Kafka トピックから列を削除したい場合、チェーンを手動で再構築する必要があります。クエリ システムテーブルそれぞれのMVを読んでください テーブルクエリの作成すべてに従う 句をたどり、葉に到達するまで繰り返します。各ホップは独自の式、フィルタ、およびGROUP BY句を持つSELECT文です。したがって、単一の列を正しくトレースするには、テーブル名をgrepするのではなく、実際にSQLを解析する必要があります。

SQLFlow はまさにそのステップを自動化します。ClickHouse パーサーは 39 のダイアレクト固有のパーサーの 1 つであり (汎用 ANSI 文法ではありません)、ClickHouse 専用の構造 (エンジン句、 集計関数 列、 -州 コンビネータ、関数など 現在までユニーク ― 理解されるのであって、飛ばされることはない。

例:KafkaからAggregatingMergeTreeへの列のトレース

以下は、典型的な2ホップのClickHouse取り込みチェーンです。Kafkaエンジンテーブル、生のイベントをMergeTreeに永続化するMV、そしてAggregatingMergeTreeテーブルに事前集計されたロールアップを保持する2番目のMVです。

CREATE TABLE events_kafka ( event_time DateTime, user_id UInt64, event_type LowCardinality(String), revenue Decimal(18, 2) ) ENGINE = Kafka SETTINGS kafka_broker_list = 'kafka:9092', kafka_topic_list = 'events', kafka_format = 'JSONEachRow'; CREATE TABLE events_raw ( event_time DateTime, user_id UInt64, event_type LowCardinality(String), revenue Decimal(18, 2) ) ENGINE = MergeTree ORDER BY (event_type, event_time); CREATE MATERIALIZED VIEW mv_events_raw TO events_raw AS SELECT event_time, user_id, event_type, revenue FROM events_kafka; CREATE TABLE revenue_daily ( day Date, event_type LowCardinality(String), total_revenue AggregateFunction(sum, Decimal(18, 2)), buyers AggregateFunction(uniq, UInt64) ) ENGINE = AggregatingMergeTree ORDER BY (day, event_type); CREATE MATERIALIZED VIEW mv_revenue_daily TO revenue_daily AS SELECT toDate(event_time) AS day, event_type, sumState(revenue) AS total_revenue, uniqState(user_id) AS buyers FROM events_raw WHERE event_type = 'purchase' GROUP BY day, event_type;

これらの4つのステートメントをSQLFlowに渡すと、完全なチェーンが解決されます。ロールアップテーブルについては、出力列ごとに次の情報が表示されます。

  • 日々の収益。総収益 から来る イベント_raw.収益 を通して 状態の合計これは、 events_kafka.収益 を通して mv_events_raw — 1つの図で、KafkaからRollupへの完全なパスを示します。
  • 収益_日次. 由来する events_raw.event_time 経由 現在まで()適用された関数はエッジに記録され、破棄されません。
  • 日々の収益購入者 由来する events_raw.user_id 経由 uniqState().
  • events_raw.event_type 影響 ロールアップ列は間接的に、 イベントタイプが「購入」の場合 フィルターと グループ分け SQLFlowはこれらを、直接的なデータフローのエッジとは区別される間接的な系統としてマークします。

ClickHouse では、最後の点が他のエンジンよりも重要です。ロールアップの正確性は、出力に表示されないフィルタ列に通常依存します。誰かが名前を変更すると、 イベントタイプ Kafkaトピックでは、テーブルレベルのリネージは「ロールアップはevents_rawに依存する」と述べているが、これは正しいが役に立たない。間接エッジを持つ列レベルのリネージは「総収益購入者 両方ともこの列でフィルタリングされます」という回答は、変更を出荷する前に実際に必要な答えです。ほとんどのリネージツールは間接的なリネージをモデル化しませんが、SQLFlowではそれを図の中で個別に切り替え可能なレイヤーとして提供します。

SQLFlowがClickHouse SQLから抽出するもの

  • 列レベルの系統: 各出力列について、その列に供給する正確なソース列、およびパス上の関数、キャスト、サブクエリ、結合、およびセット演算子。列参照は、CTE、サブクエリ、ビュー、および 選択 * 拡大。
  • 直接的な血統と間接的な血統: 純粋なデータフローエッジは、影響エッジ(列)とは別に保持されます。 どこ, グループ分け、および結合条件)があり、各レイヤーは個別に切り替えることができます。
  • マルチホップMVチェーン: 各マテリアライズドビューのSELECT文が解析され、そのターゲットテーブルがリンクされるため、連鎖したマテリアライズドビューは、取り込みテーブルから最終的なロールアップまで、1つの連続したグラフに解決されます。
  • インタラクティブな図表と構造化データ: 図をドリルダウンしたり、系統図をJSON、CSV、PNG形式でエクスポートしたり、REST API経由でプログラム的に取得したりできます。

ClickHouseのSQLをSQLFlowに取り込む方法

  1. 貼り付けるかアップロードしてください。 DDL および MV 定義をコピーします (たとえば、 テーブルクエリの作成システムテーブルブラウザに ) を入力するか、移行ファイルをアップロードしてください。これが、1 つのパイプラインを監査する最も速い方法です。
  2. JDBC経由で接続します。 SQLFlowはJDBC経由で稼働中のデータベースからメタデータを取得できるため、テーブルやビューの定義は、古い可能性のあるファイルではなく、サーバーから直接取得されます。
  3. 抽出を自動化する。 グラビット/SQLFlow インジェスター このユーティリティは、定期的に実行される全資産スキャン用に、メタデータを抽出します。

どのモードでも、SQLFlow は SQL コードの静的解析のみを実行します。テーブルから行を読み取ることは決してありません。 オンプレミス版 (Docker/Kubernetes、エアギャップ対応) SQL テキストさえもネットワークから外に出ることはありません。ClickHouse クラスターが SaaS に送信できないイベント データを保持している場合に特に重要です。

ClickHouseから系統情報を取得する方法の比較

アプローチ得意なことClickHouse MVチェーンのギャップ
読む システムテーブル 手作業無料、常に最新、ツール不要パーサーはあなた自身になります。マルチホップチェーンと列ごとのパスは手動で再構築され、頭の中で古くなってしまいます。
オープンソースのパーサー(SQL Lineage, sqlglot)独自のツール内で個々のクエリの系統チェックをスクリプト化するこれらはライブラリであり、系統図ではありません。連鎖したMVステートメントを、図や間接的な系統分離を備えた、ナビゲーション可能な列レベルのグラフに組み立てるのは、あなたが書いて保守するコードです。
カタログ優先のプラットフォームガバナンスワークフロー、所有権、スタック全体にわたるビジネス用語集系統の深さは、方言ごとのSQL解析に依存します。特殊なパーサーは通常、列レベルのClickHouse系統をより深く解析します。
Gudu SQLFlow専用の方言パーサーによる、列レベルのClickHouseの系統図(直接/間接の分離と図解付き)商用ツール。静的解析を設計に組み込んでおり、実行時ジョブのテレメトリではなく、SQLロジックをマッピングします。

これらのアプローチは、エンタープライズレベルのSQLFlowデプロイメントではデータリネージをDataHub、Microsoft Purview、およびOpenMetadataにエクスポートするため、SQLFlowは既に運用しているカタログの解析エンジンとして機能します。大規模な環境では、増分スキャンと永続的なデータリネージリポジトリを使用して、100以上のデータベースと100万以上の列からなる環境をバッチスキャンします。ClickHouseは、お客様のスタックの他のシステムと連携して動作します。

ClickHouseは単独で活動することはほとんどない

ClickHouse のリアルタイム配信は通常、フェデレーション レイヤー、ローカル分析、バッチ ウェアハウスなど、他のエンジンと並んで配置されます。SQLFlow は、2000 年代半ばから商用開発され、方言ごとに約 13,600 のテスト フィクスチャで検証された General SQL Parser という同じエンジンでこれらすべてを解析するため、エンジンの境界を越えて列レベルの履歴が維持されます。スタックにこれらが含まれている場合は、次の関連ガイドを参照してください。 Trinoのデータ系統 フェデレーションクエリレイヤーと DuckDBのデータ系統 プロセス内分析については、または以下を参照してください。 データリネージ知識ベース.

よくある質問

SQLFlowは、ClickHouseのマテリアライズドビューの連鎖を通して、その履歴を追跡できますか?

はい。各マテリアライズドビューのSELECT文が解析され、そのターゲットテーブルがグラフにリンクされます。そのため、KafkaエンジンテーブルからMVが供給され、それがMergeTreeテーブルに供給され、さらに別のMVがAggregatingMergeTreeに供給されるという流れは、連続した1つの列レベルのパスとして解決されます。

SQLFlowはClickHouse固有のSQL構文を理解しますか?

はい。ClickHouseは、SQLFlowの39種類の方言固有のパーサーの1つです。汎用的なANSIパーサーではなく、専用の文法を使用しているため、エンジン句や集計関数の状態列などのClickHouseの構成要素はスキップされることなく解析されます。

SQLFlowは私のClickHouseデータにアクセスする必要がありますか?

いいえ。SQLFlowはSQLコードの静的解析を行い、必要に応じてJDBC経由で取得したスキーマメタデータも解析します。テーブルから行を読み取ることは決してなく、オンプレミス版ではSQLテキストさえもネットワーク内に保持されます。

ClickHouseのロールアップにおける「間接的な系譜」とはどういう意味ですか?

マテリアライズドビューのWHERE句やGROUP BY句で使用される列は、ロールアップの出力には表示されませんが、どの行が集計されるかを決定します。SQLFlowは、これらを直接的なデータフローとは別に間接的なデータ系列エッジとして記録し、図の各レイヤーの表示/非表示を切り替えることができます。

SQLFlowを使ってClickHouseの系統情報を取得するには、いくらかかりますか?

SQLFlow Cloudには無料プランがあり、プレミアムプランは月額$49.99です。SQLFlow On-Premiseは月額$500、または選択したデータベースタイプごとに1回限りの$4,800で、2台のサーバーにインストール可能です。詳細は、 価格ページ.

ClickHouse MVチェーンを今すぐマッピングしましょう

CREATE MATERIALIZED VIEW ステートメントを無料のビジュアライザーに貼り付けて、Kafka から Rollup までの完全な履歴を確認するか、お客様のシステム全体のスキャンについてご相談ください。