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 ユーザー (
roles/bigquery.user
) -
データソース バケットに対するストレージ オブジェクト閲覧者 (
roles/storage.objectViewer
) -
接続を指定します。
BigQuery 接続管理者 (
roles/bigquery.connectionAdmin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、検出スキャンの実行に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
検出スキャンを実行するには、次の権限が必要です。
-
データソース プロジェクトに対する
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
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] で、
[追加] をクリックします。[Add] ペインの [Popular sources] セクションで、[Auto-create external and BigLake tables from GCS] をクリックします。
[Create table] ペインの [Source] セクションで、スキャンするデータの詳細を構成します。
- スキャンの名前を入力します。
- [スキャン ID] フィールドに、リソース命名規則に従った一意の ID を入力します。ID を指定しない場合、検出スキャンによってスキャン ID が生成されます。
- 省略可: スキャンの説明を指定します。
- スキャンするファイルを含む Cloud Storage バケットを指定するには、[バケット] フィールドでバケットを参照して選択します。
省略可: glob パターンのリストを指定して、検出スキャンに含めるデータまたは除外するデータを定義します。
- Include: データのサブセットのみをスキャンする場合は、含めるオブジェクトに一致する glob パターンのリストを指定します。
- 除外: 除外するオブジェクトに一致する glob パターンのリストを指定します。
たとえば、
gs://test_bucket/foo/..
を検出スキャンから除外するには、除外パスとして**/foo/*
を入力します。引用符はエラーの原因となります。"**/foo/*"
ではなく**/foo/*
を入力してください。包含パターンと除外パターンの両方を指定すると、除外パターンが最初に適用されます。
スキャンされたデータから BigLake テーブルを作成するには、[接続 ID] フィールドに Google Cloud リソース接続 ID を指定します。詳細については、Google Cloud リソース接続をご覧ください。
リソース接続 ID を指定しない場合、検出スキャンは BigLake 以外の外部テーブルを作成します。
[検出頻度] セクションで、検出スキャンを実行するタイミングを構成します。
繰り返し: 事前定義されたスケジュールでスキャンが実行されます。開始時間、スキャンを実行する日数、頻度(1 時間ごとなど)を指定します。
オンデマンド: スキャンはオンデマンドで実行されます。
省略可: [JSON または CSV の仕様] セクションで、スキャンで JSON ファイルと CSV ファイルを処理する方法を指定します。[JSON または CSV の仕様] をクリックします。
- JSON オプションを構成するには、[JSON 解析オプションを有効にする] を選択します。
- 型推論を無効にする: データのスキャン時に検出スキャンでデータ型を推論するかどうか。JSON データの型推定を無効にすると、すべての列がプリミティブ型(文字列、数値、ブール値など)として登録されます。
- エンコード形式: UTF-8、US-ASCII、ISO-8859-1 など、データの文字エンコード。値を指定しない場合、デフォルトとして UTF-8 が使用されます。
- CSV オプションを構成するには、[CSV 解析オプションを有効にする] をオンにします。
- 型推論を無効にする: データのスキャン時に検出スキャンでデータ型を推論するかどうか。CSV データの型推定を無効にすると、すべての列が文字列として登録されます。
- Header rows: ヘッダー行の数(
0
または1
)。値0
を指定すると、検出スキャンは見出しを推測し、ファイルから列名を抽出します。デフォルトは0
です。 - 列区切り文字: 値を区切るために使用される文字。単一の文字(
\r
(改行)または\n
(改行))を指定します。デフォルトはカンマ(,
)です。 - エンコード形式: データの文字エンコード(
UTF-8
、US-ASCII
、ISO-8859-1
など)。値を指定しない場合、デフォルトとして UTF-8 が使用されます。
- JSON オプションを構成するには、[JSON 解析オプションを有効にする] を選択します。
データ検出スキャンの構成が完了したら、[作成](スケジュール設定されたスキャンの場合)または [今すぐ実行](オンデマンド スキャンの場合)をクリックします。
スケジュール設定されたスキャンは、設定したスケジュールに従って実行されます。
オンデマンド スキャンは、作成時に最初に 1 回実行され、いつでも実行できます。スキャンの実行には数分かかることがあります。
REST
検出スキャンを作成するには、dataScans.create
メソッドを使用します。
検出スキャンをモニタリングする
検出スキャンの結果をモニタリングするには、スキャンの実行時に作成されたログをクエリします。
Console
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[ログ エクスプローラ] に移動
[ログ エクスプローラ] ビューで、[クエリ] タブを見つけます。
[リソース] メニューをクリックします。
[Cloud Dataplex DataScan] を選択します。[適用] をクリックします。
[ログ名] メニューをクリックします。
[Search log names] フィールドに「
dataplex.googleapis.com%2Fdata_scan
」と入力します。[data_scan] を選択し、[適用] をクリックします。省略可: ログクエリに次のフィルタを追加して、ログを特定のデータスキャン 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 プロジェクト IDDATA_SCAN_ID
: DataScan ID
[クエリを実行] をクリックします。
REST
検出スキャンをモニタリングするには、dataScans.get
メソッドを使用します。
公開された BigLake テーブルに対してクエリを実行する
検出スキャンを実行すると、BigLake テーブルが BigQuery の新しいデータセットに公開され、BigQuery で SQL を使用して分析できます。また、Apache Spark、Dataproc、HiveQL を使用して Dataproc で分析することもできます。
SQL を使用したクエリ
BigQuery でテーブルを表示またはクエリできます。BigQuery でクエリを実行する方法については、クエリを実行するをご覧ください。
Apache Spark を使用したクエリ
Dataproc サーバーレス ジョブで Spark SQL を使用して BigLake テーブルに対してクエリを実行する手順は次のとおりです。
次のサンプル スクリプトのような 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
: ユーザーに作成権限があるデータセットの IDPROJECT_ID
: BigLake テーブルを含むプロジェクトの IDTABLE_NAME
: BigLake テーブルの名前TABLE_ID
: BigLake テーブルの ID
公開された BigLake テーブルを管理する
公開された BigLake テーブルは、検出スキャンによって BigQuery に作成されます。metadata-managed-mode ラベルが user_managed
に設定されていない限り、検出スキャンは公開された BigLake テーブルを管理します。検出スキャンは、スケジュール設定された DataScan またはオンデマンド DataScan が実行されるたびに、新しいデータの検出、スキーマ推定、スキーマの進化を処理します。
公開済みの BigLake テーブルを更新する
デフォルト構成で検出スキャン ジョブを使用して公開された BigLake テーブルの場合、スキーマとその他のメタデータは、スケジュールされた頻度で実行されるデータスキャン ジョブごとに自動的に更新されます。
公開済みの BigLake テーブルを更新する手順は次のとおりです。
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクトとデータセットを開いて、テーブルを選択します。
[詳細] ペインの [ラベル] セクションで、metadata-managed-mode が
user_managed
に設定されていることを確認します。別の値に設定されている場合は、次の手順を行います。[詳細を編集] をクリックします。
[metadata-managed-mode] キーの横にある [値] フィールドに
user_managed
と入力します。
スキーマが更新されたテーブルは、SQL クエリと Spark クエリで使用できるようになります。次の検出スキャンが実行されても、テーブルのメタデータは変更されません。
公開された BigLake テーブルを削除する
公開済みの BigLake テーブルを削除する手順は次のとおりです。
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクトとデータセットを開いて、テーブルを選択します。
[詳細] ペインの [ラベル] セクションで、metadata-managed-mode ラベルが
user_managed
に設定されていないことを確認します。user_managed
に設定されている場合は、次の手順を行います。[詳細を編集]
をクリックします。[metadata-managed-mode] キーの横にある [value] フィールドに、
user_managed
以外の値を入力します。
[実行] をクリックします。検出スキャンはオンデマンドで実行されます。
検出スキャンが実行されると、BigLake テーブルは BigQuery で削除され、Spark でリストまたはクエリできなくなります。
検出スキャンをオンデマンドで実行する
検出スキャンをオンデマンドで実行するには、Dataplex API の dataScans.run
メソッドを使用します。
検出スキャンを一覧表示する
プロジェクト内のスキャンのリストを取得するには、Dataplex API の dataScans.list
メソッドを使用します。
検出スキャンを更新する
スキャンのスケジュールを変更するには(スケジュールをオンデマンドから定期的に変更する場合など)、DataScan を更新する必要があります。
検出スキャンを更新するには、Dataplex API の dataScans.patch
メソッドを使用します。
検出スキャンを削除する
検出スキャンを削除するには、Dataplex API の dataScans.delete
メソッドを使用します。