Um projeto externo Paimon_DLF mapeia um catálogo do Data Lake Formation (DLF) para o MaxCompute, permitindo acesso em tempo real a metadados e dados. Ele delega o gerenciamento de permissões ao DLF e suporta operações de leitura e escrita em dados no Object Storage Service (OSS) gerenciado pelo DLF, habilitando o mapeamento de data lake no nível de catálogo para colaboração entre engines baseada em Paimon. O projeto externo Paimon_DLF está atualmente em visualização por convite.
Limitações
Formato de tabela: Apenas tabelas Paimon armazenadas no OSS e totalmente gerenciadas pelo DLF são suportadas.
Limitações de escrita: Tabelas com buckets dinâmicos e tabelas entre partições não suportam
INSERT INTOouINSERT OVERWRITE.Limitações de consulta: Não é possível usar
SHOW TABLESem tabelas entre partições que possuem buckets fixos e cuja chave primária não inclui a chave de partição.Projetos externos: Não é possível executar evolução de schema ou operações de partição.
-
Outras limitações:
Não é permitido realizar operações de recursos ou funções.
Essas tabelas não podem ser usadas como fonte de dados para o DataWorks Data Integration.
Procedimento
Etapa 1: Conceder permissões
Conceder permissões a um usuário RAM
Se você for um usuário RAM, anexe as seguintes políticas de permissão. Para obter informações sobre como adicionar permissões, consulte Gerenciar permissões para um usuário RAM.
AliyunRAMFullAccess: Se um usuário RAM não tiver essa permissão, uma conta Alibaba Cloud deverá concedê-la.
AliyunMaxComputeFullAccess: Necessária para criar fontes de dados externas e projetos externos.
AliyunDLFReadOnlyAccess: Obrigatória para criar projetos externos. Esta política de permissão é necessária porque a criação de um projeto externo Paimon_DLF exige a permissão List para o catálogo DLF.
Autorizar e ativar o DLF
-
Autorizar acesso a recursos de nuvem
Na primeira vez que você usar o Data Lake Formation (DLF), será necessário autorizá-lo a acessar os recursos de nuvem exigidos.
Faça login no console do Data Lake Formation (DLF) e, no canto superior esquerdo, selecione uma região.
À direita de Permissions to access cloud resources are granted., clique em Authorize.
-
Ativar o Data Lake Formation
Selecione uma região. O MaxCompute e o DLF devem estar implantados na mesma região. Ative o DLF antes de usá-lo para garantir sua disponibilidade na região de destino.
À direita de DLF is activated., clique em Activate.
Conceder permissões do DLF ao MaxCompute
O MaxCompute acessa dados Paimon_DLF por meio de uma fonte de dados externa e um projeto externo. Antes de prosseguir, conceda as permissões de dados necessárias do DLF à conta de acesso do MaxCompute.
A opção "Use task executor identity" transmite a identidade do executor da tarefa para o DLF. Tanto o MaxCompute quanto o DLF aplicam permissões com base nessa identidade. Primeiro, crie uma função vinculada a serviço para o MaxCompute e conceda a ela as permissões necessárias:
Faça login no console do RAM.
No painel de navegação à esquerda, selecione .
Na página Roles, clique em Create Role.
No canto superior direito da página Create Role, clique em Create Service Linked Role.
-
Na página Create Service Linked Role, selecione
AliyunServiceRoleForMaxComputeLakehousepara Select Service e clique em Create Service Linked Role.Se aparecer uma mensagem informando que a função já existe, significa que ela já foi autorizada e você pode ignorar o aviso.
Modelo de permissão
-
Plano de controle: Essas permissões são verificadas quando você executa operações no console do MaxCompute, principalmente durante a criação de um projeto externo do MaxCompute e sua vinculação a um catálogo DLF.
O RAM gerencia essas permissões. Sua conta Alibaba Cloud deve fazer login no console do RAM para configurar as permissões necessárias. Para mais informações, consulte Gerenciar permissões para um usuário RAM.
-
Plano de dados: Essas permissões são verificadas quando você lê ou escreve em tabelas Paimon após fazer login no projeto externo. Isso ocorre tipicamente ao criar, manter ou usar schemas, tabelas e outros recursos dentro do catálogo DLF vinculado, executando instruções SQL no MaxCompute.
O console do DLF gerencia essas permissões. Sua conta Alibaba Cloud deve fazer login no console do DLF para configurar as permissões necessárias. Para mais informações, consulte Conceder permissões a um usuário RAM.
Etapa 2: Criar uma fonte de dados externa Paimon_DLF
Faça login no console do MaxCompute e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Na página External Data Source, clique em Create External Data Source.
-
Na caixa de diálogo Create External Data Source, configure os parâmetros. As tabelas a seguir descrevem os parâmetros.
Parâmetro
Obrigatório
Descrição
External Data Source Type
Sim
Selecione Paimon_DLF.
External Data Source Name
Sim
Insira um nome personalizado. O nome deve atender aos seguintes requisitos:
-
Deve começar com uma letra e conter apenas letras minúsculas, dígitos e sublinhados (_).
-
Não pode exceder 128 caracteres.
Por exemplo, você pode inserir
paimon_dlf.Description
Não
Insira uma descrição conforme necessário.
Region
Sim
A região atual é selecionada por padrão.
Authentication and Authorization
Sim
O valor padrão é uma função RAM da Alibaba Cloud.
Service-linked Role
Sim
A função é gerada por padrão.
Endpoint
Sim
O endpoint é gerado automaticamente. Para a região China (Hangzhou), o endpoint é
cn-hangzhou-intranet.dlf.aliyuncs.com.Foreign Server Supplemental Properties
Não
Essas propriedades definem como as tarefas que usam esta fonte de dados acessam o sistema de origem.
NotaPara informações sobre parâmetros suportados, consulte futuras atualizações da documentação oficial. Os parâmetros disponíveis serão expandidos conforme o produto evoluir.
-
Clique em OK para criar a fonte de dados externa.
Na página External Data Source, localize a fonte de dados e clique em Details na coluna Actions para visualizar seus detalhes.
Etapa 3: Criar um projeto externo
Faça login no console do MaxCompute e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Na aba External Project, clique em Create Project.
-
Na caixa de diálogo Create Project, configure as definições e clique em OK.
Parâmetro
Obrigatório
Descrição
Project Type
Sim
O valor padrão é External Project.
Region
Sim
A região atual é selecionada por padrão e não pode ser alterada.
Project Name (Globally Unique)
Sim
O nome deve ter entre 3 e 28 caracteres, começar com uma letra e conter apenas letras, dígitos e sublinhados (_).
MaxCompute Foreign Server Type
Não
O valor padrão é Paimon_DLF.
MaxCompute Foreign Server
Não
-
Use Existing: Exibe uma lista de fontes de dados externas existentes.
-
Create Foreign Server: Permite criar e usar uma nova fonte de dados externa.
MaxCompute Foreign Server Name
Sim
-
Se você optou por usar uma fonte de dados existente, selecione seu nome na lista suspensa.
-
Se você optou por criar uma nova fonte de dados, seu nome será usado automaticamente.
Data Catalog
Sim
O catálogo de dados do DLF.
Billing Method
Sim
Selecione Subscription ou Pay-as-you-go.
Default Quota
Sim
Selecione uma cota existente.
Description
Não
Insira uma descrição personalizada do projeto.
-
Etapa 4: Usar SQL para acessar a fonte de dados
Excluir um projeto externo não apaga os dados subjacentes, pois o projeto é apenas um mapeamento para a fonte de dados.
No entanto, diferentemente das tabelas externas padrão, executar um comando DROP TABLE ou DROP SCHEMA em um projeto externo envia a solicitação ao serviço par. Isso exclui permanentemente a tabela ou banco de dados correspondente. Use operações DROP com cautela.
-
Escolha uma ferramenta de conexão para fazer login no projeto externo.
O exemplo a seguir usa um nó SQL para desenvolvimento de dados em um workspace do DataWorks (nova versão).
Faça login no console do DataWorks e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha Workspace.
Na página Workspaces, clique em Create Workspace ou clique no nome de um workspace existente.
Na página Workspace Details, clique em Computing Resource no painel de navegação à esquerda.
Na página Computing Resource, clique em Associate Computing Resources e selecione MaxCompute.
-
Configure as Basic Information para Associate MaxCompute Computing Resource.
Para o projeto MaxCompute, selecione o projeto externo.
-
Liste os schemas no projeto externo.
-- Enable schema syntax at the session level. SET odps.namespace.schema=true; SHOW schemas; -- Sample result. ID = 20250919****am4qb default system OK -
Liste as tabelas em um schema dentro do projeto externo.
Se precisar acessar tabelas de um projeto externo de produção no ambiente atual, adicione
use external_project_pro;antes de todas as instruções SQL.-- schema_name is the schema name returned by SHOW SCHEMAS in the external project. SET odps.namespace.schema=true; USE schema <schema_name>; SHOW tables; -- Result ID = 20250919****am4qb acs:ram::<uid>:root emp OK -
Crie um novo schema no projeto externo.
-- In this example, schema_name is schema_demo_test. CREATE schema <schema_name>; -
Use o novo schema.
USE schema <schema_name>; -
Crie uma tabela e insira dados no schema.
Se estiver conectado como um usuário RAM, esta operação requer permissões no catálogo DLF. Para obter informações sobre como conceder permissões, consulte Gerenciamento de autorização de dados.
-
Formato do comando:
-- Create a table. CREATE TABLE [IF NOT EXISTS] <table_name> ( <col_name> <data_type>, ... ) [COMMENT <table_comment>] [PARTITIONED BY (<col_name> <data_type>, ...)] ; -- Insert data. INSERT {INTO|OVERWRITE} TABLE <table_name> [PARTITION (<pt_spec>)] [(<col_name> [,<col_name> ...)]] <select_statement> FROM <from_statement> -
Exemplo:
NotaPara tipos TIMESTAMP de baixa precisão da tabela Paimon de origem, os dados são truncados durante operações de escrita da seguinte forma: precisão 0–3 é truncada para 3 casas decimais, 4–6 para 6 casas decimais e 7–9 para 9 casas decimais.
CREATE TABLE schema_table(id int,name string); INSERT INTO schema_table VALUES (101,'Zhang San'),(102,'Li Si'); -- Query the schema_table table. SELECT * FROM schema_table; -- Result +------------+------------+ | id | name | +------------+------------+ | 101 | Zhang San | | 102 | Li Si | +------------+------------+
-
-
Alterne para o schema
defaultexistente.use schema default; SHOW tables; -- Sample result ID = 20250919*******yg5 acs:ram::<uid>:root emp acs:ram::<uid>:root emp_detail acs:ram::<uid>:root test_table OK -- Read data from the table. SELECT * FROM test_table; -- Result +------------+------------+ | id | name | +------------+------------+ | 101 | Zhang San | | 102 | Li Si | +------------+------------+ -- Write data to the table and query to verify the write operation. INSERT INTO test_table VALUES (103,'Wang Wu'); SELECT * FROM test_table; -- Result +------------+------------+ | id | name | +------------+------------+ | 101 | Zhang San | | 102 | Li Si | | 103 | Wang Wu | +------------+------------+
Passagem de propriedades de tabela Paimon
O Apache Paimon fornece opções de configuração principais. Ao criar uma tabela Paimon em um projeto externo, especifique essas opções na cláusula TBLPROPERTIES da sua instrução CREATE TABLE.
Configuração: Adicione parâmetros prefixados com mcfed. à lista TBLPROPERTIES. Os nomes dos parâmetros após o prefixo devem corresponder aos nomes nativos dos parâmetros do Paimon.
Exemplo
Criar uma tabela externa Paimon com buckets, chave primária e partições
-
Criar a tabela e configurar seus parâmetros externos
-- Switch to your external project. You can skip this step if you are already in it. use <your external project>; -- Enable schema syntax at the session level. SET odps.namespace.schema=true; -- Select the schema to use. use schema <your schema>; CREATE TABLE oss_extable_bucket_pk_pt_bucket ( id BIGINT, name STRING, dt STRING )tblproperties ( 'mcfed.bucket'='3', -- Number of buckets 'mcfed.bucket-key'='id', -- Bucket key. Optional if a primary key is specified. "mcfed.primary-key"="dt,id", -- Primary key "mcfed.partition"="dt" -- Partition field ); -
Inserir dados na tabela externa
INSERT INTO oss_extable_bucket_pk_pt_bucket PARTITION (dt='2025-06-18') VALUES (1, 'Alice'),(2, 'Bob'); INSERT INTO oss_extable_bucket_pk_pt_bucket PARTITION (dt='2025-06-19') VALUES (3, 'Charlie'),(4, 'David'),(5, 'Eva'); -
Consultar a tabela externa
SELECT * FROM oss_extable_bucket_pk_pt_bucket; -- Result: +------------+---------+------------+ | id | name | dt | +------------+---------+------------+ | 1 | Alice | 2025-06-18 | | 2 | Bob | 2025-06-18 | | 4 | David | 2025-06-19 | | 3 | Charlie | 2025-06-19 | | 5 | Eva | 2025-06-19 | +------------+---------+------------+ -
Faça login no console do Data Lake Formation (DLF) e, no canto superior esquerdo, selecione uma região.
Visualize os detalhes da tabela no catálogo.
Perguntas frequentes
Problema 1: Erro ao criar um projeto externo
Problema: Ao tentar criar um projeto externo, você recebe a mensagem de erro: "You are not authorized to perform this action."
Nos detalhes do erro, o código de erro é NoMCPermission.
Solução:
Se estiver usando um usuário RAM, certifique-se de que a política
AliyunMaxComputeFullAccessesteja anexada ao usuário RAM. Para mais informações, consulte a Etapa 1.Esta operação exige a seleção de um catálogo no Data Lake Formation (DLF). Certifique-se de ter as permissões necessárias para operações do DLF. Para mais informações, consulte a Etapa 1.
Problema 2: Erro ao executar SHOW TABLES no schema padrão
Problema: Ao executar o comando SHOW TABLES no schema padrão de um projeto externo, você recebe a seguinte mensagem de erro: "Forbidden:User acs: ram: :<uid>:user/** doesn't have privilege LIST on DATABASE default".
Solução:
Faça login no console do Data Lake Formation (DLF) e, no canto superior esquerdo, selecione uma região.
No painel de navegação à esquerda, escolha System & Security
Na aba , atualize a página para verificar se o usuário RAM atual existe.
Se o usuário existir, vá para a aba para conceder permissões ao usuário RAM.
Problema 3: Erro "invalid database operations on two-tier"
Problema: Ao executar o comando SHOW SCHEMAS em um projeto externo, você recebe a mensagem de erro: "invalid database operations on two-tier".
Solução:
-
Primeiro, certifique-se de que está usando um projeto externo.
Se estiver usando um nó SQL do DataWorks, clique em Debug Configuration no painel à direita e verifique se o recurso de computação vinculado é um projeto externo.
Se estiver usando a análise SQL do DataWorks, clique em Data Source no canto superior direito e verifique se a fonte de dados vinculada é um projeto externo.
Se estiver usando a análise SQL do MaxCompute, clique em Run Configuration no painel à direita e verifique se o projeto selecionado na seção de recursos de computação é um projeto externo.
Se estiver usando o odpscmd, verifique o valor do parâmetro
project_nameno arquivo odps_config.ini para garantir que esteja definido como o nome do projeto externo.
-
Após confirmar que está usando um projeto externo, selecione e execute as seguintes instruções SQL juntas.
-- Enable schema syntax at the session level. SET odps.namespace.schema=true; SHOW schemas;
Problema 4: SHOW SCHEMAS retorna apenas o schema padrão
Problema: Ao executar o comando SHOW SCHEMAS em um projeto externo, o comando retorna apenas 'default'.
Solução:
-
Primeiro, certifique-se de que está usando um projeto externo.
Se estiver usando um nó SQL do DataWorks, clique em Debug Configuration no painel à direita e verifique se o recurso de computação vinculado é um projeto externo.
Se estiver usando a análise SQL do DataWorks, clique em Data Source no canto superior direito e verifique se a fonte de dados vinculada é um projeto externo.
Se estiver usando a análise SQL do MaxCompute, clique em Run Configuration no painel à direita e verifique se o projeto selecionado na seção de recursos de computação é um projeto externo.
Se estiver usando o odpscmd, verifique o valor do parâmetro
project_nameno arquivo odps_config.ini para garantir que esteja definido como o nome do projeto externo.
Após confirmar que está usando um projeto externo, faça login no console do Data Lake Formation (DLF) e verifique se existem outros bancos de dados no catálogo vinculado ao projeto externo.
Se você concluiu as verificações nas Etapas 1 e 2, mas o comando SHOW SCHEMAS ainda não retorna os bancos de dados esperados, envie um ticket para relatar o problema.
Problema 5: Erro "Dynamic bucket"
Problema: Ao executar o comando SHOW TABLES em um projeto externo, você recebe a seguinte mensagem de erro:
ODPS-0110005:
com.aliyun.odps.meta.exception.MetaException:
com.aliyun.odps.common.table.na.NativeException:
common/table/jni/utils/jni_helper.cpp(79): UnretryableException: Common table connector exception
- ExceptionType: java.lang.IllegalArgumentException
- Message: You should use dynamic bucket (bucket = -1) mode in cross partition update case (Primary key constraint [sending_time, symbol, sequence_number] not include all partition fields [pt]).[pt])
Solução:
Este erro ocorre porque o MaxCompute não suporta tabelas de chave primária entre partições com buckets fixos.
Solução temporária: Exclua as tabelas PK entre partições não suportadas no console do Data Lake Formation (DLF).
Problema 6: Erro "Can't set default schema..."
Problema: Ao executar SHOW TABLES ou SHOW SCHEMAS, você recebe a seguinte mensagem de erro: "FAILED: Can't set default schema if odps.namespace.schema is false."
Solução:
Primeiro, certifique-se de ter adicionado o sinalizador de sessão
SET odps.namespace.schema=true;antes das suas instruções SQL para habilitar a sintaxe de schema.-
Se o erro persistir após habilitar o sinalizador, verifique a ordem das suas instruções. Para ler uma tabela de outro projeto externo, use a seguinte sequência de comandos:
USE external_project; SET odps.namespace.schema=true; USE schema schema_name; SHOW tables;
Problema 7: Erro "Failed to connect to...dlf.aliyuncs.com"
Problema: Ao tentar ler dados de uma tabela em um projeto externo Paimon_DLF, você recebe uma mensagem de erro semelhante a: "Caused by: java.net.ConnectException: Failed to connect to cn-***-intranet.dlf.aliyuncs.com/xx.xx.xx.xx:80"
Este erro indica que você precisa adicionar o endereço cn-***-intranet.dlf.aliyuncs.com à lista de permissões do projeto interno onde o job é executado.
Solução:
Junte-se ao grupo DingTalk da comunidade de desenvolvedores MaxCompute usando o link de inscrição ou pesquisando pelo ID do grupo
11782920no DingTalk. Entre em contato com a equipe de suporte técnico do MaxCompute e solicite que adicionem o endereço da mensagem de erro à lista de permissões.-
Depois que o endereço for adicionado à lista de permissões, inclua os seguintes parâmetros antes das suas operações de leitura.
set odps.security.outbound.intranetlist=cn-***-intranet.dlf.aliyuncs.com:80; set odps.internet.access.list=cn-***-intranet.dlf.aliyuncs.com:80;
Mapeamento de tipos de dados
Para detalhes sobre os tipos de dados do MaxCompute, consulte Tipos de dados (V1.0) e Tipos de dados (V2.0).
|
Tipo de dado Paimon |
Tipo de dado MaxCompute 2.0 |
Suporte a leitura/escrita |
Descrição |
|
TINYINT |
TINYINT |
|
Inteiro assinado de 8 bits. |
|
SMALLINT |
SMALLINT |
|
Inteiro assinado de 16 bits. |
|
INT |
INT |
|
Inteiro assinado de 32 bits. |
|
BIGINT |
BIGINT |
|
Inteiro assinado de 64 bits. |
|
BINARY(MAX_LENGTH) |
BINARY |
|
Tipo de dado binário. O comprimento máximo atual é 8 MB. |
|
FLOAT |
FLOAT |
|
Número de ponto flutuante binário de 32 bits. |
|
DOUBLE |
DOUBLE |
|
Número de ponto flutuante binário de 64 bits. |
|
DECIMAL(precision,scale) |
DECIMAL(precision,scale) |
|
Tipo numérico decimal exato. O padrão é
|
|
VARCHAR(n) |
VARCHAR(n) |
|
Tipo de caractere de comprimento variável. n especifica o comprimento e varia de 1 a 65.535. |
|
CHAR(n) |
CHAR(n) |
|
Tipo de caractere de comprimento fixo. n especifica o comprimento e varia de 1 a 255. |
|
VARCHAR(MAX_LENGTH) |
STRING |
|
Tipo string. O comprimento máximo atual é 8 MB. |
|
DATE |
DATE |
|
Tipo data. O formato é |
|
TIME, TIME(p) |
Não suportado |
|
O tipo de dado TIME do Paimon representa uma hora sem fuso horário, consistindo em horas, minutos e segundos, com precisão de nanossegundos. TIME(p) especifica a precisão dos segundos fracionários de 0 a 9. O valor padrão é 0. Não existe tipo correspondente no MaxCompute. |
|
TIMESTAMP, TIMESTAMP(p) |
TIMESTAMP_NTZ |
|
Um tipo timestamp sem fuso horário com precisão de nanossegundos. Para ler este tipo de dado, você deve desabilitar a ponte JNI nativa executando o seguinte comando: |
|
TIMESTAMP WITH LOCAL TIME_ZONE(9) |
TIMESTAMP |
|
|
|
TIMESTAMP WITH LOCAL TIME_ZONE(9) |
DATETIME |
|
Um tipo timestamp com precisão de nanossegundos. O formato é |
|
BOOLEAN |
BOOLEAN |
|
Um tipo BOOLEAN. |
|
ARRAY |
ARRAY |
|
Um tipo complexo. |
|
MAP |
MAP |
|
Um tipo complexo. |
|
ROW |
STRUCT |
|
Um tipo complexo. |
|
MULTISET<t> |
Não suportado |
|
Não existe tipo correspondente no MaxCompute. |
|
VARBINARY, VARBINARY(n), BYTES |
BINARY |
|
Um tipo de dado de strings binárias de comprimento variável. |