Cloud Storage データを検出してカタログ化する

このドキュメントでは、Dataplex Universal Catalog の自動検出を使用する方法について説明します。Dataplex の自動検出は、Cloud Storage バケット内のデータをスキャンしてメタデータを抽出してカタログ化できる BigQuery の機能です。検出スキャンの一環として、自動検出によって構造化データ用の BigLake テーブルまたは外部テーブルと、非構造化データ用のオブジェクト テーブルが作成されます。この一元化されたテーブルデータにより、AI を活用したデータ分析情報、データ セキュリティ、ガバナンスが容易になります。

Cloud Storage データの自動検出を使用するには、検出スキャンを作成して実行します。

検出スキャンの概要

検出スキャンは次の処理を行います。

  • Cloud Storage バケットまたはパス内のデータをスキャンします。
  • 構造化データと半構造化データをテーブルにグループ化します。
  • テーブル名、スキーマ、パーティション定義などのメタデータを収集します。
  • スキーマとパーティション定義を使用して、BigQuery で BigLake テーブル、外部テーブル、オブジェクト テーブルを作成および更新します。

画像や動画などの非構造化データの場合、検出スキャンは、BigLake オブジェクト テーブルと同じメディアタイプを共有するファイルのグループを検出して登録します。たとえば、gs://images/group1 に GIF 画像が含まれていて、gs://images/group2 に JPEG 画像が含まれている場合、検出スキャンは 2 つのファイルセットを検出して登録します。

Avro などの構造化データの場合、検出スキャンはファイルのグループを BigLake 外部テーブルとして登録し、同じデータ形式と互換性のあるスキーマを含むフォルダにある場合にのみファイルを検出します。

検出スキャンは、次の構造化データと半構造化データ形式をサポートしています。

  • Parquet
  • Avro
  • ORC
  • JSON(改行区切り形式のみ)
  • CSV(ただし、コメント行を含む CSV ファイルは除く)

検出スキャンでは、構造化データと半構造化データの次の圧縮形式がサポートされています。

  • 次の形式の内部圧縮:

    圧縮 ファイル拡張子のサンプル 使用可能な形式
    gzip .gz.parquet Parquet
    LZ4 .lz4.parquet Parquet
    Snappy .snappy.parquet Parquet、ORC、Avro
    LZO .lzo.parquet Parquet、ORC
  • JSON ファイルと CSV ファイルの外部圧縮:

    • gzip
    • Bzip2

検出スキャンでサポートされるテーブル数の上限については、割り当てと上限をご覧ください。

検出されたテーブルは、BigLake 外部テーブル、BigLake オブジェクト テーブル、または外部テーブルとして BigQuery に登録されます。これにより、データを BigQuery で分析できるようになります。BigLake テーブルとオブジェクト テーブルのメタデータ キャッシュ保存も有効になります。すべての BigLake テーブルは、検索と検出のために Dataplex Universal Catalog に自動的に取り込まれます。

始める前に

Enable the Dataplex API.

Enable the API

Dataplex Universal Catalog サービス アカウントに必要なロール

始める前に、プロジェクトの Dataplex Universal Catalog サービス アカウントに IAM 権限を割り当てます。

  service-PROJECT_NUMBER@gcp-sa-dataplex.s3ns-system.iam.gserviceaccount.com
  

PROJECT_NUMBER は、Dataplex API が有効になっているプロジェクトに置き換えます。

Dataplex サービス アカウントに検出スキャンの作成と実行に必要な権限が付与されるように、Dataplex サービス アカウントに次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、検出スキャンの作成と実行に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

検出スキャンを作成して実行するには、次の権限が必要です。

  • データソース プロジェクトに対する bigquery.datasets.create
  • データソース バケットに対する storage.buckets.get
  • データソース バケットに対する storage.objects.get
  • データソース バケットに対する storage.objects.list
  • データソース プロジェクトに対する bigquery.datasets.get
  • 接続を指定します。
    • BigQuery 接続に対する bigquery.connections.delegate
    • BigQuery 接続に対する bigquery.connections.use

管理者は、Dataplex サービス アカウントに、カスタムロールや他の事前定義ロールを付与することもできます。

BigQuery 接続サービス アカウントに必要なロール

BigQuery 接続サービス アカウントに検出スキャンの作成に必要な権限が付与されるようにするには、BigQuery 接続サービス アカウントに Cloud Storage バケットに対する Dataplex 検出サービス エージェントroles/dataplex.discoveryServiceAgent)IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

この事前定義ロールには、検出スキャンの作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

