Todos los productos
Search
Centro de documentos

Hologres:Access OSS data with Hive Metastore

Última actualización: Sep 15, 2026

A partir de la versión V2.2, Hologres admite Hive Metastore (HMS) como origen de metadatos para los data lakes construidos sobre Object Storage Service (OSS). Si su data lake se ejecuta en un clúster de E-MapReduce (EMR) con OSS u OSS-HDFS como capa de almacenamiento, conecte Hologres a HMS para consultar los datos de OSS directamente mediante SQL, sin necesidad de migrar ni copiar información.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • El servicio OSS activado. Consulte Console quick start.

  • Un data lake cluster de EMR con datos de prueba cargados. Consulte 在EMR Hive或Spark中访问OSS-HDFS y Create a cluster. El clúster debe cumplir todas las condiciones siguientes:

    • Hive versión 3.1.3 o posterior

    • Autenticación Kerberos deshabilitada

    • Metadata configurado como Self-managed RDS o Built-in MySQL

  • Una instancia de Hologres con la aceleración de data lake habilitada y una base de datos creada. Consulte Purchase a Hologres instance y Create a database.

    Para habilitar la aceleración de data lake, vaya a la consola de Hologres. En la columna Actions de la instancia de destino, haga clic en Lake Acceleration y confirme.
  • Una conexión de red entre Hologres y el clúster de EMR. Dado que Hologres se despliega en una red clásica y EMR se ejecuta en una virtual private cloud (VPC), se requiere un endpoint inverso para que ambos servicios se comuniquen. Envíe una solicitud de conexión de red. A continuación, el equipo de soporte de Hologres le guiará por los pasos siguientes:

    1. Inicie sesión en la consola de VPC y cree un endpoint inverso. Consulte Access Alibaba Cloud services.

    2. Para el parámetro Type, seleccione Other Endpoint Services e introduzca el nombre del servicio de endpoint correspondiente a la región donde se ubica su clúster de EMR:

      Región

      Nombre del servicio de endpoint

      China (Beijing)

      com.aliyuncs.privatelink.cn-beijing.epsrv-2zeokrydzjd6kx3cbwmb

      China (Shanghai)

      com.aliyuncs.privatelink.cn-shanghai.epsrv-uf61fvlfwta7f7dv9n3x

      China (Zhangjiakou)

      com.aliyuncs.privatelink.cn-zhangjiakou.epsrv-8vbno4k4wwvys0eg2swp

    Si su región no aparece en la lista, el equipo de Hologres creará un servicio de endpoint y le proporcionará el nombre después de que envíe la solicitud. La conexión utiliza una dirección IP. Si la dirección IP del clúster de EMR cambia, vuelva a configurar la conexión.

Limitaciones

  • Las instancias secundarias de solo lectura de Hologres no admiten la aceleración de data lake.

  • Los comandos UPDATE, DELETE y TRUNCATE no son compatibles con las tablas externas.

  • No se admite Auto Load (mapeo por lotes de tablas externas desde HMS).

  • No se admiten los clústeres de EMR con autenticación Kerberos habilitada.

Conexión de Hologres a HMS

Hologres ofrece dos formas de conectarse a HMS. Elija una según la versión de su instancia y el nivel de control que necesite sobre el mapeo de columnas.

  • Método 1: base de datos externa (recomendado). Requiere Hologres V3.0 o posterior. Una base de datos externa mapea de forma simultánea cada base de datos y tabla de HMS a una base de datos externa, un esquema y una tabla externa en Hologres. De este modo, usted consulta los datos con un nombre de tres partes en lugar de crear una tabla externa a la vez.

  • Método 2: hive_fdw. Utilice este método en Hologres V2.2 o posterior, pero anterior a V3.0, o cuando necesite mapear un subconjunto de columnas o cambiar el nombre de las tablas.

