このページでは、Dataproc Metastore 管理者インターフェースを使用する方法について説明します。
管理者インターフェースには、Dataproc Metastore サービスに保存されているメタデータを検査、管理するための一元化されたツールが用意されています。すべて Dataproc クラスタや Hive インスタンスに接続する必要はありません。代わりに、gcloud CLI または Dataproc Metastore API を使用してメタデータを管理できます。
たとえば、管理者インターフェースを使用してバックエンド メタデータに対して SQL クエリを直接実行し、特定のテーブル名を取得できます。このプロセスは、Dataproc クラスタの作成、SSH を使用したクラスタへの接続、Hive インスタンスの起動、クエリの実行(例: SELECT * FROM table_name
)というような典型的なワークフローよりも少ない手順になります。
結果として、管理者インターフェースを使用すると、時間を節約し、データの取得に必要な Google Cloud リソースの量を減らすことができます。
始める前に
- プロジェクトで Dataproc Metastore を有効にします。
- Dataproc Metastore サービスを作成します。
- メタデータを Dataproc Metastore にインポートします。
必要なロール
Dataproc Metastore 管理者インターフェースを使用するために必要な権限を取得するには、最小権限の原則に基づいて、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- Dataproc Metastore メタデータのクエリを実行する場合:
ユーザー アカウントまたはサービス アカウントに対するメタデータ クエリ管理者(
roles/metastore.metadataQueryAdmin
) -
メタデータ(データベース、テーブル、パーティションなど)のリソース ロケーションを変更する場合や、テーブルを別のデータベースに移動する場合:
-
ユーザー アカウントまたはサービス アカウントに対するメタデータ変更管理者(
roles/metastore.metadataMutateAdmin
) -
ユーザー アカウントまたはサービス アカウントの Dataproc Metastore 編集者(
roles/metastore.editor
)
-
ユーザー アカウントまたはサービス アカウントに対するメタデータ変更管理者(
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、Dataproc Metastore 管理者インターフェースの使用に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Dataproc Metastore 管理者インターフェースを使用するには、次の権限が必要です。
-
Dataproc Metastore メタデータのクエリを実行する場合:
metastore.services.queryMetadata
-
Dataproc Metastore テーブルを変更または移動する場合:
metastore.services.mutateMetadata
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
Dataproc Metastore の特定のロールと権限については、Dataproc Metastore IAM の概要をご覧ください。サポートされている管理者オペレーション
管理者インターフェース オペレーションは、gcloud CLI または Dataproc Metastore API を使用してのみ実施できます。Google Cloud コンソールでは、管理者インターフェース オペレーションはサポートされていません。
管理インターフェースは、次のオペレーションに対応しています。
読み取り専用オペレーション。
- メタデータをクエリします。
読み取り / 書き込みオペレーション
- メタデータ(データベース、テーブル、パーティションなど)のリソース ロケーションを変更します。
- テーブルのプロパティ(カスタム Key-Value ペアなど)を変更します。
- テーブルを別のデータベースに移動します。
メタデータをクエリする
このオペレーションを使用すると、SQL クエリを使用してデータベースのメタデータ情報を検索できます。クエリを実行すると、結果が アーティファクトの Google Cloud バケットにダンプされます。
このオペレーションを実行する前に、次の検討事項を留意してください。
- サポートされているオペレーションは、
read-only
MySQL クエリまたは Spanner クエリのみです。クエリがデータを変更しようとすると、オペレーションは失敗します。 - 出力ファイルには最大で 1,000 行が含まれます。この構成は変更できません。
出力ファイルは自動的に削除されません。代わりに、Google Cloud バケットから手動で削除する必要があります。それらを削除しないと、追加のストレージ費用が発生する場合があります。
gcloud CLI
メタデータをクエリするには、次の
gcloud metastore services query-metadata
コマンドを実行します。gcloud metastore services query-metadata SERVICE \ --location=LOCATION \ --query=QUERY
以下を置き換えます。
SERVICE
: Dataproc Metastore サービスの名前。LOCATION
: Dataproc Metastore サービスが存在する Google Cloud リージョン。QUERY
: メタデータをターゲットとする SQL クエリ。- MySQL データベースを使用している場合は、通常の MySQL クエリを使用します。
- Spanner データベースを使用している場合は、GoogleSQL クエリを使用します。
アーティファクトの Google Cloud バケットで出力ファイルを表示します。
REST
curl -X POST -s -i \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-X POST -d '{"query": "QUERY"}' \
-H "Content-Type:application/json" \
https://metastore.googleapis.com/projects/PROJECT_ID/locations/LOCATION/services/SERVICE:queryMetadata
以下を置き換えます。
QUERY
: メタデータをターゲットとするために使用する SQL クエリ。- MySQL データベースを使用している場合は、通常の MySQL クエリを使用します。
- Spanner データベースを使用している場合は、GoogleSQL クエリを使用します。
PROJECT_ID
: Dataproc Metastore サービスが存在する Google Cloud プロジェクト ID。SERVICE
: Dataproc Metastore サービスの名前。LOCATION
: Dataproc Metastore が存在するリージョン。
次の例は、DBS という名前のデータベースから select *
クエリを実行するサンプル コマンドを示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" -X POST -d '{"query": "select * from DBS;"}' \
https://metastore.googleapis.com/projects/dpms/locations/us-central1/services/dpms1:queryMetadata
クエリ メタデータ オペレーションの出力を解釈する
クエリ メタデータ コマンドを初めて実行すると、Dataproc Metastore によってアーティファクト Google Cloud バケットに Google Cloud フォルダが自動的に作成されます。このフォルダの名前は query-results
です。クエリ実行(API 呼び出し)が成功するたびに、query-results
フォルダ内に新しいフォルダが作成されます(ランダムに生成された UUID の名前が付けられます)。
各新しいフォルダには、クエリ結果を含む result manifest
ファイルが含まれています。このフォルダの場所は、API 呼び出しのレスポンスで返されます。
たとえば、レスポンスで resultManifestUri
フィールドにはファイルの場所が含まれています。
"response": {
"@type": "type.googleapis.com/google.cloud.metastore.QueryMetadataResponse",
"resultManifestUri": "gs://gcs-bucket-6a3638b8-e319-46363-ad33-e632a5e/query-results/800156f5-2d13-4b80-bec3-2345a9e880f6/result-manifest"
}
result manifest
ファイルの出力は、次のようになります。
{
"status": {
"code": 0,
"message": "Query results are successfully uploaded to cloud storage",
"details": []
},
"filenames": ["result-001"]
}
結果のマニフェスト ファイルの詳細:
status
フィールドには、クエリが成功したかどうかが表示されます。- クエリの実行が成功すると、
filenames
フィールドに作成されたすべてのファイルが一覧表示されます。これらのファイルはresult manifest
ファイルと同じフォルダにあります。 - クエリが失敗した場合は、
details
フィールドにエラー メッセージが表示されます。
メタデータのリソース ロケーションを変更する
このオペレーションによって、データベース、テーブル、またはパーティションのリソース ロケーションを変更できます。
このコマンドを実行すると、親ディレクトリまたはそれぞれのメタデータ リソースのみが更新されます。このコマンドは、既存のデータを新しい場所に転送しません。
gcloud CLI
メタデータのリソース ロケーションを変更するには、次の
gcloud metastore services alter-metadata-resource-location
コマンドを実行します。gcloud metastore services alter-metadata-resource-location SERVICE \ --location=LOCATION \ --resource_name=RESOURCE_NAME \ --location_uri=LOCATION_URI
以下を置き換えます。
SERVICE
: Dataproc Metastore サービスの名前。LOCATION
: Dataproc Metastore サービスが存在する Google Cloud リージョン。RESOURCE_NAME
: 変更するデータベース、テーブル、パーティションの名前。LOCATION_URI
:RESOURCE_NAME
のコンテンツの新しい Cloud Storage パス。この値は、メタデータ リソースのロケーションを移動するパスです。このパスはgs://
で始まる必要があります。例:gs://bucket/object
。
リソース ロケーションが正常に変更されたことを確認します。
REST
curl -X POST -s -i \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
POST -d '{"resource_name": "RESOURCE_NAME", "location_uri":"LOCATION_URI"}' \
-H "Content-Type:application/json" \
https://metastore.googleapis.com/projects/PROJECT_ID/locations/LOCATION/services/SERVICE:alterLocation
以下を置き換えます。
PROJECT_ID
: Dataproc Metastore サービスが存在する Google Cloud プロジェクト ID。SERVICE
: Dataproc Metastore サービスの名前。LOCATION
: Dataproc Metastore が存在するリージョン。RESOURCE_NAME
: 変更するデータベース、テーブル、パーティションの名前。LOCATION_URI
:RESOURCE_NAME
のコンテンツの新しい Cloud Storage パス。この値は、メタデータ リソースのロケーションを移動するパスです。このパスはgs://
で始まる必要があります。例:gs://bucket/object
。
次の例は、test-table2
というテーブルを新しい Cloud Storage バケットに移動するサンプル コマンドを示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST -d '{"resource_name": "databases/testdb1/tables/test-table2",
"location_uri":"gs://gcs-bucket-dpms1-9425bd83-b794-4f1c-9e79-2d833f758cc1/empty"}'
https://metastore.googleapis.com/projects/dpms/locations/us-central1/services/dpms1:alterLocation
テーブルのプロパティを変更する
このオペレーションにより、テーブルのプロパティ(データの保存に使用するカスタム Key-Value ペアなど)を変更できます。たとえば、properties.customerID_1
の Key-Value ペアを properties.customerID_2
に変更できます。
gcloud CLI
テーブルのプロパティを変更するには、次の
gcloud metastore services alter-table-properties
コマンドを実行します。gcloud metastore services alter-table-properties SERVICE \ --location=LOCATION \ --table-name=TABLE_NAME \ --update-mask=UPDATE_MASK \ --properties=PROPERTIES
以下を置き換えます。
SERVICE
: Dataproc Metastore サービスの名前。LOCATION
: Dataproc Metastore サービスが存在する Google Cloud リージョン。TABLE_NAME
: 変更するプロパティを含むテーブルの名前(databases/{database_id}/tables/{table_id}
の形式)。UPDATE_MASK
: 更新する既存のプロパティ値。 Key-Value ペアを記述する場合は、カンマ区切りのリスト(例:properties.1,properties.2,properties.3,...
)を使用します。PROPERTIES
: テーブルの新しいプロパティ。 Key-Value ペアを記述する場合は、カンマ区切りのリストを使用します。例:a=1,b=2,c=3,...
。ここで指定した値は、UPDATE_MASK
の値を上書きします。
REST
curl -X POST -s -i \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
POST -d '{"table_name": "TABLE_NAME", "update_mask":"UPDATE_MASK", "properties":PROPERTIES}'\
-H "Content-Type:application/json" \
https://metastore.googleapis.com/projects/PROJECT_ID/locations/LOCATION/services/SERVICE:alterTableProperties
以下を置き換えます。
SERVICE
: Dataproc Metastore サービスの名前。LOCATION
: Dataproc Metastore サービスが存在する Google Cloud リージョン。TABLE_NAME
: 変更するプロパティを含むテーブルの名前(databases/{database_id}/tables/{table_id}
の形式)。UPDATE_MASK
: 更新する既存のプロパティ値。 Key-Value ペアを記述する場合は、カンマ区切りのリスト(例:properties.1,properties.2,properties.3,...
)を使用します。PROPERTIES
: テーブルの新しいプロパティ。 Key-Value ペアを記述する場合は、カンマ区切りのリスト(例:a=1,b=2,c=3,...
)を使用します。ここで指定した値は、UPDATE_MASK
の値を上書きします。
次の例は、test-table
というテーブルのテーブル プロパティを変更するサンプル コマンドを示しています。この例では、既存の Key-Value ペア properties.customerID_1
は、新しい値 properties.customerID_2
に更新されます。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"
-X POST -d '{"table_name": "databases/default/tables/test-table", "update_mask":{"paths":"properties.customerID_1"}, "properties":{"customerID_1":"customerID_2"}}' https://metastore.googleapis.com/projects/dpms-p
テーブルを別のデータベースに移動する
このオペレーションを使用すると、内部テーブル(マネージド テーブル)を別のデータベースに移動できます。 この場合、データベースの親ディレクトリとそのデータの両方が移動します。
外部テーブルに保存されているデータは移動できません。
gcloud CLI
テーブルを別のデータベースに移動するには、次の
gcloud metastore services move-table-to-database
コマンドを実行します。gcloud metastore services move-table-to-database SERVICE \ --location=LOCATION \ --db_name=DB_NAME \ --table_name=TABLE_NAME \ --destination_db_name=DESTINATION_DB_NAME
以下を置き換えます。
SERVICE
: Dataproc Metastore サービスの名前。LOCATION
: Dataproc Metastore サービスが存在する Google Cloud リージョン。DB_NAME
: 移動するテーブルを含むソース データベースの名前。TABLE_NAME
: 移動するテーブルの名前。DESTINATION_DB_NAME
: テーブルを移行する先の新しいデータベースの名前。
テーブルの変更が正常に完了したことを確認します。
REST
curl -X POST -s -i \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
POST -d '{"table_name": "TABLE_NAME", "db_name": "DB_NAME", "destination_db_name": "DESTINATION_DB_NAME"}'\
-H "Content-Type:application/json" \
https://metastore.googleapis.com/projects/PROJECT_ID/locations/LOCATION/services/SERVICE:moveTableToDatabase
以下を置き換えます。
PROJECT_ID
: Dataproc Metastore サービスが存在する Google Cloud プロジェクト ID。SERVICE
: Dataproc Metastore サービスの名前。LOCATION
: Dataproc Metastore が存在するリージョン。DB_NAME
: 移動するテーブルを含むソース データベースの名前。TABLE_NAME
: 移動するテーブルの名前。DESTINATION_DB_NAME
: テーブルを移行する先の新しいデータベースの名前。
次の例は、testdb1
というデータベースを testdb2
という異なるデータベースに移動するサンプル コマンドを示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"
-X POST -d '{"table_name": "testtb1", "db_name": "testdb1",
"destination_db_name": "testdb2"}' https://metastore.googleapis.com/projects/dpms/locations/asia-northeast2/services/dpms1:moveTableToDatabase