検出スキャンを作成するには、次の権限が必要です。

  • データソース プロジェクトに対する bigquery.datasets.create
  • データソース バケットに対する storage.buckets.get
  • データソース バケットに対する storage.objects.get
  • データソース バケットに対する storage.objects.list
  • データソース プロジェクトに対する bigquery.datasets.get
  • 接続を指定します。
    • BigQuery 接続に対する bigquery.connections.delegate
    • BigQuery 接続に対する bigquery.connections.use

管理者は、BigQuery 接続のサービス アカウントにカスタムロールや他の事前定義ロールを付与することもできます。

エンドユーザーに必要なロール

データ検出スキャンの作成と管理に必要な権限を取得するには、Cloud Storage バケットに対する次の IAM ロールを付与するよう管理者に依頼してください。

  • DataScan リソースに対する完全アクセス権: プロジェクトに対する Dataplex DataScan 管理者(roles/dataplex.dataScanAdmin
  • DataScan リソースに対する書き込みアクセス権: プロジェクトに対する Dataplex DataScan 編集者(roles/dataplex.dataScanEditor
  • DataScan リソースへの読み取りアクセス(結果を除く): プロジェクトに対する Dataplex DataScan 閲覧者(roles/dataplex.dataScanViewer
  • 結果を含む DataScan リソースへの読み取りアクセス権: プロジェクトに対する Dataplex DataScan データ閲覧者(roles/dataplex.dataScanDataViewer

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、データ検出スキャンの作成と管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

データ検出スキャンの作成と管理には、次の権限が必要です。

  • DataScan を作成する: プロジェクトに対する dataplex.datascans.create
  • DataScan を削除する: プロジェクトまたは DataScan リソースに対する dataplex.datascans.delete
  • 結果を除く DataScan の詳細を表示する: プロジェクトまたは DataScan リソースに対する dataplex.datascans.get
  • 結果を含む DataScan の詳細を表示する: プロジェクトまたは DataScan リソースに対する dataplex.datascans.getData
  • DataScan を一覧表示する: プロジェクトまたは DataScan リソースに対する dataplex.datascans.list
  • DataScan を実行する: プロジェクトまたは DataScan リソースに対する dataplex.datascans.run
  • DataScan の説明を更新する: プロジェクトまたは DataScan リソースに対する dataplex.datascans.update
  • DataScan の IAM 権限を表示する: プロジェクトまたは DataScan リソースに対する dataplex.datascans.getIamPolicy
  • DataScan の IAM 権限を設定する: プロジェクトまたは DataScan リソースに対する dataplex.datascans.setIamPolicy

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

検出スキャンを作成する

データを検出するには、検出スキャンを作成して実行する必要があります。スキャンのスケジュールを設定することも、スキャンをオンデマンドで実行することもできます。

検出スキャンが実行されると、スキャンされた Cloud Storage バケットに対応する新しいデータセットが BigQuery に作成されます。BigQuery データセット名は Cloud Storage バケット名と同じです。バケット名の無効な文字は、アンダースコアに置き換えられます。データセット名を使用できない場合は、接頭辞が追加されます(例: _discovered_001)。このデータセットには、詳細な分析のために検出スキャンによって作成された BigLake 外部テーブルまたは BigLake 以外の外部テーブルが含まれています。

コンソール

  1. Trusted Cloud コンソールで、[メタデータのキュレーション] ページに移動します。

    [メタデータのキュレーション] に移動

  2. [Cloud Storage 検出] タブで、[作成] をクリックします。

  3. [検出スキャンを作成] ペインで、スキャンするデータの詳細を構成します。

  4. スキャンの名前を入力します。

  5. [スキャン ID] フィールドに、 Trusted Cloudのリソース命名規則に沿った一意の ID を入力します。ID を指定しない場合、検出スキャンによってスキャン ID が生成されます。

  6. 省略可: スキャンの説明を指定します。

  7. スキャンするファイルを含む Cloud Storage バケットを指定するには、[バケット] フィールドでバケットを参照して選択します。

  8. 省略可: ファイル フィルタリング用の glob パターンのリストを指定して、検出スキャンに含めるデータまたは除外するデータを定義します。

    • 含める: データのサブセットのみをスキャンする場合は、含めるオブジェクトに一致する glob パターンのリストを指定します。
    • 除外: 除外するオブジェクトに一致する glob パターンのリストを指定します。

    たとえば、gs://test_bucket/foo/.. を検出スキャンから除外するには、除外パスとして **/foo/** を入力します。引用符はエラーの原因となります。"**/foo/**" ではなく **/foo/** を入力してください。

    包含パターンと除外パターンの両方を指定すると、除外パターンが最初に適用されます。

  9. 省略可: [プロジェクト] で、検出スキャンによって作成された BigLake 外部テーブルまたは BigLake 以外の外部テーブルを含む BigQuery データセット プロジェクトを選択します。指定しない場合、データセットは Cloud Storage バケットを含むプロジェクトに作成されます。

  10. [ロケーション タイプ] で、BigQuery 公開データセットが作成される [リージョン] または [マルチリージョン](使用可能な方)を選択します。

  11. スキャンされたデータから BigLake テーブルを作成するには、[接続 ID] フィールドに Trusted Cloud リソース接続 ID を指定します。詳細については、BigQuery のTrusted Cloud リソース接続をご覧ください。

    BigQuery データセットのロケーションと同じロケーションに新しい接続 ID を作成できます。これは、Cloud Storage バケットのロケーションと互換性があります

    リソース接続 ID を指定しない場合、検出スキャンは BigLake 以外の外部テーブルを作成します。

  12. [検出頻度] セクションで、検出スキャンを実行するタイミングを構成します。

    • 繰り返し: 事前定義されたスケジュールでスキャンが実行されます。開始時間、スキャンを実行する日数、頻度(1 時間ごとなど)を指定します。

    • オンデマンド: スキャンはオンデマンドで実行されます。

  13. 省略可: [JSON または CSV の仕様] セクションで、スキャンで JSON ファイルと CSV ファイルを処理する方法を指定します。[JSON または CSV の仕様] をクリックします。

    1. JSON オプションを構成するには、[JSON 解析オプションを有効にする] を選択します。
      • 型推論を無効にする: データのスキャン時に検出スキャンでデータ型を推論するかどうか。JSON データの型推定を無効にすると、すべての列がプリミティブ型(文字列、数値、ブール値など)として登録されます。
      • エンコード形式: UTF-8、US-ASCII、ISO-8859-1 など、データの文字エンコード。値を指定しない場合、デフォルトとして UTF-8 が使用されます。
    2. CSV オプションを構成するには、[CSV 解析オプションを有効にする] をオンにします。
      • 型推論を無効にする: データのスキャン時に検出スキャンでデータ型を推論するかどうか。CSV データの型推定を無効にすると、すべての列が文字列として登録されます。
      • ヘッダー行: ヘッダー行の数(0 または 1)。値 0 を指定すると、検出スキャンは見出しを推測し、ファイルから列名を抽出します。デフォルトは 0 です。
      • 列区切り文字: 値を区切るために使用される文字。単一の文字(\r(改行)または \n(改行))を指定します。デフォルトはカンマです。(,
      • エンコード形式: データの文字エンコード(UTF-8US-ASCIIISO-8859-1 など)。値を指定しない場合、デフォルトとして UTF-8 が使用されます。
  14. [作成](スケジュール設定されたスキャンの場合)または [今すぐ実行](オンデマンド スキャンの場合)をクリックします。

    スケジュール設定されたスキャンは、設定したスケジュールに沿って実行されます。

    オンデマンド スキャンは、作成時に最初に 1 回実行され、いつでも実行できます。検出スキャンの実行には数分かかることがあります。

gcloud

検出スキャンを作成するには、gcloud dataplex datascans create data-discovery コマンドを使用します。

gcloud dataplex datascans create data-discovery --location=LOCATION
--data-source-resource=BUCKET_PATH

次のように置き換えます。

  • LOCATION: 検出スキャンを作成するロケーション
  • BUCKET_PATH: スキャンするバケットの Cloud Storage パス

REST

検出スキャンを作成するには、dataScans.create メソッドを使用します。

公開された BigLake テーブルに対してクエリを実行する

検出スキャンを実行すると、BigLake テーブルが BigQuery の新しいデータセットに公開されます。テーブルは、BigQuery で SQL を使用して分析できます。また、Apache Spark または HiveQL を使用して Dataproc で分析することもできます。

SQL

BigQuery でテーブルを表示またはクエリできます。BigQuery でクエリを実行する方法については、クエリを実行するをご覧ください。

Apache Spark

Dataproc サーバーレス ジョブで Spark SQL を使用して BigLake テーブルに対してクエリを実行する手順は次のとおりです。

  1. 次のサンプル スクリプトのような PySpark スクリプトを作成します。

    from pyspark.sql import SparkSession
    session = (
      SparkSession.builder.appName("testing")
        .config("viewsEnabled","true")
        .config("materializationDataset", "DATASET_ID")
        .config("spark.hive.metastore.bigquery.project.id", "PROJECT_ID")
        .config("spark.hive.metastore.client.factory.class", "com.google.cloud.bigquery.metastore.client.BigQueryMetastoreClientFactory")
        .enableHiveSupport()
        .getOrCreate()
    )
    
    session.sql("show databases").show()
    session.sql("use TABLE_NAME").show()
    session.sql("show tables").show()
    
    sql = "SELECT * FROM DATASET_ID.TABLE_ID LIMIT 10"
    df = session.read.format("bigquery").option("dataset", "DATASET_ID").load(sql)
    df.show()

    次のように置き換えます。

    • DATASET_ID: ユーザーに作成権限が付与されているデータセットの ID
    • PROJECT_ID: BigLake テーブルを含むプロジェクトの ID
    • TABLE_NAME: BigLake テーブルの名前
    • TABLE_ID: BigLake テーブルの ID
  2. バッチジョブを送信します。

公開された BigLake テーブルを管理する

公開された BigLake テーブルは、検出スキャンによって BigQuery で作成および管理されます。デフォルトでは、検出スキャンは、スケジュール設定されたスキャンまたはオンデマンド スキャンが実行されるたびに、新しいデータの検出、スキーマ推定、スキーマの進化を処理します。メタデータがスキャンによって管理されていることを示すため、スキャンは metadata-managed-mode ラベルが discovery-managed に設定されたテーブルを公開します。

スキーマや CSV オプション、JSON オプションなどの他のメタデータを自分で管理する場合は、metadata-managed-mode ラベルを user_managed に設定します。これにより、次の検出スキャンを実行してもスキーマは変更されません。この方法は、検出スキャンで推定されたスキーマが正しくない場合や、特定のテーブルで想定されるスキーマと異なる場合に役立ちます。metadata-managed-mode ラベルが user_managed に設定されている場合、費用を削減できます。

ラベルを更新するには、ラベルキーの値 metadata-managed-modediscovery-managed ではなく user_managed に編集します。この場合、user_managed ラベルがテーブルに添付されている限り、検出スキャンによってテーブルのスキーマが更新されることはありません。

公開された BigLake テーブルを更新する

デフォルト構成で検出スキャンジョブを使用して公開された BigLake テーブルの場合、スキーマとその他のメタデータは、スケジュールされた頻度で実行される検出スキャンのジョブごとに自動的に更新されます。

公開済みの BigLake テーブルを更新する手順は次のとおりです。

  1. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. 1 つ以上のテーブル プロパティを更新します。

  3. [エクスプローラ] ペインで、プロジェクトとデータセットを開いて、テーブルを選択します。

  4. [詳細] タブの [ラベル] セクションで、metadata-managed-mode ラベルが user_managed に設定されていることを確認します。別の値に設定されている場合は、次の手順を行います。

    1. 詳細を編集」をクリックします。

    2. [metadata-managed-mode] キーの横にある [] フィールドに「user_managed」と入力します。

公開された BigLake テーブルを削除する

公開済みの BigLake テーブルを削除する手順は次のとおりです。

  1. Cloud Storage バケット内のテーブルのデータファイルを削除します

  2. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  3. [エクスプローラ] ペインで、プロジェクトとデータセットを開いて、テーブルを選択します。

  4. [詳細] ペインの [ラベル] セクションで、metadata-managed-mode ラベルが user_managed に設定されていないことを確認します。user_managed に設定されている場合は、次の手順を行います。

    1. 詳細を編集 をクリックします。

    2. [metadata-managed-mode] キーの横にある [] フィールドに「discovery-managed」と入力します。

  5. [実行] をクリックします。検出スキャンはオンデマンドで実行されます。

検出スキャンが実行されると、BigLake テーブルは BigQuery で削除され、Spark でリストまたはクエリできなくなります。

検出スキャンをオンデマンドで実行する

オンデマンドで検出スキャンを実行するには、次のいずれかのオプションを選択します。

コンソール

  1. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション メニューで、[ガバナンス> メタデータのキュレーション] をクリックします。

  3. [Cloud Storage 検出] ペインで、実行する検出スキャンをクリックします。

  4. [今すぐ実行] をクリックします。

gcloud

検出スキャンを実行するには、gcloud dataplex datascans run コマンドを使用します。

gcloud dataplex datascans run DATASCAN \
  --location=LOCATION

次の変数を置き換えます。

  • LOCATION: 検出スキャンが作成された Trusted Cloud by S3NS リージョン。
  • DATASCAN: 検出スキャンの名前。

REST

検出スキャンをオンデマンドで実行するには、Dataplex API の dataScans.run メソッドを使用します。

検出スキャンを一覧表示する

検出スキャンを一覧表示するには、次のいずれかのオプションを選択します。

コンソール

  1. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション メニューで、[ガバナンス> メタデータのキュレーション] をクリックします。

  3. [Cloud Storage 検出] ペインに、プロジェクトで作成された検出スキャンが一覧表示されます。

gcloud

gcloud dataplex datascans list --location=LOCATION --project=PROJECT_ID

次のように置き換えます。

  • LOCATION: プロジェクトのロケーション
  • PROJECT_ID: 実際の Trusted Cloud プロジェクト ID

REST

プロジェクト内の検出スキャンのリストを取得するには、Dataplex Universal Catalog API の dataScans.list メソッドを使用します。

検出スキャンを表示する

検出スキャンを表示するには、次のいずれかのオプションを選択します。

コンソール

  1. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション メニューで、[ガバナンス> メタデータのキュレーション] をクリックします。

  3. [Cloud Storage 検出] ペインで、詳細を表示する検出スキャンをクリックします。

    • [スキャンの詳細] セクションには、検出スキャンの詳細が表示されます。
    • [スキャンのステータス] セクションには、最新のスキャンジョブの検出結果が表示されます。

gcloud

gcloud dataplex datascans jobs describe JOB \
    --location=LOCATION \
    --datascan=DATASCAN \
    --view=FULL

次のように置き換えます。

  • JOB: 検出スキャンジョブのジョブ ID。
  • LOCATION: 検出スキャンが作成された Trusted Cloud by S3NS リージョン。
  • DATASCAN: ジョブが属する検出スキャンの名前。
  • --view=FULL: 検出スキャンジョブの結果を表示します。

REST

データ検出スキャンの結果を表示するには、Dataplex Universal Catalog API の dataScans.get メソッドを使用します。

過去の検出スキャン結果を表示する

過去の検出スキャン結果を表示するには、次のいずれかのオプションを選択します。

コンソール

  1. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション メニューで、[ガバナンス> メタデータのキュレーション] をクリックします。

  3. [Cloud Storage 検出] ペインで、詳細を表示する検出スキャンをクリックします。

  4. [スキャン履歴] ペインをクリックします。[スキャン履歴] ペインには、各ジョブでスキャンされたレコード数、各ジョブのステータス、ジョブの実行時刻など、過去のジョブに関する情報が表示されます。

  5. ジョブの詳細情報を表示するには、[ジョブ ID] 列でジョブをクリックします。

gcloud

gcloud dataplex datascans jobs list \
    --location=LOCATION \
    --datascan=DATASCAN

次のように置き換えます。

  • LOCATION: 検出スキャンが作成された Trusted Cloud by S3NS リージョン。
  • DATASCAN: ジョブが属する検出スキャンの名前。

REST

検出スキャンのすべてのジョブを表示するには、Dataplex Universal Catalog API の dataScans.job/list メソッドを使用します。

検出スキャンを更新する

検出スキャンのスケジュールを変更するには(スケジュールをオンデマンドから繰り返しに変更する場合など)、検出スキャンを更新します。

コンソール

  1. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション メニューで、[ガバナンス> メタデータのキュレーション] をクリックします。

  3. [Cloud Storage 検出] ペインで、更新する検出スキャンの [アクション>編集] をクリックします。

  4. 値を編集します。

  5. [保存] をクリックします。

gcloud

検出スキャンを更新するには、gcloud dataplex datascans update data-discovery コマンドを使用します。

gcloud dataplex datascans update data-discovery SCAN_ID --location=LOCATION --description=DESCRIPTION

次のように置き換えます。

  • SCAN_ID: 更新する検出スキャンの ID
  • LOCATION: 検出スキャンが作成された Trusted Cloud by S3NS リージョン
  • DESCRIPTION: 検出スキャンの新しい説明

REST

検出スキャンを更新するには、Dataplex Universal Catalog API の dataScans.patch メソッドを使用します。

検出スキャンを削除する

検出スキャンを削除するには、次のいずれかのオプションを選択します。

コンソール

  1. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション メニューで、[ガバナンス> メタデータのキュレーション] をクリックします。

  3. [Cloud Storage 検出] ペインで、削除する検出スキャンの [アクション>削除] をクリックします。

  4. [削除] をクリックします。

gcloud

gcloud dataplex datascans delete SCAN_ID --location=LOCATION --async

次のように置き換えます。

  • SCAN_ID: 削除する検出スキャンの ID
  • LOCATION: 検出スキャンが作成された Trusted Cloud by S3NS リージョン。

REST

検出スキャンを削除するには、Dataplex Universal Catalog API の dataScans.delete メソッドを使用します。