Hiveデータリネージ:HQLおよびHadoop ETL向けの列レベルのリネージ

Hiveデータ系統 これは、HQL を通じてデータがどのように流れるかを示す列レベルのマップです。どのソース テーブルと列が各 Hive テーブル、パーティション、ビューにデータを提供し、どの結合、集計、および 側面図 展開。最も確実な構築方法は、HQL自体を解析することです。 Gudu SQLFlow 専用のHive方言パーサーが付属しており、クラスターに手を加えることなく、スクリプトを対話型の列レベルの系統図に変換します。

今すぐお試しください: HiveQL スクリプトを貼り付ける 無料オンラインHive系統可視化ツールHiveの方言を選択するだけで、数秒で列レベルの系統図を取得できます。クラスターへのアクセスは不要です。無料プランはブラウザ上で動作します。

Hiveのデータリネージが見た目より難しい理由

典型的な Hadoop ウェアハウスには、ステージング ロード、パーティション化された HQL が何年分も蓄積されます。 挿入上書き ジョブ、外部テーブルに対するビュー、および作成者が退職して以来誰も読んでいない Oozie または Airflow でスケジュールされたスクリプト。 「何がフィードしているか」に答える dw.日次収益?または「落としたら何が壊れるの?」 ステージング注文ステータス?は、列参照をすべて追跡することを意味します。

一般的なSQLパーサーは、HiveQLを独自の言語たらしめている構造につまずいてしまう。

  • 側面図 explode() 入力された配列またはマップの1つの列が、複数の行と新しい派生列に展開されます。Lineageは、展開された出力列を単一のソースコレクションに接続する必要があります。
  • 分割された 挿入上書き — パーティション列は、静的リテラルから取得される可能性があります。 パーティション 句、または最後のSELECT列から動的に選択します。どちらの場合も、系統情報源としてカウントされる列が変わります。
  • 外部テーブル — このテーブルは、HDFSまたはオブジェクトストレージ内のファイルに対するスキーマです。上流のSQLによって記述されたものではないにもかかわらず、Lineageはこれを第一級のソースとして扱う必要があります。
  • Hive固有の構文配布元, クラスター別、複数挿入(から...挿入...挿入...SerDe でサポートされた型やバッククォートで囲まれた識別子はすべて、ANSI のみの文法を破ります。

SQLFlow は専用の方言パーサーを使用して HiveQL を解析します。これはツール内の 39 の方言固有のパーサーの 1 つで、HiveQL 用に構築された文法であり、例外を追加した汎用 ANSI パーサーではありません。基盤となるエンジンは、 汎用SQLパーサー, has been developed commercially since the mid-2000s and is validated against roughly 13,600 per-dialect SQL test fixtures.

AtlasフックとHQL解析:Hiveの系統情報を取得する2つの方法

ほとんどのHadoopチームはまずリネージに出会います アパッチアトラスAtlasは、その本来の目的において真に優れた性能を発揮します。Hiveフックはクラスター上に配置され、ジョブが実際に実行されると履歴をキャプチャし、Hadoopスタック全体にわたる分類とタグ付けに関連付けられた、何がいつ実行されたかのリアルタイムのガバナンス記録を提供します。

しかし、フックアプローチには構造的な限界があり、特にチームが系譜を探求する際にその限界が顕著になる。

ランタイムフック(Atlasスタイル)HQLの解析(SQLFlow)
稼働中のクラスターが必要ですはい、ジョブがフックをインストールした状態で実行された場合にのみ、系統情報が取得されます。いいえ — SQLテキストの静的解析はどこにもありません
実行されていないコードをカバーしますいいえ、実行されなかったスクリプトは痕跡を残しません。はい、リポジトリ内のすべてのスクリプト(実行されていないジョブやめったに実行されないジョブを含む)が対象です。
移行中/移行後の作業難しい。クラスターが廃止されると、キャプチャポイントも廃止される。はい、エクスポートされたHQLを、移動前、移動中、移動後にオフラインで分析します。
歴史の記録フックを取り付けた時点から始まります完了 — コードは記録です
データを読み取るクラスター内でジョブと並行して実行されます絶対にしない — SQLテキストとスキーマメタデータのみ

これらのアプローチは競合するのではなく補完的な関係にあります。フックは実行された内容を教えてくれ、パーサーはコードの動作を教えてくれます。質問が「この Hive 環境内のすべての依存関係を文書化して、監査したり移動したりできるようにする」であれば、パースがその答えとなるツールです。そして SQLFlow は、その結果を次の場所にプッシュできます。 DataHub、Microsoft Purview、またはOpenMetadata それらのいずれかがあなたの記録システムである場合。

実際のHiveQLジョブからの列レベルの系統図

これは、すべての Hadoop ウェアハウスが毎晩実行するジョブの形状です。 挿入上書き 結合されたステージングテーブルから構築されます。

INSERT OVERWRITE TABLE dw.daily_revenue PARTITION (ds = '2026-07-11') SELECT c.region, SUM(o.amount) AS revenue, COUNT(DISTINCT o.order_id) AS order_cnt FROM staging.orders o JOIN staging.customers c ON o.customer_id = c.customer_id WHERE o.ds = '2026-07-11' AND o.status = 'COMPLETE' GROUP BY c.region;

これをSQLFlowで実行すると、出力列ごとに次の図が表示されます。

  • dw.daily_revenue.revenue 直接供給される ステージング注文数 を通して 和().
  • dw.daily_revenue.order_cnt 供給源は ステージング注文注文ID を通して 重複を除いた数をカウントする.
  • dw.日次収益地域 地図は ステージング顧客地域.
  • 静的パーティション値が入力されます dw.daily_revenue.ds — SQLFlowは、SELECTリストには表示されないにもかかわらず、パーティション列を系統ターゲットとしてモデル化します。
  • ステージング注文ステータス, ステージング注文.ds、そして両方とも 顧客ID 列は結果を形成する どこ参加する 出力に反映されない条件。SQLFlow はこれらを次のように記録します。 間接的(影響)系統これは、切り替え可能な別の関係タイプです。ほとんどの系統追跡ツールはこの区別をしていませんが、影響分析に必要なのはまさにこれです。 状態 コーディングと、それに伴うすべての収益数値は連動する。

同じ列解像度が機能する 側面図 explode(): 下流のテーブルが選択する場合 アイテム.sku 爆発から order_events.items 配列、SQLFlowトレース SKU 導入されたラテラル ビューのテーブル エイリアスを介してソース コレクション カラムに戻ります。また、CTE、ネストされたサブクエリ、ビュー、および 選択 * 拡張により、星印の多い従来の HQL でも正確な列端が得られます。

渡りの時期のミツバチの系統

現在、チームがHiveの履歴管理を必要とする最も一般的な理由は、Hiveから移行するためです。移行先がSpark、Databricks、クラウドウェアハウスのいずれであっても、疑問点は共通しています。どのジョブがどのテーブルにデータを提供しているのか、それらをどのような順序で移行する必要があるのか、そしてこれらの4,000個のスクリプトのうち、実際に不要になったものはどれなのか、ということです。

SQLFlow はコードのみで動作するため、HQL リポジトリのエクスポートに対して任意のマシンから分析を実行できます。クラスター (既にフリーズされている可能性のあるもの) へのアクセスは必要ありません。バッチ スキャンはこのために構築されています。SQLFlow は 100 を超えるデータベースと 100 万を超える列の環境をスキャンし、結果を永続的なリネージ リポジトリに保持し、移行中にスクリプトが変更されると増分的に更新します。また、Hive 以降、 Spark SQL、 と データブリックス それぞれが同じツール内に独自のダイアレクトパーサーを備えているため、ソースのエステートと書き換え後のターゲットのエステートを並べて分析し、新しい系統が古い系統と一致していることを確認できます。

実行方法

  • HQLを貼り付けるかアップロードしてください SQLFlow Cloud では、無料プランがあり、結果はブラウザに表示され、JSON、CSV、または PNG 形式でエクスポートできます。
  • メタストアからメタデータを取得する JDBC経由でビュー定義とスキーマが解決されます 選択 * また、スクリプト間の参照も正しく行われます。
  • 自動化する を通じて REST API またはヘッドレスCLIを使用する。例えば、マージ前にCI内のすべてのHQL変更を分析する。
  • すべてをネットワーク内に留めるSQLFlow オンプレミス: DockerまたはKubernetes、必要に応じてエアギャップ、選択したデータベースタイプごとに月額$500または1回限りの$4,800。多くのHadoop環境は、SQLテキストがネットワーク外に送信されることができない銀行や通信会社にあります。このエディションは、そのような環境向けに存在します。

SQLFlowは、どのデプロイメントでも静的解析のみを実行します。つまり、SQLコードとスキーマメタデータを読み取り、テーブルの行を読み取ることはありません。バージョン8.2.3以降では、結果のグラフを平易な英語でクエリすることもできます(「どのテーブルが ステージング注文?)、回答内のすべての表と列は、表示前に分析されたグラフに対して検証されます。より広範な機能ツアーについては、以下を参照してください。 SQLデータリネージツールの概要.

よくある質問

SQLFlowは、クラスターにアクセスせずにHiveの系統情報を構築できますか?

はい。SQLFlowはHQLテキストを解析するので、スクリプトのエクスポート(正確なDDLも含む) 選択 * 解像度)で十分です。これが、フックがインストールされている稼働中のクラスタでジョブが実行された場合にのみ履歴をキャプチャするApache Atlasのようなフックベースのアプローチとの重要な違いです。

