Interfaz del administrador de Dataproc Metastore

En esta página, se explica cómo usar la interfaz de administrador de Dataproc Metastore.

La interfaz de administrador te proporciona una herramienta centralizada para inspeccionar y administrar los metadatos almacenados en tu servicio de Dataproc Metastore, todo sin tener que conectarte a un clúster de Dataproc ni a una instancia de Hive. En cambio, puedes administrar tus metadatos con Google Cloud CLI o las APIs de Dataproc Metastore.

Por ejemplo, con la interfaz del administrador, puedes ejecutar una consulta en SQL directamente en los metadatos de backend para recuperar un nombre de tabla específico. Este proceso implica seguir menos pasos que el flujo de trabajo típico, como crear un clúster de Dataproc, conectarse al clúster con SSH, iniciar una instancia de Hive y, luego, ejecutar una consulta (por ejemplo, SELECT * FROM table_name).

Como resultado, la interfaz del administrador puede ayudarte a ahorrar tiempo y a disminuir la cantidad de recursos Google Cloud necesarios para recuperar tus datos.

Antes de comenzar

Roles requeridos

Para obtener los permisos que necesitas para usar la interfaz de administrador de Dataproc Metastore, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto, según el principio de privilegio mínimo:

  • Para consultar los metadatos de Dataproc Metastore, debes tener el rol de administrador de consultas de metadatos (roles/metastore.metadataQueryAdmin) en la cuenta de usuario o de servicio.
  • Para modificar la ubicación del recurso de tus metadatos, incluidas las bases de datos, las tablas y las particiones, o mover una tabla a otra base de datos, haz lo siguiente:
    • Administrador de mutación de metadatos (roles/metastore.metadataMutateAdmin) en la cuenta de usuario o la cuenta de servicio
    • Editor de Dataproc Metastore (roles/metastore.editor) en la cuenta de usuario o la cuenta de servicio

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para usar la interfaz de administrador de Dataproc Metastore. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para usar la interfaz de administrador de Dataproc Metastore:

  • Para consultar los metadatos de Dataproc Metastore, haz lo siguiente: metastore.services.queryMetadata
  • Para modificar o mover tablas de Dataproc Metastore, haz lo siguiente: metastore.services.mutateMetadata

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Para obtener más información sobre los roles y permisos específicos de Dataproc Metastore, consulta la Descripción general de Identity and Access Management de Dataproc Metastore.

Operaciones de administrador admitidas

Solo puedes ejecutar operaciones de la interfaz de administrador con gcloud CLI o las APIs de Dataproc Metastore. Las operaciones de la interfaz del administrador no son compatibles con la consola de Google Cloud .

La interfaz de administrador admite las siguientes operaciones.

  • Operaciones de solo lectura.

    • Consultar metadatos
  • Operaciones de lectura y escritura.

    • Modificar la ubicación del recurso de tus metadatos, incluidas las bases de datos, las tablas y las particiones
    • Modificar las propiedades de la tabla, como los pares clave-valor personalizados
    • Mover una tabla a otra base de datos

Si la interfaz del administrador no admite otra operación, puedes consultar el metastore de Hive directamente. Por ejemplo, para enumerar todas las tablas en una instancia de Dataproc Metastore, puedes consultar el esquema de Hive Metastore directamente. En este caso, puedes ejecutar select * from TBLS para enumerar todas las tablas almacenadas en tu servicio.

Consulta de metadatos

Esta operación te permite buscar información de metadatos en tu base de datos con consultas de SQL. Después de ejecutar una consulta, los resultados se vuelcan en tu bucket de artefactos Google Cloud .

Antes de ejecutar esta operación, ten en cuenta las siguientes consideraciones:

  • Las operaciones admitidas solo incluyen consultas de read-only MySQL o Spanner. Si la consulta intenta modificar los datos, la operación falla.
  • El archivo de salida contiene un máximo de 1,000 filas. No se puede cambiar esta configuración.
  • Los archivos de salida no se borran automáticamente. En su lugar, debes borrarlos manualmente de tu bucket de Google Cloud . Si no los borras, es posible que incurras en costos de almacenamiento adicionales.

