Todos os produtos
Search
Central de documentação

MaxCompute:Paimon external table

Última atualização: Sep 21, 2026

O MaxCompute permite criar uma tabela externa do Paimon para mapear um diretório de tabelas Paimon armazenado no Object Storage Service (OSS) e acessar os dados contidos nele. Este tópico descreve como criar uma tabela externa do Paimon e acessá-la no MaxCompute.

Visão geral

Apache Paimon é um formato de armazenamento para data lakehouse que suporta processamento em lote e em streaming, oferecendo gravações de alto throughput e consultas de baixa latência. Totalmente integrado a engines de computação populares como Spark, Hive e Trino, bem como ao Realtime Compute for Apache Flink e ao E-MapReduce, o Apache Paimon permite construir rapidamente um data lake no OSS e conectá-lo ao MaxCompute para análise de dados. O recurso de filtragem de metadados melhora ainda mais o desempenho das consultas, ignorando arquivos de diretório desnecessários no OSS durante operações de leitura.

Limitações

  • Limitações de schema

    As tabelas externas do Paimon não atualizam automaticamente seus schemas para refletir alterações nos arquivos Paimon subjacentes.

  • Limitações de propriedades da tabela

    • Não é possível definir propriedades de cluster em uma tabela externa do Paimon.

    • Não é possível definir uma chave primária.

    • As tabelas externas do Paimon não suportam o repasse de propriedades de tabelas Paimon.

  • Operações de gravação, atualização e consulta de dados

    • Use as instruções INSERT INTO ou INSERT OVERWRITE para gravar dados em uma tabela externa do Paimon.

    • Não há suporte para gravação de dados em tabelas de buckets dinâmicos nem em tabelas entre partições.

    • As operações UPDATE e DELETE não são suportadas em tabelas externas do Paimon.

    • Consultas de time-travel que acessam versões históricas de dados não são suportadas para tabelas externas do Paimon.

    • Não grave dados diretamente em tabelas externas do Paimon. Em vez disso, utilize métodos como UNLOAD para exportar dados ao OSS.

  • O MaxCompute e o OSS precisam estar na mesma região.

  • Para mais informações, consulte Supported data types.

Descrição de permissões

  • Ao acessar tabelas externas do OSS, o acesso aos dados é feito por meio da função especificada no parâmetro odps.properties.rolearn, independentemente de você usar uma conta Alibaba Cloud, um usuário RAM ou uma função RAM. Portanto, crie uma função RAM e conceda a ela permissões para acessar o bucket OSS de destino e, em seguida, configure o ARN da função no parâmetro odps.properties.rolearn. Para mais informações, consulte Parameters.

  • Você pode autorizar acesso na mesma conta ou entre contas diferentes conforme os requisitos do seu negócio. Recomendamos usar uma política de autorização personalizada para um controle de acesso mais granular. Para mais informações, consulte Authorization for external data sources.

Criar uma tabela externa do Paimon

Sintaxe

Para detalhes sobre a sintaxe de criação de tabelas externas em diferentes formatos, consulte OSS external tables.

CREATE EXTERNAL TABLE  [if NOT EXISTS] <mc_oss_extable_name>
(
  <col_name> <data_type>,
  ...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
  'odps.properties.rolearn'='acs:ram::<uid>:role/<role_name>'
)
LOCATION '<oss_location>';

Parâmetros comuns

Para mais informações sobre os parâmetros comuns, consulte Basic syntax parameters.

Gravar dados

Para detalhes sobre a sintaxe de gravação no MaxCompute, consulte Write syntax.

Consultar e analisar dados

  • A lógica de fragmentação (split) de dados para tabelas Paimon difere da utilizada em tabelas nativas do MaxCompute. O formato Paimon possui seus próprios mecanismos internos de organização e fragmentação de arquivos, que não se alinham completamente aos parâmetros do MaxCompute.

  • Para a sintaxe do SELECT, consulte Query syntax.

  • Para otimizar planos de consulta, consulte Query optimization.

  • Para mais informações sobre como ignorar linhas inválidas, consulte BadRowSkipping.

Exemplo

Etapa 1: Pré-requisitos

  1. Você concluiu created a MaxCompute project.

  2. Prepare um bucket e um diretório no OSS. Para mais informações, consulte Create a bucket e Manage directories.

    Certifique-se de que o bucket esteja na mesma região do seu projeto MaxCompute.
  3. Conceda as permissões necessárias.

    1. Você tem permissão para acessar o OSS. O acesso a uma tabela externa do OSS pode ser feito por meio de uma conta Alibaba Cloud, um usuário RAM ou uma função RAM. Para mais informações sobre como conceder permissões, consulte STS-mode authorization for OSS.

    2. Você tem a permissão CreateTable no projeto MaxCompute. Para mais informações sobre permissões relacionadas a tabelas, consulte MaxCompute permissions.