Método 1: uso de una base de datos externa (recomendado)

  1. Conéctese a su instancia de Hologres y cree la base de datos externa. Este paso requiere permisos de superusuario.

    Para consultar la sintaxis completa, consulte CREATE EXTERNAL DATABASE.

    CREATE EXTERNAL DATABASE <EXTERNAL_DATABASE_NAME>
      owner '<ACCOUNT_NAME>'
      metastore_type 'hms'
      catalog_type 'hive'
      hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>'
      metadata_cache_ttl_sec '600'
      metadata_cache_update_interval_sec '60'
      metadata_refresh_interval_sec '7200'
      oss_endpoint 'oss-<REGION_ID>-internal.aliyuncs.com'
      table_count_limitation_per_schema '2000'
      comment '<EXTERNAL_DATABASE_COMMENT>';

    Parameter

    Description

    Example

    external_database_name

    Nombre de la base de datos externa.

    catalog_hive

    owner

    Cuenta de Hologres propietaria de la base de datos externa.

    p4_<ACCOUNT_ID>

    metastore_type

    Tipo de servicio de metadatos. Establezca hms para Hive Metastore.

    hms

    catalog_type

    Tipo de catálogo. Establezca hive para un catálogo de Hive.

    hive

    hive_metastore_uris

    URI de Hive Metastore. Formato: thrift://<HIVE_METASTORE_IP>:<PORT>. El puerto predeterminado es 9083.

    thrift://10.0.0.1:9083

    metadata_cache_ttl_sec

    Opcional. Tiempo durante el cual los metadatos almacenados en caché permanecen válidos, en segundos.

    600 (default)

    metadata_cache_update_interval_sec

    Opcional. Intervalo entre las actualizaciones de la caché de metadatos, en segundos.

    60 (default)

    metadata_refresh_interval_sec

    Opcional. Intervalo entre las actualizaciones completas de metadatos, en segundos.

    7200 (default)

    oss_endpoint

    Endpoint de OSS. Para OSS nativo, utilice el endpoint interno para obtener un mejor rendimiento.

    oss-cn-beijing-internal.aliyuncs.com

    table_count_limitation_per_schema

    Opcional. Número máximo de tablas cargadas por esquema.

    2000 (default)

    comment

    Opcional. Descripción de la base de datos externa.

    holo-emr-hive

    Los intervalos de caché y el límite de tablas anteriores son valores de ejemplo. Ajústelos según la frecuencia de actualización de sus metadatos y la cantidad de tablas en HMS.
  2. (Opcional) Cree un mapeo de usuarios.

    Un mapeo de usuarios proporciona las credenciales que utiliza una cuenta específica de Hologres para leer datos de OSS. Para más detalles, consulte CREATE USER MAPPING.

    CREATE USER MAPPING FOR <ACCOUNT_NAME>
    EXTERNAL DATABASE <EXTERNAL_DATABASE_NAME>
    OPTIONS (
      oss_access_id  '<ACCESS_KEY_ID>',
      oss_access_key '<ACCESS_KEY_SECRET>'
    );
  3. Consulte las tablas externas.

    Una vez creada la base de datos externa, haga referencia a cualquier tabla mediante un nombre de tres partes: base de datos externa, base de datos de Hive y tabla de Hive.

    Tabla sin particiones:

    SELECT *
    FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_TABLE_NAME>;

    Tabla con particiones: filtre por la clave de partición en la cláusula WHERE.

    SELECT *
    FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_PARTITION_TABLE_NAME>
    WHERE <PARTITION_KEY> = '<PARTITION_VALUE>';

Método 2: uso de hive_fdw

Paso 1: creación de la extensión

Ejecute el siguiente comando SQL para instalar el foreign data wrapper (FDW) hive_fdw. Esta operación requiere permisos de superusuario y solo es necesario ejecutarla una vez por base de datos.

CREATE EXTENSION IF NOT EXISTS hive_fdw;

Paso 2: creación de un servidor externo

Cree un servidor externo que apunte a su instancia de HMS y al almacenamiento de OSS.

Antes de ejecutar el comando, recopile los valores siguientes:

  • Dirección IP de HMS: en la consola de E-MapReduce, haga clic en Node Management para su clúster. En la pestaña Node Management, busque la Internal IP del nodo maestro.

  • Endpoint de OSS: en la consola de OSS, abra la página de descripción general del bucket y revise el área Access Ports.

CREATE SERVER IF NOT EXISTS <SERVER_NAME> FOREIGN DATA WRAPPER hive_fdw
OPTIONS (
  hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>',
  oss_endpoint '<OSS_ENDPOINT>'
);

Parameter

Required

Description

Example

server_name

Sí

Un nombre personalizado para el servidor externo.

hive_server

hive_metastore_uris

Sí

La URI de Hive Metastore. Formato: thrift://<HIVE_METASTORE_IP>:<PORT>. El puerto predeterminado es 9083.