gcloud CLI

  1. Para consultar los metadatos, ejecuta el siguiente comando de gcloud metastore services query-metadata:

    gcloud metastore services query-metadata SERVICE \
      --location=LOCATION \
      --query=QUERY

    Reemplaza lo siguiente:

    • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
    • LOCATION: Es la región Google Cloud en la que reside tu servicio de Dataproc Metastore.
    • QUERY: Es la consulta en SQL para segmentar tus metadatos.
      • Si usas una base de datos MySQL, usa una consulta MySQL normal.
      • Si usas una base de datos de Spanner, usa una consulta de GoogleSQL.
  2. Consulta el archivo de salida en tu bucket de artefactos 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

Reemplaza lo siguiente:

  • QUERY: Es la consulta en SQL que usas para segmentar tus metadatos.
    • Si usas una base de datos MySQL, usa una consulta MySQL normal.
    • Si usas una base de datos de Spanner, usa una consulta de GoogleSQL.
  • PROJECT_ID: Es el ID del proyecto de Google Cloud en el que reside tu servicio de Dataproc Metastore.
  • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
  • LOCATION: Es la región en la que reside tu Dataproc Metastore.

En el siguiente ejemplo, se muestra un comando de muestra que ejecuta una consulta select * desde una base de datos llamada DBS.

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

Interpreta el resultado de una operación de metadatos de consulta

Cuando ejecutas un comando de metadatos de consulta por primera vez, Dataproc Metastore crea automáticamente una carpeta Google Cloud en tu bucket de artefactos Google Cloud . Esta carpeta se llama query-results. Después de cada ejecución exitosa de la consulta (llamada a la API), se crea una carpeta nueva dentro de la carpeta query-results (que se denomina con un UUID generado de forma aleatoria).

Cada carpeta nueva contiene un archivo result manifest con los resultados de tu búsqueda. La ubicación de esta carpeta se devuelve en la respuesta de la llamada a la API.

Por ejemplo, en la respuesta, el campo resultManifestUri contiene la ubicación del archivo.

"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"
  }

El resultado del archivo result manifest es similar al siguiente:

{
  "status": {
    "code": 0,
    "message": "Query results are successfully uploaded to cloud storage",
    "details": []
  },
  "filenames": ["result-001"]
}

Detalles del archivo de manifiesto del resultado:

  • El campo status muestra si la consulta se realizó correctamente o no.
  • Si la ejecución de la consulta se realiza correctamente, el campo filenames enumera todos los archivos creados. Estos archivos están en la misma carpeta que el archivo result manifest.
  • Si la consulta falló, el campo details muestra el mensaje de error.

Modifica la ubicación del recurso de tus metadatos

Esta operación te permite modificar la ubicación del recurso de una base de datos, una tabla o una partición.

Cuando ejecutas este comando, solo se actualiza el directorio principal o el recurso de metadatos correspondiente. Este comando no transfiere ningún dato existente a la nueva ubicación.

gcloud CLI

  1. Para modificar la ubicación del recurso de los metadatos, ejecuta el siguiente comando de 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

    Reemplaza lo siguiente:

    • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
    • LOCATION: Es la región Google Cloud en la que reside tu servicio de Dataproc Metastore.
    • RESOURCE_NAME: Es el nombre de la base de datos, la tabla o la partición que estás modificando.
    • LOCATION_URI: Es la nueva ruta de acceso de Cloud Storage para el contenido de RESOURCE_NAME. Este valor es la ruta a la que moverás la ubicación de tu recurso de metadatos. Esta ruta de acceso debe comenzar con gs://. Por ejemplo, gs://bucket/object.
  2. Verifica que el cambio de ubicación del recurso se haya realizado correctamente.

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud en el que reside tu servicio de Dataproc Metastore.
  • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
  • LOCATION: Es la región en la que reside tu Dataproc Metastore.
  • RESOURCE_NAME: Es el nombre de la base de datos, la tabla o la partición que modificarás.
  • LOCATION_URI: Es la nueva ruta de acceso de Cloud Storage para el contenido de RESOURCE_NAME. Este valor es la ruta a la que moverás la ubicación de tu recurso de metadatos. Esta ruta de acceso debe comenzar con gs://. Por ejemplo, gs://bucket/object.

