A aceleração de data lake do Hologres, baseada no Alibaba Cloud Data Lake Formation (DLF) 1.0 e no Object Storage Service (OSS), permite consultar arquivos de data lake do OSS diretamente no Hologres por meio de tabelas externas, sem ingestão de dados. Este tópico explica como configurar o acesso ao DLF 1.0 e ler dados do OSS no Hologres. Para gravar dados do Hologres no OSS, consulte Exportar para um data lake.
Somente o DLF 1.0 (DLF-Legacy) oferece suporte à aceleração de data lake do OSS. A nova versão do DLF não inclui esse recurso.
Visão geral
A configuração do acesso ao lake baseado em DLF envolve seis etapas:
Ativar o DLF_FDW — ative o backend do foreign data wrapper na instância
Criar a extensão — carregue o plugin DLF FDW em cada banco de dados de destino
Criar um servidor externo — informe ao Hologres a localização do DLF 1.0 e do OSS
(Opcional) Criar um mapeamento de usuário — delegue o acesso a uma identidade específica de usuário RAM
Criar tabelas externas — mapeie as tabelas de metadados do DLF 1.0 para o Hologres
Consultar dados — execute SQL padrão nos arquivos de lake do OSS
Pré-requisitos
Antes de começar, verifique se você tem:
DLF 1.0 ativado. Para mais detalhes, consulte Início rápido e Regiões e endpoints suportados.
OSS ativado com seus dados prontos. Para mais detalhes, consulte Introdução ao OSS.
Autorização do OSS configurada. A conta usada para consultar tabelas externas deve ter permissões de acesso ao OSS; caso contrário, as consultas falharão mesmo que a tabela externa seja criada com sucesso. Para mais detalhes, consulte Bucket Policy (Java SDK V1).
(Opcional) Serviço OSS-HDFS habilitado, se você planeja usar o OSS-HDFS como camada de armazenamento. Para mais detalhes, consulte Habilitar o OSS-HDFS.
Limitações
Limitações de leitura
Tabelas externas não aceitam
UPDATE,DELETEnemTRUNCATE.A aceleração de data lake não é compatível com instâncias secundárias somente leitura.
As consultas carregam as partições correspondentes na memória do Hologres durante a execução. O volume de dados por consulta é limitado a 200 GB após a filtragem de partições.
O comando
IMPORT FOREIGN SCHEMAaceita até 512 partições por consulta. Adicione condições de filtro de partição para manter cada consulta dentro desse limite.
Limitações de gravação
Apenas
INSERT INTOé suportado ao exportar dados do Hologres para o OSS. Os comandosINSERT ON CONFLICT,UPDATEeDELETEnão são suportados.Gravar dados no OSS requer o Hologres V1.3 ou posterior. Apenas os formatos ORC, Parquet, CSV e SequenceFile são suportados.
Configurar o ambiente
Etapa 1: Ativar o DLF_FDW
O DLF_FDW é o foreign data wrapper (FDW) que conecta o Hologres ao DLF 1.0 e ao OSS. Ative-o no console do Hologres para permitir a comunicação da instância com o DLF.
No console do Hologres, acesse a página Instances ou Instance Details. Na coluna Actions da instância desejada, clique em Data Lake Acceleration e confirme a operação. O sistema configura automaticamente o DLF_FDW e reinicia a instância em segundo plano. O recurso estará disponível após a conclusão da reinicialização.
Ao ativar o DLF_FDW, o sistema utiliza recursos padrão (1 núcleo e 4 GB de memória). Não é necessário adquirir recursos adicionais.
O Hologres está implementando gradualmente a configuração self-service do DLF_FDW no console. Se o botão Data Lake Acceleration não estiver visível, siga as instruções em Erros comuns de preparação de atualização ou entre em contato com o suporte pelo grupo DingTalk do Hologres. Para mais detalhes, consulte Como obter suporte online? .
Etapa 2: Criar a extensão
Um Superuser deve executar a seguinte instrução uma vez por banco de dados para carregar o plugin DLF FDW. Isso permite que o Hologres leia dados do OSS por meio do DLF 1.0.
CREATE EXTENSION IF NOT EXISTS dlf_fdw;
Etapa 3: Criar um servidor externo
O objeto de servidor externo informa ao Hologres onde o DLF 1.0 e o OSS estão localizados e como autenticar. Um Superuser deve criá-lo — contas sem privilégios de Superuser resultarão em erros de permissão.
O DLF 1.0 suporta múltiplos catálogos. Se você tiver um único cluster EMR, use o catálogo padrão. Caso possua vários clusters EMR, utilize um catálogo personalizado para controlar a qual cluster o Hologres se conectará.
Escolha o tipo de armazenamento correspondente à sua configuração:
Armazenamento nativo do OSS (catálogo padrão)
-- View existing servers.
-- meta_warehouse_server and odps_server are built-in system servers and cannot be modified or deleted.
SELECT * FROM pg_foreign_server;
-- Drop an existing server if needed.
DROP SERVER <server_name> CASCADE;
-- Create a server using the DLF 1.0 default catalog and native OSS.
CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
dlf_region '<region_id>',
dlf_endpoint 'dlf-share.<region_id>.aliyuncs.com',
oss_endpoint 'oss-<region_id>-internal.aliyuncs.com'
);
Armazenamento OSS-HDFS
O OSS-HDFS suporta apenas acesso via rede interna. Encontre o nome de domínio do bucket na página Overview do seu bucket com OSS-HDFS habilitado no console do OSS.

