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. O gerenciamento de permissões é delegado ao DLF, com suporte a operações de leitura e escrita em dados do Object Storage Service (OSS) gerenciados pelo DLF. Isso viabiliza o mapeamento de data lake no nível de catálogo para colaboração entre engines baseada em Paimon. Este recurso está atualmente em visualização por convite.
Escopo aplicável
Formato de tabela: Há suporte apenas para tabelas Paimon armazenadas no OSS e totalmente gerenciadas pelo DLF.
Limitações de escrita: Tabelas de bucket dinâmico e tabelas entre partições não aceitam
INSERT INTOouINSERT OVERWRITE.-
Projetos externos:
-
Suporte à evolução de schema
Tipo de operação
Suportado
Adicionar coluna
Remover coluna
Reordenar colunas
Alterar tipo de dados da coluna
Renomear coluna
Alterar comentário da coluna
Alterar nulidade da coluna
-
Suporte a operações de partição
Operação/Suporte
Suportado
Adicionar partição
Modificar horário de atualização da partição
Alterar valor da partição
Mesclar partições
Listar todas as partições
Visualize informações da partição
Exclua partição
Limpar dados da partição
-
Não há suporte para operações de recursos e funções.
Procedimento
Etapa 1: Conceder permissões
Modelo de permissão
-
Plano de controle: A verificação dessas permissões ocorre ao realizar operações no console do MaxCompute, principalmente durante a criação de um projeto externo e sua vinculação a um catálogo DLF.
O RAM gerencia essas permissões. Sua conta Alibaba Cloud deve acessar o console do RAM para configure as permissões necessárias. Para mais informações, consulte Manage permissions for a RAM user.
-
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 geralmente acontece 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 acessar o console do DLF para configure as permissões necessárias. Para mais informações, consulte Grant permissions to a RAM user.
Conceder permissões do DLF ao MaxCompute
O MaxCompute acessa dados Paimon_DLF por meio de uma fonte de dados externa e de 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 ao DLF. Tanto o MaxCompute quanto o DLF aplicam permissões com base nessa identidade. Primeiro, crie uma função vinculada ao serviço para o MaxCompute e conceda a ela as permissões necessárias:
Faça login no console do RAM.
Na barra 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
AliyunServiceRoleForMaxComputeLakehouseem Select Service e clique em Create Service Linked Role.Se receber uma mensagem informando que a função já existe, significa que ela já foi autorizada e você pode ignorar o aviso.
Conceder permissões a um usuário RAM
Caso seja um usuário RAM, anexe as seguintes políticas de permissão. Para obter informações sobre como adicionar permissões, consulte Manage permissions for a RAM user.
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. Essa 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.
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.
NotaOs parâmetros suportados serão expandidos em futuras atualizações da documentação à medida que o product 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 visualize 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 optar por usar uma fonte de dados existente, selecione seu nome na lista suspensa.
-
Se optar por criar uma nova fonte de dados, o nome dela 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 para o projeto.
-
Etapa 4: Usar SQL para acessar a fonte de dados
Excluir um projeto externo não remove os dados subjacentes, pois o projeto é apenas um mapeamento para a fonte de dados.
No entanto, diferentemente das tabelas externas padrão, execute 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 o banco de dados correspondente. Use operações DROP com cautela.
-
Choose a connection tool para fazer login no projeto externo.
O exemplo a seguir utiliza 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.
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; -
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.set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; -
Crie um novo schema no projeto externo.
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; -
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 Data authorization management.
-
Formato do comando:
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; -
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.
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
-
-
Mude para o schema
defaultexistente.set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
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 configure seus parâmetros externos
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; -
Inserir dados na tabela externa
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; -
Consultar a tabela externa
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; -
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 execute SHOW TABLES no schema padrão
Problema: Ao execute 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, acesse a aba para conceder permissões ao usuário RAM.
Problema 3: Erro "invalid database operations on two-tier"
Problema: Ao execute 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 confirme que está usando um projeto externo, selecione e execute as seguintes instruções SQL juntas.
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
Problema 4: SHOW SCHEMAS retorna apenas o schema padrão
Problema: Ao execute 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 confirme 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 de "Dynamic bucket"
Problema: Ao execute o comando SHOW TABLES em um projeto externo, você recebe a seguinte mensagem de erro:
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
Solução:
Este erro ocorre porque o MaxCompute não oferece suporte a 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 execute 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 ative a sintaxe de schema.-
Se o erro persistir após ative o sinalizador, verifique a ordem das suas instruções. Para ler uma tabela de outro projeto externo, use a seguinte sequência de comandos:
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
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 à seguinte: "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 do 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=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
Problema 8: Failed to connect Http service: http://clg-paimon-***.oss-cn-***-internal.aliyuncs.com
Problema: Ao tentar ler dados de uma tabela em um projeto externo Paimon_DLF, você recebe uma mensagem de erro semelhante à seguinte: "open failed, get file internal error:Failed to connect Http service: http://clg-paimon-.oss-cn--internal.aliyuncs.com/***"
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 do 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=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
Mapeamento de tipos de dados
Para detalhes sobre os tipos de dados do MaxCompute, consulte Data types (V1.0) e Data types (V2.0).
Tipo de dados Paimon | Tipo de dados 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 dados 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 dados TIME do Paimon representa um horário sem fuso horário, consistindo em horas, minutos e segundos, com precisão de nanossegundos. TIME(p) especifica a precisão de 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, preciso até o nanossegundo. Para ler este tipo de dados, 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 preciso até o nanossegundo. 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 dados de strings binárias de comprimento variável. |