thrift://172.16.0.250:9083

oss_endpoint

Sí

El endpoint de OSS. Para OSS nativo, utilice el endpoint interno para obtener un mejor rendimiento. Para OSS-HDFS, solo se admite el endpoint interno.

Consulte los ejemplos siguientes

Para oss_endpoint, elija la opción adecuada según su tipo de almacenamiento:

  • OSS nativo: utilice el endpoint interno.

    oss-cn-shanghai-internal.aliyuncs.com
  • OSS-HDFS: solo se admite el acceso por red interna.

    <BUCKET_NAME>.cn-beijing.oss-dls.aliyuncs.com

Paso 3: (Opcional) creación de un mapeo de usuarios

Un mapeo de usuarios controla qué cuentas de Hologres pueden acceder a datos externos a través de un servidor externo. Por ejemplo, el propietario de un servidor externo puede otorgar a un usuario de Resource Access Management (RAM) acceso a los datos de OSS.

Para más detalles sobre la sintaxis de CREATE USER MAPPING, consulte la documentación de PostgreSQL.

-- Grant the current user access to the foreign server
CREATE USER MAPPING FOR current_user SERVER <SERVER_NAME> OPTIONS (
  dlf_access_id  '<ACCESS_KEY_ID>',
  dlf_access_key '<ACCESS_KEY_SECRET>',
  oss_access_id  '<ACCESS_KEY_ID>',
  oss_access_key '<ACCESS_KEY_SECRET>'
);

-- Grant a RAM user (123xxx) access to the foreign server
CREATE USER MAPPING FOR "p4_123xxx" SERVER <SERVER_NAME> OPTIONS (
  dlf_access_id  '<ACCESS_KEY_ID>',
  dlf_access_key '<ACCESS_KEY_SECRET>',
  oss_access_id  '<ACCESS_KEY_ID>',
  oss_access_key '<ACCESS_KEY_SECRET>'
);

-- Remove user mappings
DROP USER MAPPING FOR CURRENT_USER SERVER <SERVER_NAME>;
DROP USER MAPPING FOR "p4_123xxx" SERVER <SERVER_NAME>;

Paso 4: creación de una tabla externa

Hologres proporciona dos comandos para crear tablas externas:

Command

Best for

CREATE FOREIGN TABLE

Recomendado para un número reducido de tablas, o cuando necesita mapear un subconjunto de columnas o asignar un nombre de tabla personalizado.

IMPORT FOREIGN SCHEMA

Diseñado para el mapeo por lotes de varias tablas desde un esquema externo.

Hologres admite tablas con particiones en OSS. Los tipos de clave de partición compatibles son TEXT, VARCHAR e INT.
Con CREATE FOREIGN TABLE : defina los campos de partición como columnas normales, ya que este comando mapea el esquema sin almacenar datos.
Con IMPORT FOREIGN SCHEMA : el sistema gestiona el mapeo de campos automáticamente.
Si el nombre de una tabla externa entra en conflicto con una tabla interna existente de Hologres, IMPORT FOREIGN SCHEMA omite dicha tabla. Utilice CREATE FOREIGN TABLE para mapearla con un nombre distinto.
-- Create a single foreign table
CREATE FOREIGN TABLE <HOLO_SCHEMA_NAME>.<TABLE_NAME>
(
  column_name data_type
  [, ...]
)
SERVER <SERVER_NAME>
OPTIONS (
  schema_name '<HIVE_DATABASE_NAME>',
  table_name  '<HIVE_TABLE_NAME>'
);

-- Import multiple foreign tables in batch
IMPORT FOREIGN SCHEMA <HIVE_DATABASE_NAME>
[
  { LIMIT TO | EXCEPT }
  ( table_name [, ...] )
]
FROM SERVER <SERVER_NAME>
INTO <HOLO_SCHEMA_NAME>
OPTIONS (
  if_table_exist        'update',
  if_unsupported_type   'error'
);

Paso 5: consulta de la tabla externa

Después de crear la tabla externa, consúltela directamente para leer los datos de OSS.

Tabla sin particiones:

SELECT * FROM <HOLO_SCHEMA_NAME>.<TABLE_NAME>;

Tabla con particiones:

SELECT * FROM <HOLO_SCHEMA_NAME>.<PARTITION_TABLE_NAME>
WHERE <PARTITION_KEY> = '<PARTITION_VALUE>';