Após confirmar o nome de domínio, crie o servidor:
CREATE EXTENSION IF NOT EXISTS dlf_fdw;
CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
dlf_region '<region_id>',
dlf_endpoint 'dlf-share.<region_id>.aliyuncs.com',
oss_endpoint '<bucket_name>.<region_id>.oss-dls.aliyuncs.com'
);
Parâmetros
|
Parâmetro |
Descrição |
Exemplo |
|
|
Nome personalizado para o servidor externo |
|
|
|
Região onde o DLF 1.0 está implantado. Consulte a lista de regiões abaixo. |
|
|
|
Endpoint interno do DLF 1.0. Padrão: |
|
|
|
Endpoint interno do OSS (OSS nativo) ou domínio do OSS-HDFS (OSS-HDFS). Veja os exemplos abaixo. |
|
Regiões suportadas
|
Região |
**Valor de |
** |
|
China (Pequim) |
|
|
|
China (Hangzhou) |
|
|
|
China (Xangai) |
|
|
|
China (Shenzhen) |
|
|
|
China (Zhangjiakou) |
|
|
|
Singapura |
|
|
|
Alemanha (Frankfurt) |
|
|
|
EUA (Virgínia) |
|
|
|
Indonésia (Jacarta) |
|
|
Para OSS-HDFS, o formato de oss_endpoint é <bucket_name>.<region_id>.oss-dls.aliyuncs.com — por exemplo, cn-hangzhou.oss-dls.aliyuncs.com.
Etapa 4: Criar um mapeamento de usuário (opcional)
Um mapeamento de usuário permite que o proprietário do servidor externo conceda a uma identidade específica (como um usuário RAM) acesso ao DLF 1.0 e ao OSS. A conta mapeada deve ter permissões de consulta nos dados externos.
-- Create a user mapping for the current user.
CREATE USER MAPPING FOR current_user SERVER <server_name> OPTIONS (
dlf_access_id '<your_access_key>',
dlf_access_key '<your_access_secret>',
oss_access_id '<your_access_key>',
oss_access_key '<your_access_secret>'
);
-- Create a user mapping for a specific RAM user.
CREATE USER MAPPING FOR "p4_123xxx" SERVER <server_name> OPTIONS (
dlf_access_id '<your_access_key>',
dlf_access_key '<your_access_secret>',
oss_access_id '<your_access_key>',
oss_access_key '<your_access_secret>'
);
-- Drop user mappings.
DROP USER MAPPING FOR current_user SERVER <server_name>;
DROP USER MAPPING FOR "p4_123xxx" SERVER <server_name>;
Para obter mais informações, consulte a documentação do PostgreSQL CREATE USER MAPPING.
Ler dados do OSS
Etapa 5: Criar tabelas externas
Primeiro, crie uma tabela de metadados no DLF 1.0 e certifique-se de que os dados foram extraídos. Em seguida, crie tabelas externas no Hologres usando um dos dois métodos:
CREATE FOREIGN TABLE — cria uma única tabela externa com mapeamento manual de campos. Os campos de partição são definidos como campos regulares (nenhum dado é armazenado no Hologres).
IMPORT FOREIGN SCHEMA — cria uma ou mais tabelas externas em massa com mapeamento automático de campos.
Se uma tabela externa do OSS tiver o mesmo nome de uma tabela interna existente do Hologres, oIMPORT FOREIGN SCHEMAignorará essa tabela. Nesse caso, useCREATE FOREIGN TABLEcom um nome diferente.
Tipos de dados de chave de partição suportados: TEXT, VARCHAR e INT.
Sintaxe
-- Method 1: CREATE FOREIGN TABLE
CREATE FOREIGN TABLE [ IF NOT EXISTS ] <oss_table_name> (
<column_name> <data_type>
[, ...]
)
SERVER <server_name>
OPTIONS (
schema_name '<dlf_database_name>',
table_name '<dlf_table_name>'
);
-- Method 2: IMPORT FOREIGN SCHEMA
IMPORT FOREIGN SCHEMA <schema_name>
[ { LIMIT TO | EXCEPT } ( <table_name> [, ...] ) ]
FROM SERVER <server_name>
INTO <local_schema>
[ OPTIONS ( option 'value' [, ...] ) ];
|
Parâmetro |
Descrição |
|
|
Nome do metabanco de dados criado no DLF 1.0 |
|
|
Nome da tabela de metadados criada no DLF 1.0 |
|
|
Nome do servidor externo criado no Hologres |
|
|
Schema de destino no Hologres |
Exemplos
Crie uma única tabela externa mapeada para a tabela dlf_oss_test no metabanco de dados dlfpro do DLF 1.0:
-- Method 1: CREATE FOREIGN TABLE
CREATE FOREIGN TABLE dlf_oss_test_ext (
id text,
pt text
)
SERVER <server_name>
OPTIONS (
schema_name 'dlfpro',
table_name 'dlf_oss_test'
);
-- Method 2: IMPORT FOREIGN SCHEMA (single table, update if exists)
IMPORT FOREIGN SCHEMA dlfpro LIMIT TO (
dlf_oss_test
)
FROM SERVER <server_name> INTO public OPTIONS (if_table_exist 'update');
Importe todas as tabelas do metabanco de dados dlfpro para o schema public:
-- Import the entire database.
IMPORT FOREIGN SCHEMA dlfpro
FROM SERVER <server_name> INTO public OPTIONS (if_table_exist 'update');
-- Import specific tables only.
IMPORT FOREIGN SCHEMA dlfpro (
table1,
table2,
tablen
)
FROM SERVER <server_name> INTO public OPTIONS (if_table_exist 'update');
Etapa 6: Consultar dados
Após criar as tabelas externas, consulte-as com SQL padrão. O Hologres carrega as partições relevantes na memória no momento da consulta.
-- Non-partitioned table
SELECT * FROM dlf_oss_test;
-- Partitioned table (add a partition filter to stay within the 512-partition limit)
SELECT * FROM partition_table WHERE dt = '2013';
Solução de problemas
Erro: ERROR: babysitter not ready,req:name:"HiveAccess"
A configuração do backend DLF_FDW não foi ativada. No console do Hologres, acesse a página Instances, clique em Data Lake Acceleration e ative a configuração do backend.
Próximos passos
Para importar dados do OSS para uma tabela interna do Hologres visando melhor desempenho de consulta, consulte Importar dados de um data lake usando SQL.
Para gravar dados de uma tabela interna do Hologres em um data lake do OSS, consulte Exportar para um data lake.
Para um tutorial completo de ponta a ponta, consulte Acelerar consultas de data lake.