Cloud Storage データを検出してカタログに登録する

このドキュメントでは、Cloud Storage データの自動検出を使用する方法について説明します。

Dataplex の自動検出は、Cloud Storage バケット内のデータをスキャンしてメタデータを抽出してカタログ化できる BigQuery の機能です。スキャンの一環として、自動検出によって構造化データ用の BigLake テーブルまたは外部テーブルと、非構造化データ用のオブジェクト テーブルが作成されます。これらのテーブルは、分析と AI に使用できます。テーブルは Dataplex Catalog に自動的にカタログ化され、検索またはブラウジングできます。

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 Catalog に自動的に取り込まれます。

始める前に

このドキュメントのタスクを実行するために必要な Identity and Access Management(IAM)権限が付与されていることを確認します。

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

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

  service-PROJECT_NUMBER@gcp-sa-dataplex.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.connections.delegate
    • bigquery.connections.use

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

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

DataScan API の使用に必要な権限を取得するには、次の 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 API の使用に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

DataScan API を使用するには、次の権限が必要です。

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

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

検出スキャンを作成する

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

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

Console

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

    BigQuery に移動

  2. [エクスプローラ] で、 [追加] をクリックします。

  3. [Add] ペインの [Popular sources] セクションで、[Auto-create external and BigLake tables from GCS] をクリックします。

  4. [Create table] ペインの [Source] セクションで、スキャンするデータの詳細を構成します。

    1. スキャンの名前を入力します。
    2. [スキャン ID] フィールドに、リソース命名規則に従った一意の ID を入力します。ID を指定しない場合、検出スキャンによってスキャン ID が生成されます。
    3. 省略可: スキャンの説明を指定します。
    4. スキャンするファイルを含む Cloud Storage バケットを指定するには、[バケット] フィールドでバケットを参照して選択します。
    5. 省略可: glob パターンのリストを指定して、検出スキャンに含めるデータまたは除外するデータを定義します。

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

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

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

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

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

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

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

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

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

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

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

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

REST

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

検出スキャンをモニタリングする

検出スキャンの結果をモニタリングするには、スキャンの実行時に作成されたログをクエリします。

Console

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  2. [ログ エクスプローラ] ビューで、[クエリ] タブを見つけます。

  3. [リソース] メニューをクリックします。

  4. [Cloud Dataplex DataScan] を選択します。[適用] をクリックします。

  5. [ログ名] メニューをクリックします。

  6. [Search log names] フィールドに「dataplex.googleapis.com%2Fdata_scan」と入力します。[data_scan] を選択し、[適用] をクリックします。

  7. 省略可: ログクエリに次のフィルタを追加して、ログを特定のデータスキャン ID またはロケーションにフィルタリングします。

    resource.type="dataplex.googleapis.com/DataScan"
    AND resource.labels.resource_container="projects/PROJECT_ID"
    AND resource.labels.datascan_id="DATA_SCAN_ID"
    

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

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID
    • DATA_SCAN_ID: DataScan ID
  8. [クエリを実行] をクリックします。

REST

検出スキャンをモニタリングするには、dataScans.get メソッドを使用します。

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

検出スキャンを実行すると、BigLake テーブルが BigQuery の新しいデータセットに公開され、BigQuery で SQL を使用して分析できます。また、Apache Spark、Dataproc、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 ラベルが user_managed に設定されていない限り、検出スキャンは公開された BigLake テーブルを管理します。検出スキャンは、スケジュール設定された DataScan またはオンデマンド DataScan が実行されるたびに、新しいデータの検出、スキーマ推定、スキーマの進化を処理します。

公開済みの BigLake テーブルを更新する

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

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

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

    BigQuery に移動

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

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

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

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

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

スキーマが更新されたテーブルは、SQL クエリと Spark クエリで使用できるようになります。次の検出スキャンが実行されても、テーブルのメタデータは変更されません。

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

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

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

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

    BigQuery に移動

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

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

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

    2. [metadata-managed-mode] キーの横にある [value] フィールドに、user_managed 以外の値を入力します。

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

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

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

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

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

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

検出スキャンを更新する

スキャンのスケジュールを変更するには(スケジュールをオンデマンドから定期的に変更する場合など)、DataScan を更新する必要があります。

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

検出スキャンを削除する

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