Todos os produtos
Search
Central de documentação

Hologres:Access OSS data with Hive Metastore

Última atualização: Sep 12, 2026

A partir da versão V2.2, o Hologres suporta o Hive Metastore (HMS) como source de metadados para data lakes construídos no Object Storage Service (oss). Se o seu data lake for executado em um cluster E-MapReduce (EMR) com oss ou OSS-HDFS como camada de armazenamento, conecte o Hologres ao HMS para consultar dados do oss diretamente via SQL, sem necessidade de migrar ou copiar dados.

Pré-requisitos

Antes de começar, verifique se você possui:

  • O service oss ativado. Consulte Console quick start.

  • Um data lake cluster do EMR com dados de teste carregados. Consulte 在EMR Hive或Spark中访问OSS-HDFS e Create a cluster. O cluster deve atender a todas as condições abaixo:

    • Hive versão 3.1.3 ou posterior

    • Autenticação Kerberos desativada

    • Metadata definido como Self-managed RDS ou Built-in MySQL

  • Uma instância do Hologres com aceleração de data lake ativada e um banco de dados criado. Consulte Purchase a Hologres instance e Create a database.

    Para ativar a aceleração de data lake, acesse o console do Hologres. Na coluna Actions da instância desejada, clique em Lake Acceleration e confirme.
  • Uma conexão de rede entre o Hologres e o cluster EMR. Como o Hologres é implantado em uma rede clássica e o EMR opera em uma Virtual Private Cloud (VPC), é necessário um endpoint reverso para que os dois services se comuniquem. Envie uma solicitação de conexão de rede. A equipe de suporte do Hologres orientará você nas etapas a seguir:

    1. Faça login no console da VPC e crie um endpoint reverso. Consulte Access Alibaba Cloud services.

    2. No parâmetro Type, selecione Other Endpoint Services e insira o nome do service de endpoint correspondente à região onde seu cluster EMR está localizado:

      Região

      Nome do service 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

    Caso sua região não esteja listada, a equipe do Hologres criará um service de endpoint e fornecerá o nome após o envio da solicitação. A conexão utiliza um endereço ip. Se o endereço ip do cluster EMR mudar, reconfigure a conexão.

Limitações

  • Instâncias secundárias do Hologres somente leitura não suportam aceleração de data lake.

  • Os comandos UPDATE, DELETE e TRUNCATE não são suportados em tabelas externas.

  • O recurso Auto Load (mapeamento em lote de tabelas externas a partir do HMS) não é suportado.

  • Clusters EMR com autenticação Kerberos ativada não são suportados.

Conecte o Hologres ao HMS

O Hologres oferece duas formas de conexão com o HMS. Escolha uma delas com base na versão da sua instância e no nível de controle necessário sobre o mapeamento de colunas.

  • Método 1: banco de dados externo (recomendado). Requer Hologres V3.0 ou posterior. Um banco de dados externo mapeia todos os bancos de dados e tabelas do HMS para um banco de dados externo, schema e tabela externa no Hologres simultaneamente. Isso permite consultar dados com um nome composto por três partes, em vez de criar uma tabela externa por vez.

  • Método 2: hive_fdw. Utilize esta opção no Hologres V2.2 ou posterior, mas anterior à V3.0, ou quando for necessário mapear apenas um subconjunto de colunas ou renomear tabelas.

Método 1: Use um banco de dados externo (recomendado)

  1. Conecte-se à sua instância do Hologres e crie o banco de dados externo. Esta etapa requer permissões de superusuário.

    Para a sintaxe 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>';

    Parâmetro

    Descrição

    Exemplo

    external_database_name

    Nome do banco de dados externo.

    catalog_hive

    owner

    Conta do Hologres proprietária do banco de dados externo.

    p4_<ACCOUNT_ID>

    metastore_type

    Tipo de service de metadados. Defina como hms para Hive Metastore.

    hms

    catalog_type

    Tipo de catálogo. Defina como hive para um catálogo Hive.

    hive

    hive_metastore_uris

    URI do Hive Metastore. Formato: thrift://<HIVE_METASTORE_IP>:<PORT>. A porta padrão é 9083.

    thrift://10.0.0.1:9083

    metadata_cache_ttl_sec

    Opcional. Tempo de validade dos metadados em cache, em segundos.

    600 (default)

    metadata_cache_update_interval_sec

    Opcional. Intervalo entre atualizações do cache de metadados, em segundos.

    60 (default)

    metadata_refresh_interval_sec

    Opcional. Intervalo entre atualizações completas de metadados, em segundos.

    7200 (default)

    oss_endpoint

    Endpoint do oss. Para oss nativo, utilize o endpoint interno para melhor desempenho.

    oss-cn-beijing-internal.aliyuncs.com

    table_count_limitation_per_schema

    Opcional. Número máximo de tabelas carregadas por schema.

    2000 (default)

    comment

    Opcional. Descrição do banco de dados externo.

    holo-emr-hive

    Os intervalos de cache e o limite de tabelas acima são valores de exemplo. Ajuste-os conforme a frequência de atualização dos seus metadados e a quantidade de tabelas no HMS.
  2. (Opcional) Crie um mapeamento de usuário.

    Um mapeamento de usuário fornece as credenciais que uma determinada conta do Hologres utiliza para ler dados do oss. Para mais detalhes, 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 as tabelas externas.

    Após a criação do banco de dados externo, referencie qualquer tabela usando um nome composto por três partes: banco de dados externo, banco de dados Hive e tabela Hive.

    Tabela não particionada:

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

    Tabela particionada: filtre pela chave de partição na cláusula WHERE.

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