En el siguiente ejemplo, se muestra un comando de muestra que mueve una tabla llamada test-table2 a un nuevo bucket de 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

Cómo modificar las propiedades de la tabla

Esta operación te permite modificar las propiedades de una tabla, como un par clave-valor personalizado que usas para almacenar datos. Por ejemplo, puedes cambiar un par clave-valor de properties.customerID_1 a properties.customerID_2.

gcloud CLI

  1. Para modificar las propiedades de una tabla, ejecuta el siguiente comando 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

    Reemplaza lo siguiente:

    • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
    • LOCATION: Es la región Google Cloud en la que reside tu servicio de Dataproc Metastore.
    • TABLE_NAME: Es el nombre de la tabla que contiene las propiedades que modificarás en el siguiente formato: databases/{database_id}/tables/{table_id}.
    • UPDATE_MASK: Son los valores de propiedad existentes que estás actualizando. Usa una lista separada por comas para describir los pares clave-valor, por ejemplo, properties.1,properties.2,properties.3,....
    • PROPERTIES: Son las propiedades nuevas de tu tabla. Usa una lista separada por comas para describir los pares clave-valor. Por ejemplo, a=1,b=2,c=3,... Los valores que se indican aquí reemplazan los valores de 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

Reemplaza lo siguiente:

  • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
  • LOCATION: Es la región Google Cloud en la que reside tu servicio de Dataproc Metastore.
  • TABLE_NAME: Es el nombre de la tabla que contiene las propiedades que modificarás en el siguiente formato: databases/{database_id}/tables/{table_id}.
  • UPDATE_MASK: Son los valores de propiedad existentes que estás actualizando. Usa una lista separada por comas para describir los pares clave-valor, por ejemplo, properties.1,properties.2,properties.3,....
  • PROPERTIES: Son las propiedades nuevas de tu tabla. Usa una lista separada por comas para describir los pares clave-valor, por ejemplo, a=1,b=2,c=3,.... Los valores que se enumeran aquí anulan los valores de UPDATE_MASK.

En el siguiente ejemplo, se muestra un comando de muestra que modifica las propiedades de una tabla llamada test-table. En este ejemplo, el par clave-valor existente, properties.customerID_1, se actualiza al nuevo valor 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

Cómo mover una tabla a otra base de datos

Esta operación te permite mover una tabla interna (tabla administrada) a otra base de datos. En este caso, se mueven tanto el directorio principal de la base de datos como sus datos.

No puedes mover los datos almacenados en tablas externas.

gcloud CLI

  1. Para mover una tabla a otra base de datos, ejecuta el siguiente comando 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

    Reemplaza lo siguiente:

    • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
    • LOCATION: Es la región de Google Cloud en la que reside tu servicio de Dataproc Metastore.
    • DB_NAME: Es el nombre de la base de datos de origen que contiene la tabla que deseas mover.
    • TABLE_NAME: Es el nombre de la tabla que deseas mover.
    • DESTINATION_DB_NAME: Es el nombre de la nueva base de datos a la que deseas mover la tabla.
  2. Verifica que el cambio de tabla se haya realizado correctamente.

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el Google Cloud ID del proyecto en el que reside tu servicio de Dataproc Metastore.
  • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
  • LOCATION: Es la región en la que reside tu Dataproc Metastore.
  • DB_NAME: Es el nombre de la base de datos de origen que contiene la tabla que deseas mover.
  • TABLE_NAME: Es el nombre de la tabla que deseas mover.
  • DESTINATION_DB_NAME: Es el nombre de la nueva base de datos a la que deseas mover la tabla.

En el siguiente ejemplo, se muestra un comando de muestra que mueve una base de datos llamada testdb1 a otra base de datos llamada 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

¿Qué sigue?