Todos os produtos
Search
Central de documentação

MaxCompute:Definição de Object Table

Última atualização: Aug 28, 2026

O MaxCompute introduziu o recurso de object table, que permite ao mecanismo de computação do data warehouse acessar dados não estruturados e seus metadados no armazenamento de data lake. Este tópico descreve a sintaxe do comando e fornece exemplos de uso.

Contexto

Em muitos fluxos de trabalho de IA, desenvolvedores de data warehouse familiarizados com os dados e a lógica de negócios precisam pré-processar ou processar dados não estruturados para grandes modelos. Essas tarefas aproveitam o poder de computação em grande escala e de baixo custo das plataformas de big data. Os processos e seus resultados frequentemente interagem com dados no data warehouse ou no data lake.

O uso de SQL para processar dados não estruturados apresenta vários desafios:

  • Ao ler do armazenamento de objetos, os mecanismos SQL de big data não conseguem determinar o tamanho dos objetos. Isso complica a otimização do plano de execução e dificulta o controle de concorrência ou o início de um número adequado de tarefas simultâneas. Sem um predicate pushdown eficaz, o poder de computação não é totalmente utilizado, especialmente em casos de data skew.

  • A leitura de metadados do armazenamento de objetos introduz alta latência, pois cada consulta exige uma chamada remota ao service de armazenamento.

  • Listas de arquivos do armazenamento de objetos só podem ser recuperadas serialmente dentro de um único processo em uma função de tabela definida pelo usuário (UDTF), o que resulta em baixo desempenho na leitura de dados.

  • É necessário implementar lógica de autorização e conectividade de rede dentro de funções definidas pelo usuário (UDFs) para conectar-se aos services de armazenamento.

  • Data warehouses tradicionais não oferecem recursos para upload seguro de imagens personalizadas nem um ambiente de execução seguro para UDFs. Além disso, chamadas remotas exigem gerenciamento complexo de concorrência com o service de computação distribuída.

Recursos

O MaxCompute introduziu o recurso de object table, permitindo que o mecanismo de computação do data warehouse acesse dados não estruturados e seus metadados no armazenamento de data lake. Esse recurso oferece as seguintes capacidades:

  • Permite que o mecanismo leia os metadados de arquivos do OSS como uma tabela.

  • Utiliza uma tabela de metadados para armazenar em cache metadados versionados de arquivos do OSS. O mecanismo SQL pode então usar esses metadados para otimizações de consulta, como filtragem de dados e predicate pushdown.

  • Fornece funções integradas para ler o conteúdo de arquivos de dados não estruturados de várias maneiras.

  • Permite que o mecanismo SQL do MaxCompute crie splits concorrentes com base nos metadados da object table, habilitando computação distribuída em grande escala para melhorar a eficiência na leitura e no processamento de dados.

  • Possibilita o upload de uma imagem personalizada para criar UDFs que processem dados não estruturados lidos pelo mecanismo.

  • Suporta o processamento de dados não estruturados para gerar resultados estruturados e gravá-los em tabelas internas ou externas no data warehouse. Versões futuras também suportarão a geração de resultados não estruturados e sua gravação de volta no OSS por meio de object tables.

  • Oferece suporte ao mecanismo Maxframe do ecossistema Python.

Limitações

  • O projeto MaxCompute deve ter schemas ativados. Para mais informações, consulte Enable schema.

  • O MaxCompute deve oferecer suporte ao Type System 2.0.

  • Atualmente, object tables não suportam partições.

Faturamento

  • Uma Object Table armazena uma coleção de metadados de arquivos no OSS. Taxas de armazenamento são cobradas pelos metadados atualizados e armazenados na Object Table. Para mais informações, consulte Storage pricing. Como os arquivos do OSS não ficam armazenados no MaxCompute, não há cobrança pelo armazenamento deles. O OSS cobra pelo armazenamento e acesso aos dados. Para mais informações, consulte OSS storage pricing.

  • Para tarefas que extraem e atualizam metadados do OSS, o inputsize de cada arquivo verificado baseia-se no tamanho de seus metadados, não no tamanho real do arquivo. Portanto, o custo total do job de atualização depende do número de arquivos, e não do tamanho total deles. Para mais informações, consulte SQL billing for external tables.

  • Custos de computação são gerados ao usar uma Object Table e seus metadados para analisar e extrair dados não estruturados do OSS.

    • No modelo pagamento conforme o uso, a análise de metadados da Object Table é faturada da mesma forma que uma tabela interna. Para mais informações, consulte Standard SQL billing. O processamento do conteúdo de dados não estruturados do OSS é faturado como tabela externa. Para mais informações, consulte SQL billing for external tables.

    • No plano de faturamento por assinatura, você utiliza recursos pré-pagos. Para mais informações, consulte Computing fees (subscription).