Método 2: Use hive_fdw

Etapa 1: Crie a extensão

Execute o comando SQL a seguir para instalar o foreign data wrapper (FDW) hive_fdw. Esta operação exige permissões de superusuário e precisa ser executada apenas uma vez por banco de dados.

CREATE EXTENSION IF NOT EXISTS hive_fdw;

Etapa 2: Crie um servidor externo

Crie um servidor externo que aponte para sua instância do HMS e para o armazenamento no oss.

Antes de executar o comando, reúna os seguintes valores:

  • Endereço ip do HMS: No console do E-MapReduce, clique em Node Management referente ao seu cluster. Na aba Node Management, localize o Internal IP do nó mestre.

  • Endpoint do oss: No console do oss, abra a página de visão geral do bucket e verifique a á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>'
);

Parâmetro

Obrigatório

Descrição

Exemplo

server_name

Sim

Nome personalizado para o servidor externo.

hive_server

hive_metastore_uris

Sim

URI do Hive Metastore. Formato: thrift://<HIVE_METASTORE_IP>:<PORT>. A porta padrão é 9083.

thrift://172.16.0.250:9083

oss_endpoint

Sim

Endpoint do oss. Para oss nativo, use o endpoint interno para obter melhor desempenho. Para OSS-HDFS, apenas o endpoint interno é suportado.

Veja os exemplos abaixo

Para oss_endpoint, escolha a opção adequada ao seu tipo de armazenamento:

  • oss Nativo: Utilize o endpoint interno.

    oss-cn-shanghai-internal.aliyuncs.com
  • OSS-HDFS: Apenas o acesso via rede interna é suportado.

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

Etapa 3: (Opcional) Crie um mapeamento de usuário

O mapeamento de usuário controla quais contas do Hologres podem acessar dados externos por meio de um servidor externo. Por exemplo, o proprietário de um servidor externo pode conceder a um usuário do Resource Access Management (ram) acesso aos dados no oss.

Para detalhes sobre a sintaxe do CREATE USER MAPPING, consulte a documentação do 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>;

Etapa 4: Crie uma tabela externa

O Hologres disponibiliza dois comandos para criar tabelas externas:

Comando

Mais indicado para

CREATE FOREIGN TABLE

Um pequeno número de tabelas, ou quando é necessário mapear um subconjunto de colunas ou atribuir um nome personalizado à tabela.

IMPORT FOREIGN SCHEMA

Mapeamento em lote de múltiplas tabelas a partir de um schema externo.

O Hologres suporta tabelas particionadas no oss. Os tipos de chave de partição suportados são TEXT, VARCHAR e INT.
Ao utilizar CREATE FOREIGN TABLE : defina os campos de partição como colunas regulares, pois este comando mapeia o schema sem armazenar dados.
Com o comando IMPORT FOREIGN SCHEMA : o sistema mapeia os campos automaticamente.
Se o nome de uma tabela externa entrar em conflito com uma tabela interna existente no Hologres, o IMPORT FOREIGN SCHEMA ignorará essa tabela. Utilize o CREATE FOREIGN TABLE para mapeá-la com um nome diferente.
-- 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'
);

Etapa 5: Consulte a tabela externa

Após criar a tabela externa, consulte-a diretamente para ler dados do oss.

Tabela não particionada:

SELECT * FROM <HOLO_SCHEMA_NAME>.<TABLE_NAME>;

Tabela particionada:

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