このガイドでは、Dataplex Discovery を有効にして使用する方法について説明します。Discovery は、データレイク内のデータをスキャンしてメタデータを抽出し、分析、検索、データ探索のために Dataproc Metastore、BigQuery、Data Catalog に登録します。
概要
Discovery が有効になっている Dataplex アセットごとに、Dataplex は次の処理を行います。
- アセットに関連付けられているデータをスキャンします。
- 構造化ファイルと半構造化ファイルをテーブルにグループ化します。
- テーブル名、スキーマ、パーティション定義などの技術的なメタデータを収集します。
画像や動画などの非構造化データの場合、Dataplex ディスカバリは、同じメディアタイプを共有するファイルのグループをファイルセットとして自動的に検出して登録します。たとえば、gs://images/group1
に GIF 画像が含まれていて、gs://images/group2
に JPEG 画像が含まれている場合、Dataplex Discovery は 2 つのファイルセットを検出して登録します。Avro などの構造化データについては、ファイルが同じデータ形式とスキーマを含むフォルダにある場合のみ、Discovery はファイルを検出します。
検出されたテーブルとファイルセットは、検索と検出のために Data Catalog に登録されます。テーブルは、Dataproc Metastore では Hive スタイルのテーブルとして、BigQuery では外部テーブルとして表示されるため、データが自動的に分析のために使用できます。
Discovery は、次の構造化と半構造化のデータ形式をサポートします。
- Parquet
- Avro
- ORC
- JSON(改行区切り形式のみ)
- CSV(コメント行を含む CSV ファイルはサポートされていません。)
Discovery では、構造化と半構造化のデータ用に次の圧縮形式がサポートされています。
次の形式の内部圧縮:
圧縮 ファイル拡張子のサンプル 使用可能な形式 gzip .gz.parquet Parquet LZ4 .lz4.parquet Parquet Snappy .snappy.parquet Parquet、ORC、Avro LZO .lzo.parquet Parquet、ORC JSON ファイルと CSV ファイルの外部圧縮:
- gzip
- Bzip2
検出の構成
新しいゾーンまたはアセットを作成すると、検出はデフォルトで有効になります。ゾーンまたはアセットのレベルで検出を無効にできます。
ゾーンまたはアセットを作成する際に、ゾーンレベルで検出設定を継承するか、アセットレベルで検出設定をオーバーライドするかを選択できます。
ゾーンとアセットのレベルで使用可能な検出構成オプションは次のとおりです。
検出オンとオフ
検出スケジュール: このオプションは、事前定義されたスケジュール(たとえば、時間ごとまたは日ごと、あるいは cron 形式で定義されたカスタム スケジュールなど)に設定できます。新しいアセットは追加時にスキャンされます。詳細については、cron スケジュールの構成をご覧ください。推奨: 検出を 1 時間ごと、またはそれより低い頻度でスケジュールします。
包含パターンまたは除外パターン: 包含パスまたは除外パスで glob パターンを使用して、検出スキャンに包含するまたはそれから除外するファイルを定義します。たとえば、
gs://test_bucket/foo/..
を検出から除外するには、除外パスとして**/foo/*
を入力します。引用符はエラーの原因となります。"**/foo/*"
ではなく、**/foo/*
を必ず入力してください。この関数は、Cloud Storage アセットでのみ使用できます。包含パターンと除外パターンの両方が同時に存在する場合は、先に除外パターンが適用されます。JSON または CSV の仕様: CSV や JSON などの半構造化データに関する追加情報を指定して、検出結果の精度を高めることができます。
CSV ファイルの場合、次のどれでも指定できます。
区切り文字: このフィールドは
\r
と\n
を除く 1 つの文字を受け付けます。複数の文字が指定されている場合は、文字列の最初の文字のみが使用されます。指定しない場合、検出は区切り文字としてカンマを使用します。ヘッダー行の数: このフィールドには、値
0
または1
を受け入れます。デフォルト値は0
です。値が0
の場合、検出はヘッダー推定を実行して、ヘッダーが検出されると、検出はヘッダーから列名を抽出し、値を1
に再設定します。エンコード: このフィールドは、
UTF-8
、US-ASCII
、ISO-8859-1
などの文字列エンコード名を受け付けます。何も指定しない場合、UTF-8
がデフォルトとして使用されます。型推定の無効化: このフィールドはブール値を受け付けます。デフォルトでは
false
に設定されています。CSV データの場合、型推定を無効にすると、すべての列が文字列として登録されます。
JSON ファイルの場合、次のどれでも指定できます。
エンコード: このフィールドは、
UTF-8
、US-ASCII
、ISO-8859-1
などの文字列エンコード名を受け付けます。何も指定しない場合、デフォルトとしてUTF-8
が使用されます。データ型推論の無効化: このフィールドはブール値を受け付けます。デフォルトでは
false
に設定されています。JSON データの場合、型推定を無効にすると、すべての列がプリミティブ型(文字列、数値、ブール値)として登録されます。
メタデータを公開する
Dataplex レイクでデータゾーンを作成すると、Dataplex は、レイクを含むプロジェクトに BigQuery データセットを作成します。データゾーンにアセットとして追加された Cloud Storage バケットで検出されたテーブルを、Dataplex はそのデータセットに公開します。データセットは、ゾーンに対応するメタデータ公開データセットと参照されます。
各 Dataplex データゾーンは、BigQuery のデータセットまたは Dataproc Metastore のデータベースにマッピングします。ここで、メタデータ情報は自動的に使用可能になります。
Dataplex メタデータ API を使用して、テーブル名やスキーマなどの、自動検出されたメタデータを編集できます。
検出されたテーブルとファイルセットを表示する
検出されたテーブルとファイルセットは、 Google Cloud コンソールの Dataplex の [検索] ビューで検索できます。
より正確な検索結果のためには、レイクやデータゾーン名などの Dataplex 固有のフィルタを使用します。フィルタリストには、ファセットごとに上位 50 項目が表示されます。検索ボックスを使用すると、あらゆる追加アイテムを見つけることができます。
各エントリには、詳細な技術と運用のメタデータが含まれます。
エントリの詳細ページで、BigQuery のテーブルにクエリを実行し、対応する Dataproc Metastore の登録の詳細を表示できます。
Cloud Storage テーブルを外部テーブルとして BigQuery にパブリッシュできる場合は、エントリの詳細ビューに次のように表示されます。
- BigQuery 外部テーブルの参照
- BigQuery でデータの分析を開始するための [BigQuery で開く] ボタン
Dataplex メタデータ エントリは、Data Catalog に直接表示され、検索可能です。詳細については、Data Catalog の検索リファレンスをご覧ください。
すべての検出されたエントリは、Dataplex メタデータ API を通じて表示できます。
検出操作
スキャン中にデータ関連の問題が検出されると常に、検出は次の管理操作を開始します。
無効なデータ形式
アクションには次のようなものがあります。
テーブル内のデータ形式が不一致。たとえば、異なる形式のファイルに同じテーブル接頭辞が使用されている場合。
キュレートされたゾーンでの無効なデータ形式(Avro、Parquet、または ORC 形式ではないデータ)。
互換性のないスキーマ
アクションには次のようなものがあります。
検出によって検出されたスキーマは、Dataproc Metastore のメタデータ API の有効なテーブル スキーマと互換性がありません。スキーマ A とスキーマ B は、次のシナリオでは互換性がありません。
A と B は同じ名前で、データ型が異なり、互換性のないフィールドを共有します。たとえば、文字列と整数です。
A と B に重複するフィールドがない。
A と B の少なくとも 1 つが null 可能性のない、他のスキーマで検出されないフィールドがあります。
キュレーション ゾーンのユーザー管理スキーマに対するスキーマのドリフト。
無効なパーティションの定義
アクションには次のようなものがあります。
不整合なパーティション命名たとえば、
gs://sales_data/year=2020/month=10/day=01
やgs://sales_data/year=2020/region=us
です。キュレートされたデータゾーンでの Hive スタイル以外のパーティション命名。たとえば、
gs://sales_data/2020/10/01
ではなくgs://sales_data/year=2020/month=10/day=01
です。
データがありません
アクションには次のようなものがあります。
- キュレートされたデータゾーンでは、登録済みテーブルまたはファイルセットの基になるデータはもはや存在しません。言い換えると、キュレートされたゾーンテーブルまたはファイルセットが検出されて登録されましたが、その後に基になるデータが削除されました。この問題は、データを補充するかメタデータ エントリを削除するのいずれかで解決することで修正できます。
検出操作を解決する
操作のあるデータは、後続の検出スキャンによってチェックされます。操作をトリガーする問題が修正されると、次回のスケジュールされた検出スキャンによって操作が自動的に解決されます。
その他の検出操作
前記の検出操作に加えて、Dataplex でのリソース ステータスとセキュリティ ポリシーの伝播に関連する操作には、他の 3 種類があります。
リソースがありません: 既存のアセットに対応する基盤となるバケットまたはデータセットが検出されません。
未承認リソース: Dataplex には、検出を実行する、または Dataplex が管理するバケットまたはデータセットにセキュリティ ポリシーを適用するために十分な権限がありません。
セキュリティ ポリシーの伝播に関する問題: 所与のレイク、ゾーン、またはアセットに指定されたセキュリティ ポリシーを、基盤となるバケットまたはデータセットに正常に伝播できませんでした。他のすべての操作はアセットレベルにありますが、この種類の操作は、レイク、ゾーン、アセットレベルで実行できます。
これらの種類の操作は、基盤となるリソースまたはセキュリティ構成の問題が修正されると自動的に解決されます。
よくある質問
検出によって推定されたスキーマが正しくない場合は、どうすればよいですか?
推定スキーマが所与のテーブルで想定されるものと異なる場合は、メタデータ API を使用してメタデータを更新することで、推定スキーマをオーバーライドできます。後続の検出スキャンで編集が上書きされないように、userManaged
を true
に必ず設定してください。
検出スキャンからファイルを除外するにはどうすればよいですか?
デフォルトでは、検出は次のような特定の種類のファイルをスキャンから除外します。
_SUCCESS
_started
_committed
_metadata
、_METADATA
、_Metadata
_common_metadata
、_COMMON_METADATA
README
またはreadme
で始まるファイルbase_
、delta_
、delete_delta_
、bucket_
で始まり、数字が続くディレクトリ.
で始まるディレクトリ
追加の包含または除外のパターンを指定するには、ゾーンレベルまたはアセットレベルで検出構成を使用するか、メタデータ API を使用します。
検出で検出されたテーブルのグループ化の粒度が粗すぎる場合はどうすればよいですか?
検出で検出されたテーブルがテーブルのルートパスと比べてより細かいレベルである場合(たとえば、個々のパーティションのそれぞれがテーブルとして登録されている場合)、いくつかの理由がある可能性があります。
Avro と Parquet のファイルの混在などの形式の違いが、想定されるテーブルのルートパスの下にあり、それがテーブルをより小さなグループに分割します。
予想されるテーブルのルートパスの下には、異なる種類のスキーマの非互換性があり、それがテーブルをより小さなグループに分割します。
この問題は、次のいずれかの方法で解決できます。
同じテーブル ルートパス内のすべてのファイルが一貫した形式と互換性のあるスキーマになるように、形式やスキーマの違いを修正します。
ゾーン / アセット構成またはメタデータ API の一部として除外パターン構成を使用することによる、異種ファイルを除外します。
修正手順のいずれかを実行すると、次の検出スキャンで次のことが起こります。
- 既存の下位レベルのテーブルが、Dataplex メタデータ API、BigQuery、Dataproc Metastore、Data Catalog から自動的に削除されます。
- 想定されるルートパスが含まれる新しい上位レベルのテーブルが、代わりに作成されます。
テーブル名を指定するにはどうすればよいですか?
テーブル名は メタデータ API を使用して指定できます。
Dataproc Metastore または BigQuery でテーブルを手動で作成するとどうなりますか?
所与のアセットに対して検出が有効になっている場合、Dataproc Metastore または BigQuery にエントリを手動で登録する必要はありません。
Dataplex 検出をオフに切り替えて、テーブル名、スキーマ、パーティション定義を手動で定義できます。または、次の操作を行います。
- テーブルのルートパスなどの必要な情報のみを指定してテーブルを作成します。
- Dataplex 検出を使用して、残りのメタデータ(スキーマやパーティション定義など)にデータを入力します。
- メタデータを最新の状態に保つ。
BigQuery にテーブルが表示されない場合はどうすればよいですか?
Dataplex メタデータはすべてメタデータ API に一元的に登録されますが、BigQuery と互換性のある Cloud Storage テーブルのみが外部テーブルとして BigQuery に公開されます。メタデータ API のテーブル エントリの詳細の一部として、BigQuery に公開されているエンティティがどれかとその理由を示す BigQuery 互換性マーカーを検出できます。
制限事項
- BigLake 外部テーブルを含む外部テーブルは、Discovery ではサポートされていません。ただし、外部テーブルは Dataplex Catalog に自動的に取り込まれるため、代わりに Dataplex Catalog で検索できます。
次のステップ
- メタデータを操作する方法を学習する。