Criar uma Object Table

Sintaxe

CREATE OBJECT TABLE [IF NOT EXISTS] <objecttable_name> 
WITH SERDEPROPERTIES ('<key>' = '<value>') 
LOCATION '<location>' 
[TBLPROPERTIES ('<key>' = '<value>')] 
[COMMENT '<comment>'] 
;
Nota
  • Object tables devem ser usadas em um projeto com schemas ativados, e você deve ativar a opção de sintaxe de schema.

  • Não é necessário definir colunas para uma Object Table, pois suas colunas de metadados são fornecidas pelo sistema.

Parâmetros

Parâmetro

Obrigatório

Descrição

objecttable_name

Sim

Nome da tabela.

SERDEPROPERTIES ('<key>'='<value>')

Sim

Especifica propriedades para o serializador-desserializador (SerDe). Você pode especificar uma função do RAM para autorização definindo a chave odps.properties.rolearn. Se você omitir essa chave, o MaxCompute usará a função do RAM AliyunODPSDefaultRole da conta Alibaba Cloud atual para acessar o OSS.

Exemplo: 'odps.properties.rolearn'='acs:ram::uid:role/aliyunodpsdefaultrole'.

Antes de usar este recurso, certifique-se de ter concluído a autorização com um clique para AliyunODPSDefaultRole. Essa autorização permite que o projeto MaxCompute acesse diretamente recursos do OSS pertencentes à conta cloud atual por meio de um token STS.

Nota

A autorização com um clique só é possível se o proprietário do projeto MaxCompute e o proprietário da conta OSS forem os mesmos.

location

Sim

  • Caminho do OSS ao qual a Object Table mapeia. O formato é oss://<oss_endpoint>/<bucket_name>/<oss_directory_name>/. Por exemplo, oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/.

  • A Object Table extrai os metadados dos arquivos no diretório especificado.

  • Para obter o oss_endpoint:

    • Faça login no OSS console.

    • Na página Buckets, clique em Bucket Name desejado para abrir sua página Objects.

    • Na área Port da página Overview, obtenha o Endpoint para Access from ECS over the Classic Network (internal network).

TBLPROPERTIES ('<key>'='<value>')

Não

  • metadata.cache.mode: Modo de atualização do cache.

    • manual: Acionamento manual (padrão).

    • periodic: Acionamento periódico. Este modo requer o parâmetro metadata.staleness.seconds para especificar o intervalo de atualização.

  • metadata.staleness.seconds: Intervalo de atualização em segundos. O valor pode variar de 1 a 604800 (1 segundo a 1 semana). Este parâmetro é uma garantia de melhor esforço, e o agendador tenta executar a atualização o mais próximo possível do intervalo especificado.

comment

Não

Comentário sobre a tabela.

Exemplo

SET odps.namespace.schema=true; 
CREATE OBJECT TABLE ot_demo_day 
WITH serdeproperties ( 
 'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole') 
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/';

Visualizar propriedades da Object Table

Sintaxe

DESC <object_table_name>

Parâmetros

object_table_name: Obrigatório. Nome da tabela.

Exemplo

SET odps.namespace.schema=true; 
DESC ot_demo_day; 

O seguinte resultado é retornado:

+------------------------------------------------------------------------------------+
| Owner:                    ALIYUN$****@test.aliyunid.com                        |
| Project:                  test_objecttable                                         |
| Schema:                   default                                                  |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2024-09-02 20:01:56                                      |
| LastDDLTime:              2024-09-02 20:01:56                                      |
| LastModifiedTime:         2024-09-02 20:01:56                                      |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| key             | varchar(2048) |       | The name of the object.                     |
| size            | bigint     |       | The size of the returned object in bytes.   |
| type            | varchar(32) |       | The type of the object and valid values: Normal, Multipart, Appendable, and Symlink. |
| last_modified   | timestamp  |       | The last modified time of the object.       |
| storage_class   | varchar(32) |       | The storage class of the object.            |
| etag            | varchar(64) |       | The entity tag (ETag). When an object is created, an ETag is created to identify the content of the object. |
| restore_info    | varchar(256) |       | The restoration status of the object.       |
| owner_id        | bigint     |       | The ID of the bucket owner.                 |
| owner_display_name | varchar(256) |       | The display name of the bucket owner.       |
+------------------------------------------------------------------------------------+

A tabela a seguir descreve as principais colunas no resultado.

Parâmetro

Tipo