LATERAL VIEW explodeやその他のHive固有の構文に対応していますか?

はい。HiveにはSQLFlowの39のダイアレクトパーサーの中に専用のパーサーがあり、 側面図 explode()分割された 挿入上書きおよび外部テーブル。

系統情報は列レベルのものか、それともテーブルレベルのものか?

列レベル。各出力列について、SQLFlow は、その列に供給する正確なソース列と、その過程で使用された関数、キャスト、結合、およびセット演算子を識別します。さらに、間接的な系統、つまり、 どこ, 参加する、 と グループ分け 結果そのものには現れないが、結果を形成する条項。

Hiveの系統情報をデータカタログにエクスポートできますか?

はい。エンタープライズ向け展開では、DataHub、Microsoft Purview、OpenMetadata用のエクスポートアダプタに加え、JSONおよびCSVエクスポート機能、カスタム統合用のREST APIが提供されます。

SQLFlowは、私のHiveテーブルに保存されているデータを読み取りますか?

いいえ。SQLコードの静的解析を実行し、必要に応じてメタストアからスキーマメタデータを読み取ります。テーブルの行データは一切変更されず、オンプレミス版ではSQLテキスト自体がネットワーク外に出ることはありません。

SQLFlowの料金はいくらですか?

SQLFlow Cloudは無料でご利用いただけます。プレミアムアカウントは月額$49.99です。SQLFlow On-Premiseは、選択したデータベースタイプごとに月額$500または1回限りの$4,800で、2台のサーバーにインストール可能です。追加のデータベースタイプは、それぞれ月額$100または1回限りの$1,000です。

あなたのHiveエステートの系譜をマッピングしてください

無料のビジュアライザーにHQLスクリプトを貼り付けるか、移行開始前にHadoopデータウェアハウス全体を一括スキャンすることについてご相談ください。