O Hologres V3.2 e versões posteriores suportam o acesso a dados do Data Lake Formation (DLF) Catalog por meio do Paimon REST. Após a conexão, você pode consultar tabelas Paimon diretamente do Hologres, usar time travel para inspecionar snapshots históricos, ler de branches específicas e carregar dados incrementalmente em tabelas dinâmicas.
Pré-requisitos
Antes de começar, verifique se você tem:
Um service DLF ativo com pelo menos um catalog. Consulte Grant permissions and activate DLF e Data Catalog
Uma Hologres instance com o service de aceleração do data lake ativado. A instância deve estar na mesma região que o DLF. Consulte Environment configuration
Limitações
Não há suporte para gravação em tabelas Paimon. As operações INSERT, UPDATE, DELETE e TRUNCATE não estão disponíveis.
Consultas de time travel, consultas de branch e espelhamento de dados estão disponíveis apenas para tabelas Paimon mapeadas por meio de um external database — não por meio de um foreign server.
O time travel não tem suporte em tabelas que passaram por evolução de schema, nem em tabelas dinâmicas.
O espelhamento de dados não tem suporte para tabelas Paimon com chaves primárias.
Não há suporte para leitura de partições padrão em que a chave de partição seja NULL ou vazia.
O recurso de aceleração do data lake do OSS no HoloWeb não permite criar visualmente um DLF Catalog.
O recurso de aceleração do data lake não pode ser ativado para instâncias secundárias somente leitura.
Escolha um modo de autenticação
O Hologres suporta dois modos para autenticar o acesso a um DLF Catalog:
|
Modo |
Quando usar |
|
SLR (service-linked role) |
Padrão. Use ao acessar dados sob sua identidade atual do Alibaba Cloud. O Hologres gerencia a autorização entre serviços automaticamente por meio de repasse de identidade. |
|
STS (Security Token Service) |
Indicado para acesso entre contas ou quando uma conta BASIC do Hologres precisa de acesso ao DLF. Requer uma função RAM e mapeamento explícito de usuário. |
Comece com o modo SLR, a menos que seja necessário acesso entre contas ou suporte a conta BASIC.
Mapeie um catalog usando um external database
SLR mode
Uma service-linked role (SLR) é uma função RAM que autoriza um service do Alibaba Cloud a acessar outros serviços em seu nome. O Hologres cria e gerencia a SLR automaticamente — nenhuma configuração manual de função é necessária. Consulte Service-linked role.
-
Conecte-se a uma instância do Hologres e crie um external database.
Parâmetro
Obrigatório
Descrição
catalog_typeSim
Sempre
paimonpara tabelas Paimon.metastore_typeSim
Sempre
dlf-restao conectar por meio do DLF.dlf_catalogSim
O nome do seu DLF Catalog.
commentNão
Uma descrição para o external database.
CREATE EXTERNAL DATABASE <ext_database_name> WITH catalog_type 'paimon' metastore_type 'dlf-rest' dlf_catalog '<dlf_catalog_name>' comment 'Catalog on dlf' ; -
Visualize os schemas e as tabelas do external database.
-- List schemas in the external database SELECT * FROM hologres.hg_external_schemas('<ext_database_name>'); -- List tables in a specific schema SELECT * FROM hologres.hg_external_tables('<ext_database_name>', '<ext_schema_name>'); -
Consulte os dados.
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
STS mode
O Security Token Service (STS) emite credenciais temporárias com permissões e períodos de validade configuráveis. Use este modo quando um usuário RAM ou uma conta BASIC de outra conta precisar acessar dados do DLF por meio do Hologres.
No RAM console, crie uma função RAM e atribua a permissão AliyunDLFFullAccess ou AliyunDLFReadOnlyAccess. Consulte Create a RAM role and grant permissions.
-
Edite a política de confiança da função RAM para permitir que o Hologres a assuma. Consulte Modify the trust policy of a RAM role.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "hologres.aliyuncs.com" ] } } ], "Version": "1" } No Data Lake Formation console, conceda à função RAM acesso aos bancos de dados e tabelas relevantes. Consulte Permission management.
-
No Hologres, crie um external database e referencie a função RAM.
Parâmetro
Obrigatório
Descrição
catalog_typeSim
Sempre
paimonpara tabelas Paimon.metastore_typeSim
Sempre
dlf-restao conectar por meio do DLF.dlf_catalogSim
O nome do seu DLF Catalog.
rolearnSim
O Alibaba Cloud Resource Name (ARN) da função RAM criada na etapa 1. Formato:
acs:ram::<account-id>:role/<role-name>.commentNão
Uma descrição para o external database.
CREATE EXTERNAL DATABASE <ext_database_name> WITH catalog_type 'paimon' metastore_type 'dlf-rest' dlf_catalog '<dlf_catalog_name>' rolearn 'acs:ram::106380604****:role/***-ramrole' comment 'Catalog on dlf' ; -
Crie um mapeamento de usuário para vincular o usuário RAM ou a conta BASIC à função RAM.
Para detalhes sobre mapeamentos de usuário, consulte CREATE USER MAPPING . Para criar um usuário RAM, consulte Create a RAM user . Para criar uma conta BASIC, consulte User management .
CREATE USER MAPPING FOR "<RAM_user|BASIC_account>" EXTERNAL DATABASE <ext_database_name> OPTIONS ( rolearn 'acs:ram::10638060***:role/***ramrole' ); -
Faça login como usuário RAM pelo Hologres Management Console, ou conecte-se usando a conta BASIC, e consulte os dados.
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
Acelere consultas com espelhamento de tabelas do lake
O Hologres V3.2 e versões posteriores suportam o espelhamento de tabelas do lake, que sincroniza metadados e dados de uma fonte de dados externa para o Hologres — em tempo quase real ou em intervalos agendados. O espelhamento suporta tabelas completas e partições específicas de tabelas particionadas. Consulte Lake table mirroring.
Operações de external schema
Crie um external schema
Criar um external schema cria um banco de dados correspondente no DLF Catalog.
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] <ext_database_name>.<ext_schema_name>;
Atualize os metadados do schema
REFRESH CACHE FOR EXTERNAL SCHEMA <ext_database_name>.<ext_schema_name> WITH (cache_level = 'metadata');
Exclua um external schema
Excluir um external schema remove o banco de dados correspondente e todas as suas tabelas do DLF Catalog. Essa operação não pode ser desfeita.
DROP EXTERNAL SCHEMA [IF NOT EXISTS] <ext_database_name>.<ext_schema_name>;
Liste as tabelas de um schema
SELECT * FROM hologres.hg_external_tables('<ext_database_name>', '<ext_schema_name>');
Operações de external table
Crie uma external table
-- Non-partitioned table
CREATE EXTERNAL TABLE <ext_database_name>.<ext_schema_name>.<ext_table_name>(
id TEXT,
created_at BIGINT,
type TEXT,
actor_id TEXT,
actor_login TEXT,
repo_id TEXT,
repo_name TEXT,
org TEXT,
org_login TEXT,
PRIMARY KEY(id)
) WITH (
"changelog-producer"='input',
"bucket"=6,
"bucket-key"='id'
);
-- Partitioned table
CREATE EXTERNAL TABLE <ext_database_name>.<ext_schema_name>.<ext_table_name>(
id TEXT,
created_at BIGINT,
type TEXT,
actor_id TEXT,
actor_login TEXT,
repo_id TEXT,
repo_name TEXT,
org TEXT,
org_login TEXT
)
LOGICAL PARTITION BY LIST(created_at)
WITH (
"file_format" = 'orc',
"bucket"=6,
"bucket-key"='id'
);
Atualize os metadados da tabela
REFRESH CACHE FOR EXTERNAL TABLE <ext_db_name>.<ext_schema_name>.<ext_table_name> WITH (cache_level = 'metadata');
Exclua uma external table
Excluir uma external table remove a tabela do DLF Catalog. Essa operação não pode ser desfeita.
DROP EXTERNAL TABLE IF EXISTS <ext_database_name>.<ext_schema_name>.<ext_table_name>;
Colete estatísticas da tabela
ANALYZE e AUTO ANALYZE coletam estatísticas de colunas que o otimizador de consultas usa para gerar planos de execução eficientes. Consulte ANALYZE and AUTO ANALYZE.
-- Collect statistics for all columns
ANALYZE <ext_database_name>.<ext_schema_name>.<ext_table_name>;
-- Collect statistics for specific columns (higher sample rate — use for columns with conditional filters)
ANALYZE <ext_database_name>.<ext_schema_name>.<ext_table_name>(<colname>, <colname>);
-- Enable auto-analyze for the external database
ALTER EXTERNAL DATABASE <ext_database_name> WITH enable_auto_analyze 'true';
Consultas de time travel
O Hologres V3.2 e versões posteriores suportam a consulta de snapshots históricos de tabelas Paimon. As três abordagens utilizam a sintaxe FOR ... AS OF:
-- Query by timestamp
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR TIMESTAMP AS OF '<timestamp>';
-- Query by version (version = snapshot ID for Paimon tables)
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR VERSION AS OF '<version>';
-- Query by tag
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR TAG AS OF '<tag>';
Para localizar snapshots ou tags disponíveis, consulte primeiro as tabelas de sistema do Paimon.
Consulte a tabela de sistema Snapshots
SELECT * FROM hologres.hg_list_snapshots('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
O resultado mapeia para a tabela de sistema Snapshots do Paimon da seguinte forma:
|
Campo |
Tipo |
Descrição |
Campo Paimon |
|
|
TEXT |
Nome da branch |
|
|
|
TEXT |
ID do snapshot |
|
|
|
TEXT |
ID do schema da tabela |
|
|
|
TEXT |
Tipo de commit |
|
|
|
TIMESTAMPTZ |
Horário do commit |
|
|
|
TEXT (JSON) |
Outras propriedades do snapshot Paimon |
— |
Para listar os IDs de snapshot disponíveis, use hg_list_versions:
SELECT * FROM hologres.hg_list_versions('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
Consulte a tabela de sistema Tags
SELECT * FROM hologres.hg_list_tags('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
|
Campo |
Tipo |
Descrição |
Campo Paimon |
|
|
TEXT |
Nome da branch |
|
|
|
TEXT |
Nome da tag |
|
|
|
TEXT |
ID do snapshot |
|
|
|
TEXT |
ID do schema da tabela |
|
|
|
TIMESTAMPTZ |
Horário do commit |
|
|
|
TEXT (JSON) |
Outras propriedades da tag Paimon |
— |
Consultas de branch
O Hologres V3.2 e versões posteriores suportam a consulta de dados de uma branch específica em uma tabela Paimon.
Liste as branches
SELECT * FROM hologres.hg_list_branches('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
|
Campo |
Tipo |
Descrição |
Campo Paimon |
|
|
TEXT |
Nome da branch |
|
|
|
TIMESTAMPTZ |
Horário de criação da branch |
|
|
|
TEXT (JSON) |
Outras propriedades da branch Paimon |
— |
Consulte dados de uma branch
-- Query the current state of a branch
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<branch_name>';
-- Query a historical snapshot of a branch by timestamp
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<branch_name>' TIMESTAMP AS OF '<timestamp>';
-- Query a historical snapshot of a branch by tag
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<branch_name>' TAG AS OF '<tag_name>';
Se a propriedade scan.fallback-branch estiver definida em uma tabela Paimon e uma partição estiver ausente da branch atual, o Hologres lê automaticamente essa partição da branch de fallback. Consulte Manage Branch para mais detalhes.
Acesse tabelas Paimon por meio de um foreign server
Como alternativa aos external databases, você pode usar um foreign server e foreign tables para acessar dados Paimon. Essa abordagem utiliza a interface padrão PostgreSQL foreign data wrapper (FDW).
Consultas de time travel, consultas de branch e espelhamento de dados não estão disponíveis por meio de foreign tables. Para esses recursos, utilize external databases.
-
Crie um foreign server.
CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS ( catalog_type 'paimon', metastore_type 'dlf-rest', dlf_catalog '<dlf_catalog_name>' );Para opções adicionais de server, consulte More operations on foreign servers (SQL).
-
Crie foreign tables usando um dos métodos a seguir. Opção 1: importe um schema inteiro de uma vez
IMPORT FOREIGN SCHEMA <dlf_db_name> FROM SERVER <server_name> INTO <holo_schema_name> OPTIONS (if_table_exist 'update');Consulte IMPORT FOREIGN SCHEMA. Opção 2: crie tabelas individualmente
CREATE FOREIGN TABLE <foreign_table_name> ( { column_name data_type } [, ... ] ) SERVER <server_name> OPTIONS ( schema_name '<dlf_db_name>', table_name '<dlf_table_name>' );Consulte CREATE FOREIGN TABLE.
Leia dados Paimon com tabelas dinâmicas
Uma tabela dinâmica atualiza automaticamente seu conteúdo a partir de uma ou mais tabelas base em um agendamento configurável. O Hologres V3,0 e versões posteriores suportam foreign tables do MaxCompute e foreign tables do DLF como tabelas base para tabelas dinâmicas. Consulte Dynamic table.
Os três modos de atualização utilizam a mesma estrutura CREATE DYNAMIC TABLE. O parâmetro auto_refresh_mode controla como os dados são lidos da source Paimon.
-- Full refresh: re-reads all data on each cycle
CREATE DYNAMIC TABLE paimon_dt_full
WITH (
auto_refresh_mode = 'full',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
-- Incremental refresh: reads only new or changed data
CREATE DYNAMIC TABLE paimon_dt_incremental
WITH (
auto_refresh_mode = 'incremental',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
-- Auto mode: Hologres selects full or incremental refresh based on data characteristics
CREATE DYNAMIC TABLE paimon_dt_auto
WITH (
auto_refresh_mode = 'auto',
freshness = '3 minutes'
) AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;