Dataproc Metastore 管理控制台

本页面介绍了如何使用 Dataproc Metastore 管理员界面。

管理员界面提供了一个集中式工具,可用于检查和管理存储在 Dataproc Metastore 服务中的元数据,而无需连接到 Dataproc 集群或 Hive 实例。您可以改为使用 Google Cloud CLI 或 Dataproc Metastore API 管理元数据。

例如,通过使用管理员界面,您可以直接在后端元数据上运行 SQL 查询,以提取特定表名。与创建 Dataproc 集群、使用 SSH 连接到集群、启动 Hive 实例,然后最终运行查询(例如 SELECT * FROM table_name)等典型工作流程相比,此过程涉及的步骤更少。

因此,管理员界面可以帮助您节省时间,并减少检索数据所需的 Google Cloud 资源量。

准备工作

所需的角色

如需获得使用 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 Identity and Access Management 概览

支持的管理员操作

您只能使用 gcloud CLI 或 Dataproc Metastore API 运行管理员界面操作。 Google Cloud 控制台不支持管理员界面操作。

管理员界面支持以下操作。

  • 只读操作。

    • 查询元数据。
  • 读取和写入操作。

    • 更改元数据的资源位置,包括数据库、表和分区。
    • 更改表属性,例如自定义键值对。
    • 将表移至其他数据库。

如果管理员界面不支持其他操作,您可以直接查询 Hive 元数据存储区。例如,如需列出 Dataproc Metastore 实例中的所有表,您可以直接查询 Hive metastore 架构。在这种情况下,您可以运行 select * from TBLS 来列出存储在服务中的所有表。

查询元数据

此操作可让您使用 SQL 查询在数据库中查找元数据信息。运行查询后,结果会转储到您的 artifacts Google Cloud 存储桶中。

在运行此操作之前,请注意以下事项:

  • 支持的操作仅包括 read-only MySQL 或 Spanner 查询。如果查询尝试修改数据,则操作会失败。
  • 输出文件最多包含 1,000 行。此配置无法更改。
  • 输出文件不会自动删除。您必须改为手动从 Google Cloud 存储桶中删除这些文件。如果不删除这些文件,您可能需要支付额外的存储费用。

gcloud CLI

  1. 如需查询元数据,请运行以下 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 查询
  2. 在您的 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:您的 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

  1. 如需更改元数据的资源位置,请运行以下 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_URIRESOURCE_NAME 内容的新 Cloud Storage 路径。此值是您要将元数据资源位置迁移到的路径。此路径必须以 gs:// 开头。例如 gs://bucket/object
  2. 验证资源位置更改是否成功。

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_URIRESOURCE_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

更改表格属性

此操作可让您更改表的属性,例如用于存储数据的自定义键值对。例如,您可以将键值对 properties.customerID_1 更改为 properties.customerID_2

gcloud CLI

  1. 如需更改表属性,请运行以下 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:您要更新的现有房源属性值。 使用以英文逗号分隔的列表来描述键值对,例如 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:Dataproc Metastore 服务所在的 Google Cloud 区域。
  • 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

  1. 如需将表移至另一个数据库,请运行以下 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:要将表移至的新数据库的名称。
  2. 验证表更改是否成功。

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

后续步骤