本页介绍了如何使用 Dataproc Metastore 管理控制台。
管理员界面为您提供了一个集中式工具,用于检查 管理存储在 Dataproc Metastore 服务中的元数据, 而无需连接到 Dataproc 集群或 Hive 实例。不过,您可以使用 gcloud CLI 或 Dataproc Metastore API 管理元数据。
例如,通过使用管理员界面,您可以直接运行 SQL 查询,
以提取特定的表名称。此过程涉及
但需要执行的步骤少于典型工作流程的步骤(例如创建
Dataproc 集群、使用 SSH 连接到集群、启动 Hive 实例;
最后运行查询(例如 SELECT * FROM table_name
)。
因此,管理员界面可以帮助您节省时间并降低 检索数据所需的 Google Cloud 资源量。
准备工作
所需的角色
要获取使用 Dataproc Metastore 管理员界面所需的权限, 请让管理员授予您 基于最小权限原则,为您的项目分配以下 IAM 角色:
-
如需查询 Dataproc Metastore 元数据,请执行以下操作:
用户账号或服务账号的元数据查询管理员 (
roles/metastore.metadataQueryAdmin
) -
如需更改元数据(包括数据库、表和分区)的资源位置,或将表移动到另一个数据库,请执行以下操作:
-
用户账号或服务账号的元数据 mutate 管理员 (
roles/metastore.metadataMutateAdmin
) -
对用户账号或服务账号拥有 Dataproc Metastore Editor (
roles/metastore.editor
)
-
用户账号或服务账号的元数据 mutate 管理员 (
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含 拥有使用 Dataproc Metastore 管理员界面所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
使用 Dataproc Metastore 管理员界面需要以下权限:
-
如需查询 Dataproc Metastore 元数据,请执行以下操作:
metastore.services.queryMetadata
-
如需更改或移动 Dataproc Metastore 表,请执行以下操作:
metastore.services.mutateMetadata
支持的管理员操作
您只能使用 gcloud CLI 或 Dataproc Metastore API。Google Cloud 控制台不支持管理控制台操作。
管理员界面支持以下操作。
只读操作。
- 查询元数据。
读写操作。
- 更改元数据(包括数据库、表)的资源位置 和分区。
- 更改表属性,例如自定义键值对。
- 将表移至另一个数据库。
查询元数据
此操作可让您在数据库中查询元数据信息 使用 SQL 查询。运行查询后,结果会转储到工件 Google Cloud 存储桶中。
运行此操作之前,请注意以下事项:
- 受支持的操作仅包括
read-only
个 MySQL 或 Spanner 查询。如果查询尝试 修改数据,操作将失败。 - 输出文件最多可包含 1000 行。此配置 无法更改
系统不会自动删除输出文件。您必须从 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 查询。
查看 Artifacts 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
:您要管理的 Google Cloud 项目的 ID Dataproc Metastore 服务所在的目录。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
:您的 Google Cloud Storage 存储区域 Dataproc Metastore 服务所在的目录。RESOURCE_NAME
:数据库、表、 更改或分区LOCATION_URI
:Cloud Storage 的新 Cloud Storage 路径RESOURCE_NAME
的内容。此值 是要移动元数据资源位置的路径。 此路径必须以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
:Cloud Storage 的新 Cloud Storage 路径RESOURCE_NAME
的内容。此值 是要移动元数据资源位置的路径。 此路径必须以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
更改表属性
此操作允许您更改某个表的属性,例如
您用来存储数据的键值对。例如,您可以将 properties.customerID_1
的键值对更改为 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
:您的 Google Cloud Storage 存储区域 Dataproc Metastore 服务所在的目录。TABLE_NAME
:包含 您要更改的属性的格式databases/{database_id}/tables/{table_id}
。UPDATE_MASK
:您要更新的现有媒体资源价值。使用逗号分隔列表来描述键值对,例如:properties.1,properties.2,properties.3,...
。PROPERTIES
:表的新属性。使用逗号分隔列表来描述键值对。例如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
:您的 Google Cloud Storage 存储区域 Dataproc Metastore 服务所在的目录。TABLE_NAME
:包含 您要更改的属性的格式databases/{database_id}/tables/{table_id}
。UPDATE_MASK
:要更新的现有属性值。 使用逗号分隔列表来描述键值对,例如:properties.1,properties.2,properties.3,...
。PROPERTIES
:表的新属性。使用逗号分隔的列表来描述键值对,例如a=1,b=2,c=3,...
。您在此处列出的值会覆盖UPDATE_MASK
中的值。
以下示例展示了一个示例命令,该命令会更改名为 test-table
的表的表格属性。在本示例中,现有键值对
“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
:您的 Cloud Storage 存储分区的 Google Cloud 项目 ID Dataproc Metastore 服务所在的目录。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