O MaxCompute permite criar uma tabela externa do Paimon para mapear um diretório de tabela do Paimon armazenado no Object Storage Service (OSS) e acessar os dados nele contidos. Este tópico descreve como criar uma tabela externa do Paimon e acessá-la com o MaxCompute.
Visão geral
O Apache Paimon é um formato de armazenamento lakehouse para processamento em streaming e em lote que oferece gravações de alto throughput e consultas de baixa latência. Ele se integra totalmente a mecanismos de computação comuns, como Spark, Hive e Trino, além de Realtime Compute for Apache Flink e E-MapReduce. Use o Apache Paimon para construir rapidamente um data lake no OSS e conectá-lo ao MaxCompute para análises. O recurso de filtragem de metadados melhora ainda mais o desempenho das consultas ao ignorar arquivos de diretório desnecessários no OSS durante jobs 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 subjacentes do Paimon.
-
Limitações de propriedades da tabela
Não é possível definir propriedades de cluster em uma tabela externa do Paimon.
Não há suporte para definição de chave primária.
Tabelas externas do Paimon não suportam o repasse de propriedades da tabela Paimon.
-
Operações de gravação, atualização e consulta de dados
Use instruções
INSERT INTOouINSERT OVERWRITEpara gravar dados em uma tabela externa do Paimon.Não há suporte para gravação de dados em tabelas de bucket dinâmico e tabelas entre partições.
As operações
UPDATEeDELETEnão são suportadas em tabelas externas do Paimon.Consultas time-travel que acessam versões históricas de dados não estão disponíveis para tabelas externas do Paimon.
Não grave dados diretamente nas tabelas externas do Paimon. Em vez disso, utilize métodos como UNLOAD para exportar dados para o OSS.
O MaxCompute e o OSS devem estar na mesma região.
Para obter mais informações, consulte Supported data types.
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/aliyunodpsdefaultrole'
)
LOCATION '<oss_location>';
Parâmetros comuns
Para mais informações sobre 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 daquela usada em tabelas nativas do MaxCompute. O formato Paimon possui mecanismos internos próprios para organização e fragmentação de arquivos, que não se alinham totalmente aos parâmetros do MaxCompute.
Para a sintaxe SELECT, consulte Query syntax.
Para otimizar planos de consulta, consulte Query optimization.
Para mais informações sobre como ignorar linhas corrompidas, consulte BadRowSkipping.
Exemplo
Etapa 1: Pré-requisitos
Você já created a MaxCompute project.
-
Prepare um bucket e um diretório no OSS. Para mais informações, consulte Create a bucket e Manage directories.
Certifique-se de que seu bucket esteja na mesma região do seu projeto MaxCompute.
-
Conceda as permissões necessárias.
Verifique se você tem permissão para acessar o OSS. É possível acessar uma tabela externa do OSS usando uma conta Alibaba Cloud, um usuário RAM ou uma função RAM. Para saber como conceder permissões, consulte STS-mode authorization for OSS.
Confirme se você possui 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 catálogo Paimon e uma tabela Paimon e, em seguida, insira dados na tabela.
Se você já tiver dados de tabela Paimon no OSS, pule esta etapa.
-
Criar um catálogo de sistema de arquivos Paimon
Faça login no console do real-time compute for Apache Flink e selecione uma região no canto superior esquerdo.
Clique em nome do workspace desejado e, no painel de navegação à esquerda, selecione Data Management.
-
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:
Parâmetro
Obrigatório
Descrição
metastore
Sim
Tipo de metastore. Neste exemplo, selecione
filesystem.catalog name
Sim
Nome personalizado para o catálogo, como
paimon-catalog.warehouse
Sim
Diretório warehouse no OSS. Neste exemplo, o diretório é
oss://paimon-fs/paimon-test/.fs.oss.endpoint
Sim
Endpoint do service OSS. Por exemplo, o endpoint para a região China (Hangzhou) é
oss-cn-hangzhou-internal.aliyuncs.com.fs.oss.accessKeyId
Sim
AccessKey ID usado para acessar o OSS.
fs.oss.accessKeySecret
Sim
AccessKey secret usado para acessar o OSS.
-
Criar uma tabela Paimon
Faça login no console do real-time compute for Apache Flink e selecione uma região no canto superior esquerdo.
Clique em nome do workspace desejado e, no painel de navegação à esquerda, selecione .
-
Na aba Query Script, clique em
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');
-
Para jobs SQL que terminam automaticamente, como aqueles que executam uma instrução
INSERT INTO ... VALUES ..., realize as seguintes operações:Clique em nome do workspace desejado. No painel de navegação à esquerda, escolha .
Na página Deployments, clique em job desejado para abrir a página de deployment details.
-
Na seção Parameters, clique em Edit. Em seguida, na seção Other Configuration, defina
execution.checkpointing.checkpoints-after-tasks-finish.enabled: truee salve suas alterações.Para mais informações sobre como configurar parâmetros de tempo de execução para 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/aliyunodpsdefaultrole'
)
LOCATION 'oss://oss-cn-<your region>-internal.aliyuncs.com/<table_path>'
;
Na instrução anterior, table_path é o caminho para a tabela Paimon criada no Flink, como paimon-fs/paimon-test/default.db/test_tbl. Para encontrar esse caminho, siga estas etapas:
Faça login no console do real-time compute for Apache Flink e selecione uma região no canto superior esquerdo.
Clique em nome do workspace desejado e, no painel de navegação à esquerda, selecione Data Management.
Na página Catalogs, sob o catálogo desejado, clique em default. Na página default, localize a tabela desejada e clique em View na coluna Actions.
Na aba Table Schema, copie o valor do parâmetro path na seção Properties. Para table_path, insira o caminho sem o prefixo
oss://.
Etapa 4: Carregar dados de partição
Se a tabela externa do OSS criada for particionada, será necessário carregar 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 |
+------------+------------+------------+
Se o schema nos arquivos Paimon diferir do schema da tabela externa:
Incompatibilidade de contagem de colunas: Se os arquivos Paimon contiverem menos colunas do que o DDL da tabela externa, o MaxCompute lerá as colunas ausentes como NULL. Caso os arquivos contenham mais colunas, o MaxCompute as ignorará.
Incompatibilidade de 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 para 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 dados Paimon | Tipo de dados MaxCompute 2.0 | Suporte a leitura/gravação | 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 é de 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 é de 8 MB. | |
DATE | DATE | Tipo data. O formato é | |
TIME, TIME(p) | Não suportado | O tipo de dados 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 | Tipo timestamp sem fuso horário, preciso até o nanossegundo. Para ler este tipo de dados, desative a ponte JNI nativa executando o seguinte comando: | |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | TIMESTAMP |
| |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | DATETIME | Tipo timestamp preciso até o nanossegundo. O formato é | |
BOOLEAN | BOOLEAN | Tipo BOOLEAN. | |
ARRAY | ARRAY | Tipo complexo. | |
MAP | MAP | Tipo complexo. | |
ROW | STRUCT | Tipo complexo. | |
MULTISET<t> | Não suportado | Não existe tipo correspondente no MaxCompute. | |
VARBINARY, VARBINARY(n), BYTES | BINARY | Tipo de dados 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:
Este erro ocorre ao ler uma coluna TIMESTAMP_NTZ no modo JNI.
-
Solução:
Desative a ponte JNI executando o seguinte comando antes da sua consulta:
SET odps.sql.common.table.jni.disable.native=true;
Artigos relacionados
Também é possível usar um catálogo Flink personalizado para gerenciar tabelas externas Paimon do MaxCompute. Isso permite gravar dados usando o Flink e consultá-los no MaxCompute. Para mais informações, consulte Create a MaxCompute Paimon external table by using Flink.