Permite nulo

Descrição

key

VARCHAR(2048)

A restrição de comprimento no OSS é de 1.023 caracteres.

Para mais informações, consulte OSS object naming rules and examples.

False

Caminho relativo do objeto dentro da Object Table.

size

BIGINT

False

Tamanho do objeto em bytes.

type

VARCHAR(32)

False

Tipo do objeto no OSS: Normal, Multipart, Appendable ou Symlink.

last_modified

TIMESTAMP_NTZ

False

Momento da última modificação dos dados do objeto no OSS.

storage_class

VARCHAR(32)

False

Classe de armazenamento do objeto no OSS. Para obter uma lista das classes de armazenamento, consulte Storage classes.

etag

VARCHAR(64)

False

O ETag é uma tag de entidade gerada para um objeto. Ela identifica se o conteúdo de um objeto foi alterado entre atualizações, mas não funciona como identificador exclusivo.

restore_info

VARCHAR(256)

True

Indica se um objeto foi restaurado do cold storage. Se um objeto estiver sendo restaurado, esta coluna fornecerá informações relevantes.

owner_id

BIGINT

True

ID do proprietário do objeto.

owner_display_name

VARCHAR(256)

True

Nome de exibição do proprietário do objeto.

Visualizar instrução CREATE TABLE

Sintaxe

SHOW CREATE TABLE <object_table_name>;

Parâmetros

object_table_name: Obrigatório. Nome da tabela.

Exemplo

SET odps.namespace.schema=true; 
SHOW CREATE TABLE ot_demo_day; 

O seguinte resultado é retornado:

CREATE OBJECT TABLE IF NOT EXISTS yunqi_object_****.`default`.ot_demo_day 
WITH SERDEPROPERTIES ( 
  'serialization.format'='1', 
  'odps.properties.rolearn'='acs:ram::139699392458****:role/aliyunodpsdefaultrole') 
LOCATION 
  'oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/' 
TBLPROPERTIES ( 
  'last_modified_time'='1731478307', 
  'transient_lastDdlTime'='1731478307', 
  'metadata.cache.mode'='manual', 
  'metadata.staleness.seconds'='3600');

Atualizar metadados da Object Table

Os dados reais de uma Object Table são armazenados no OSS. O MaxCompute armazena em cache os metadados desses objetos e utiliza esses metadados em cache para consultas e computações. Portanto, atualize o cache antes de usar uma Object Table. É possível atualizar os metadados manualmente ou configurar atualizações periódicas durante a criação da tabela.

Nota

Tanto as atualizações manuais quanto as periódicas são atualizações completas.

Atualização manual

Cada atualização realiza uma sincronização completa dos metadados. Você pode controlar o momento e a frequência dessas atualizações.

  • Sintaxe

    ALTER TABLE <objecttable_name> REFRESH METADATA;
  • Parâmetros

    objecttable_name: Obrigatório. Nome da tabela.

  • Exemplo

    SET odps.namespace.schema=true; 
    ALTER TABLE ot_demo_day REFRESH METADATA;

Atualização periódica

Se os arquivos no diretório do OSS mapeado pela Object Table mudarem frequentemente, configure atualizações periódicas de metadados. Isso reduz custos de manutenção ao especificar os parâmetros relevantes durante a criação da tabela.

  • Sintaxe

    SET odps.namespace.schema=true;
    SET odps.sql.type.system.odps2 = true;
    
    CREATE OBJECT TABLE ot_demo_day 
    WITH serdeproperties (
     'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole'
    )
    location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/'
    tblproperties (
      'metadata.cache.mode' = 'periodic',
      'metadata.staleness.seconds' = '3600'
    );
    
  • Parâmetros

    • metadata.staleness.seconds: Intervalo de atualização. Este parâmetro é obrigatório para o modo periodic. O valor pode variar de [1, 604800], representando de 1 segundo a 1 semana. Trata-se de uma garantia de melhor esforço, e o agendador tentará executar a atualização o mais próximo possível do intervalo especificado.

    • metadata.cache.mode: Modo de atualização. As opções disponíveis são:

      • periodic: Acionamento periódico.

      • crontab: Atualização agendada.

      • manual: Acionamento manual (padrão). Permite controlar o momento do acionamento.

Atualização agendada