Etapa 2: Preparar dados no Flink

Crie um catalog do Paimon e uma tabela Paimon e, em seguida, insira dados na tabela.

Nota

Se você já tiver dados de tabelas Paimon no OSS, ignore esta etapa.

  1. Criar um filesystem catalog do Paimon

    1. Acesse o console do real-time compute for Apache Flink e selecione uma região no canto superior esquerdo.

    2. Clique no nome do workspace de destino e, no painel de navegação à esquerda, selecione Data Management.

    3. Na página catalog list , clique em Create Catalog . Na caixa de diálogo Create Catalog , selecione Apache Paimon, clique em Next e configure os seguintes parâmetros:

      Parameter

      Required

      Description

      metastore

      Yes

      The metastore type. In this example, select filesystem.

      catalog name

      Yes

      A custom catalog name, such as paimon-catalog.

      warehouse

      Yes

      The warehouse directory in OSS. In this example, the directory is oss://paimon-fs/paimon-test/.

      fs.oss.endpoint

      Yes

      The endpoint of the OSS service. For example, the endpoint for the China (Hangzhou) region is oss-cn-hangzhou-internal.aliyuncs.com.

      fs.oss.accessKeyId

      Yes

      The AccessKey ID used to access OSS.

      fs.oss.accessKeySecret

      Yes

      The AccessKey secret used to access OSS.

  2. Criar uma tabela Paimon

    1. Acesse o console do real-time compute for Apache Flink e selecione uma região no canto superior esquerdo.

    2. Clique no nome do workspace de destino e, no painel de navegação à esquerda, selecione Development > Data Query.

    3. Na aba Query Script, clique em image para criar um novo script de consulta.

      Insira e execute os seguintes comandos:

      CREATE TABLE `paimon_catalog`.`default`.test_tbl (
          id BIGINT,
          data STRING,
          dt STRING,
          PRIMARY KEY (dt, id) NOT ENFORCED
      ) PARTITIONED BY (dt);
      
      INSERT INTO `paimon-catalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');
  3. Para jobs SQL concluídos automaticamente, como aqueles que executam uma instrução INSERT INTO ... VALUES ..., realize as seguintes operações:

    1. Clique no nome do workspace de destino. No painel de navegação à esquerda, escolha O&M > Deployments.

    2. Na página Deployments, clique no job de destino para abrir a página deployment details.

    3. Na seção Parameters, clique em Edit. Em seguida, na seção Other Configuration, defina execution.checkpointing.checkpoints-after-tasks-finish.enabled: true e salve as alterações.

      Para mais informações sobre como configurar parâmetros de runtime de um job, consulte Configure job deployment information.

Etapa 3: Criar uma tabela externa do Paimon

Execute a seguinte instrução SQL no MaxCompute para criar uma tabela externa do Paimon:

CREATE EXTERNAL TABLE oss_extable_paimon_pt
(
    id BIGINT,
    data STRING
)
PARTITIONED BY (dt STRING )
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
    'odps.properties.rolearn'='acs:ram::<uid>:role/<role_name>'
)
LOCATION 'oss://oss-cn-<your region>-internal.aliyuncs.com/<table_path>'
;

Na instrução acima, table_path é o caminho para a tabela Paimon criada no Flink, como paimon-fs/paimon-test/default.db/test_tbl. Para localizar esse caminho, siga as etapas abaixo:

  1. Acesse o console do real-time compute for Apache Flink e selecione uma região no canto superior esquerdo.

  2. Clique no nome do workspace de destino e, no painel de navegação à esquerda, selecione Data Management.

  3. Na página Catalogs, no catalog de destino, clique em default. Na página default, localize a tabela de destino e clique em View na coluna Actions.

  4. Na aba Table Schema, copie o valor do parâmetro path na seção Properties. Em table_path, insira o caminho sem o prefixo oss://.

Etapa 4: Carregar dados de partição

Se a tabela externa do OSS criada for uma tabela particionada, carregue suas partições. Para mais informações, consulte OSS external tables.

MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;

Etapa 5: Consultar a tabela externa do Paimon

Execute os seguintes comandos no MaxCompute para consultar a tabela externa do Paimon oss_extable_paimon_pt.

SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
SELECT * FROM oss_extable_paimon_pt WHERE dt='2024-07-18';

O seguinte resultado é retornado:

+------------+------------+------------+
| id         | data       | dt         | 
+------------+------------+------------+
| 1          | CCC        | 2024-07-18 | 
| 2          | DDD        | 2024-07-18 | 
+------------+------------+------------+
Nota

Se o schema nos arquivos Paimon diferir do schema da tabela externa:

  • Divergência na contagem de colunas: Se os arquivos Paimon tiverem menos colunas do que o DDL da tabela externa, o MaxCompute lerá as colunas ausentes como NULL. Se os arquivos tiverem mais colunas, o MaxCompute as ignorará.

  • Divergência no tipo de coluna: Não é possível ler dados de uma coluna STRING do Paimon em uma coluna INT do MaxCompute. A leitura de dados de uma coluna INT em uma coluna STRING é suportada, mas não recomendada.

Tipos de dados suportados

Para mais informações sobre os tipos de dados do MaxCompute, consulte Data type editions 1.0 e 2.0.

Tipo de dado Paimon

Tipo de dado MaxCompute 2.0

Suporte a leitura/gravação

Descrição

TINYINT

TINYINT

Supported

Inteiro com sinal de 8 bits.

SMALLINT

SMALLINT

Supported

Inteiro com sinal de 16 bits.

INT

INT

Supported

Inteiro com sinal de 32 bits.

BIGINT

BIGINT

Supported

Inteiro com sinal de 64 bits.

BINARY(MAX_LENGTH)

BINARY

Supported

Tipo de dado binário. O comprimento máximo atual é 8 MB.

FLOAT

FLOAT

Supported

Número de ponto flutuante binário de 32 bits.

DOUBLE

DOUBLE

Supported

Número de ponto flutuante binário de 64 bits.

DECIMAL(precision,scale)

DECIMAL(precision,scale)

Supported

Tipo numérico decimal exato. O padrão é decimal(38,18). Os valores de precisão e escala podem ser personalizados.

  • precision: O número máximo de dígitos. Os valores válidos são de 1 a 38.

  • scale: O número de dígitos na parte fracionária. Os valores válidos são de 0 a 18.

VARCHAR(n)

VARCHAR(n)

Supported

Tipo de caractere de comprimento variável. O parâmetro n especifica o comprimento, que varia de 1 a 65.535.

CHAR(n)

CHAR(n)

Supported

Tipo de caractere de comprimento fixo. O parâmetro n especifica o comprimento, que varia de 1 a 255.

VARCHAR(MAX_LENGTH)

STRING

Supported

Tipo string. O comprimento máximo atual é 8 MB.

DATE

DATE

Supported

Tipo data. O formato é yyyy-mm-dd.

TIME, TIME(p)

Not supported

Not supported

O tipo de dado TIME do Paimon representa um horário sem fuso horário, composto por 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

Supported

Tipo timestamp sem fuso horário com precisão de nanossegundos.

Para ler este tipo de dado, desative o bridge JNI nativo executando o seguinte comando: SET odps.sql.common.table.jni.disable.native=true;

TIMESTAMP WITH LOCAL TIME_ZONE(9)

TIMESTAMP

Supported

  • Tipo timestamp com precisão de nanossegundos. O formato é yyyy-mm-dd hh:mm:ss.xxxxxxxxx.

  • Para tipos TIMESTAMP de baixa precisão na tabela source do Paimon, o MaxCompute trunca os valores durante as gravações. Para precisão de 0 a 3, os dados são truncados para 3 dígitos. Para precisão de 4 a 6, os dados são truncados para 6 dígitos. Para precisão de 7 a 9, os dados são truncados para 9 dígitos.

TIMESTAMP WITH LOCAL TIME_ZONE(9)

DATETIME

Not supported

Tipo timestamp com precisão de nanossegundos.

O formato é yyyy-mm-dd hh:mm:ss.xxxxxxxxx.

BOOLEAN

BOOLEAN

Supported

Tipo BOOLEAN.

ARRAY

ARRAY

Supported

Tipo complexo.

MAP

MAP

Supported

Tipo complexo.

ROW

STRUCT

Supported

Tipo complexo.

MULTISET<t>

Not supported

Not supported

Não existe tipo correspondente no MaxCompute.

VARBINARY, VARBINARY(n), BYTES

BINARY

Supported

Tipo de dado de strings binárias de comprimento variável.

Solução de problemas

Erro kSIGABRT ao ler uma tabela externa do Paimon

  • Mensagem de erro:

    ODPS-0123144: Fuxi job failed - kSIGABRT(errCode:6) at Odps/*****_SQL_0_1_0_job_0/M1@f01b17437.cloud.eo166#3. 
      Detail error msg: CRASH_CORE, maybe caused by jvm crash, please check your java udf/udaf/udtf. 
      | fatalInstance: Odps/*****_SQL_0_1_0_job_0/M1#0_0 
  • Causa:

    Esse erro ocorre ao ler uma coluna TIMESTAMP_NTZ no modo JNI.

  • Solução:

    Desative o bridge JNI executando o seguinte comando antes da consulta: SET odps.sql.common.table.jni.disable.native=true;

Artigos relacionados

Você também pode usar um catalog do Flink personalizado para gerenciar tabelas externas do Paimon no MaxCompute, permitindo gravar dados pelo Flink e consultá-los no MaxCompute. Para mais informações, consulte Create a MaxCompute Paimon external table by using Flink.