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に取り込む方法
- 貼り付けるかアップロードしてください。 DDL および MV 定義をコピーします (たとえば、
テーブルクエリの作成値システムテーブルブラウザに ) を入力するか、移行ファイルをアップロードしてください。これが、1 つのパイプラインを監査する最も速い方法です。 - JDBC経由で接続します。 SQLFlowはJDBC経由で稼働中のデータベースからメタデータを取得できるため、テーブルやビューの定義は、古い可能性のあるファイルではなく、サーバーから直接取得されます。
- 抽出を自動化する。 グラビット/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 までの完全な履歴を確認するか、お客様のシステム全体のスキャンについてご相談ください。