Caso os arquivos no diretório do OSS mapeado pela Object Table sofram alterações frequentes, agende atualizações de metadados. Essa abordagem reduz custos de manutenção mediante a especificação dos parâmetros relevantes na criação da tabela.

  • Sintaxe

    SET odps.namespace.schema=true;
    SET odps.sql.type.system.odps2 = true;
    
    CREATE OBJECT TABLE ot_demo_day 
    WITH SERDEPROPERTIES (
     'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole'
    )
    LOCATION 'oss://oss-cn-region-internal.aliyuncs.com/odps-external-****/ottest/'
    TBLPROPERTIES (
      'metadata.cache.mode' = 'crontab',
      'metadata.crontab.expression' = 'your_timed_expression'
    );
  • Parâmetros

    • metadata.crontab.expression: Expressão cron que define o agendamento. Por exemplo, para acionar uma atualização às 14h00 todos os dias, use a expressão 0 0 14 * * ?, que significa 0 segundos, 0 minutos, hora 14 (14h00), every dia, every mês e ? para não especificar um dia da semana (mutuamente exclusivo com o campo de dia do mês para evitar conflitos).

    • metadata.cache.mode: Modo de atualização. As opções disponíveis incluem:

      • crontab: Atualização agendada.

      • periodic: Acionamento periódico.

      • manual: Acionamento manual (padrão). Permite controlar o momento do acionamento.

Visualizar tarefas de atualização

Execute o comando abaixo para visualizar o histórico de tarefas de atualização.

SHOW refresh task history FOR object TABLE <object_table_name>;
  • Parâmetros

    • <object_table_name> deve ser uma object table.

    • Valores de retorno: ID da instância da tarefa de atualização (InstanceId), horário de criação (CreateTime), horário de término (EndTime) e status (Status).

    • Se o Status for Failed, execute wait InstanceId; para visualizar o log e verificar detalhes do erro.

  • Exemplo

    -- View the historical refresh tasks for the Object Table.
    SET odps.namespace.schema=true; 
    SHOW refresh task history for object table ot_demo_day04;
    
    -- The following result is returned.
    ID = 20260105*******f
    +---------------------------------------------------------------------------------------------------+
    | Project:                  test_project                                                                              |
    | Schema:                   default                                                                                           |
    | Task:                     ***                        |
    +---------------------------------------------------------------------------------------------------+
    | History:                                                                                          |
    +---------------------------------------------------------------------------------------------------+
    | InstanceId                       | CreateTime             | EndTime                | Status       |
    +---------------------------------------------------------------------------------------------------+
    | 20260105******************ks     | 2026-01-05 14:12:00    | 2026-01-05 14:12:04    | Terminated   |
    | 20260105******************y3     | 2026-01-05 14:10:00    | 2026-01-05 14:10:03    | Terminated   |
    +---------------------------------------------------------------------------------------------------+
    
    OK

Consultar Object Tables

Depois que uma Object Table busca os metadados de arquivos de um diretório do OSS, consulte a tabela para navegar por esses metadados. Também é possível usar instruções SQL para realizar cálculos sobre os metadados, como filtragem, correspondência, agregações, joins, window functions, ORDER BY e LIMIT.

Sintaxe

SELECT * FROM <object_table_name>;

Parâmetros

object_table_name: Obrigatório. Nome da tabela.

Exemplo

-- You can query the data uploaded to the specified OSS directory. If the amount of data is large, you can limit the result to five rows.
SET odps.namespace.schema=true; 
SELECT * FROM  ot_demo_day [limit 5];

Excluir uma Object Table

Uma Object Table armazena metadados do usuário em cache, o que consome armazenamento e gera custos. Caso não precise mais dos dados em cache, exclua a Object Table. Recrie-a posteriormente, se necessário.

Sintaxe

DROP TABLE [IF EXISTS] <object_table_name>; 

Parâmetros

object_table_name: Obrigatório. Nome da tabela.

Exemplo

SET odps.namespace.schema=true; 
DROP TABLE IF EXISTS ot_demo_day;

FAQ

ODPS-0010000:System internal error

  • Sintoma

    A seguinte mensagem de erro é relatada:

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Causa

    Você usou um endpoint público para o OSS ao criar a Object Table.

  • Solução

    Ao criar uma Object Table, o parâmetro location deve conter um endpoint interno para o oss_endpoint. Para obter informações sobre como adquirir o endpoint interno, consulte Parameter description. Se o erro persistir após alterar o endereço para um endpoint interno, entre em contato com a equipe de suporte técnico do MaxCompute enviando um ticket para suporte.

Falha na atualização periódica

  • Sintoma

Você definiu parâmetros de atualização periódica ao criar a Object Table. No entanto, a atualização não é executada quando o intervalo é atingido.

  • Solução

Certifique-se de que o parâmetro location usado para criar a Object Table especifique um endpoint interno do OSS. Para mais informações sobre a criação de uma Object Table, consulte Parameters.