Todos os produtos
Search
Central de documentação

MaxCompute:Tipo de dados Blob e armazenamento multimodal

Última atualização: Jun 27, 2026

Visão geral

O tipo de dados Blob (Binary Large Object) no MaxCompute permite armazenar objetos binários grandes e não estruturados, como imagens, áudio, vídeos e documentos, diretamente em tabelas. Com o tipo Blob, você consolida arquivos brutos, metadados e anotações de dados multimodais em uma única tabela do MaxCompute. Isso possibilita usar SQL para consultas e manutenção unificadas, além de executar processamento em lote com MaxFrame e funções definidas pelo usuário (UDFs) SQL.

Casos de uso

  • Gerenciamento de conjuntos de dados de treinamento de IA: Armazene arquivos de imagem, áudio ou vídeo junto com seus rótulos e anotações correspondentes em uma única tabela e use SQL para filtrar amostras de dados específicas.

  • Pipelines de processamento de dados multimodais: Unifique o armazenamento de resultados intermediários e finais de pipelines de múltiplas etapas, como extração de quadros de vídeo, transcrição de áudio para texto e rotulagem de conteúdo.

  • Camada de cache para processamento multimodal: Funcione como camada de cache para fontes de dados como armazenamento de objetos, melhorando o throughput de computação paralela em larga escala com MaxFrame e SQL, superando os limites de QPS associados a solicitações em lote de arquivos pequenos.

  • Ingestão de dados não estruturados: Importe arquivos de vários sistemas de armazenamento externos para o MaxCompute e enriqueça-os com metadados para construir uma biblioteca de ativos não estruturados de nível empresarial, aproveitando garantias transacionais e controle de acesso unificado.

Especificações

Recurso

Descrição

Limite de tamanho

Até 5 GB por objeto Blob em uma célula.

Formato de armazenamento

Formato binário

Formato de tabela compatível com Blob

Delta Table com anexação. As colunas Blob herdam recursos do formato de tabela, incluindo transações ACID, camadas de armazenamento e snapshots.

Serviços de otimização de Blob

  • Compactação automática de múltiplos arquivos Blob pequenos.

  • Compressão automática para tipos MIME baseados em texto.

Limitações

  • Ative os tipos de dados do MaxCompute 2.0: SET odps.sql.type.system.odps2=true;.

  • O tipo Blob não pode ser aninhado em tipos complexos como ARRAY, MAP ou STRUCT.

  • Uma coluna Blob não pode ser usada como chave primária ou chave de partição.

  • Não use uma coluna Blob em cláusulas ORDER BY, GROUP BY ou JOIN ON.

Armazenamento multimodal unificado

A figura a seguir compara uma arquitetura tradicional de armazenamento distribuído com a arquitetura de armazenamento multimodal unificado do MaxCompute.

  • À esquerda, a abordagem tradicional armazena arquivos brutos em armazenamento de objetos, enquanto metadados e anotações ficam dispersos em diferentes data warehouses e data lakes. Consultar e processar esses dados exige coordenação entre vários sistemas.

  • À direita, a abordagem do MaxCompute utiliza o tipo de coluna Blob para armazenar arquivos binários, como imagens, áudio e vídeos, juntamente com metadados estruturados em uma única tabela. Isso viabiliza consultas SQL, processamento em lote com MaxFrame e importação de dados via SDK.

image.svg

O MaxCompute oferece suporte nativo ao tipo de coluna Blob, permitindo armazenar todos os dados — incluindo arquivos brutos, metadados e anotações — em uma única tabela:

-- Example of a multimodal dataset table
CREATE TABLE multimodal_dataset (
    id          BIGINT NOT NULL,
    image       BLOB,                       -- Raw image binary
    label       STRING,                     -- Classification label
    bbox        STRING,                     -- Annotation bounding box (JSON)
    resolution  STRING,                     -- Resolution metadata
    created_at  DATETIME                    -- Ingestion time
) TBLPROPERTIES("table.format.version"="2");

Abordagens tradicionais versus multimodais do MaxCompute

Arquiteturas tradicionais distribuem dados multimodais — como arquivos brutos, metadados e anotações — por vários sistemas, como armazenamento de objetos, data warehouses e data lakes. O MaxCompute resolve esses desafios usando o tipo de coluna Blob para unificar todos os dados em uma única tabela:

Abordagem tradicional

Solução MaxCompute

Altos custos de manutenção: Uma arquitetura multimecanismo dispersa os dados, dificultando o gerenciamento unificado.

Armazenamento e gerenciamento unificados: Arquivos brutos, metadados e anotações residem em uma única tabela, eliminando a necessidade de manter múltiplos sistemas.

Alta latência para consultas entre mecanismos: Filtrar imagens por rótulo exige várias etapas, como consultar um banco de dados para obter metadados antes de recuperar arquivos do armazenamento de objetos.

Filtragem direta com SQL: Consulte dados com base em condições como rótulos ou carimbos de data/hora sem exigir acesso em múltiplos saltos entre sistemas.

Falta de garantias ACID unificadas: A consistência dos dados, as permissões de acesso e a linhagem de dados não podem ser gerenciadas centralmente.

Transações ACID completas e controle de acesso unificado: Cada operação de gravação é atômica e consistente, e todos os dados são gerenciados pelo sistema de permissões do MaxCompute.

Pipelines de processamento fragmentados: Um fluxo de trabalho multimodal típico (extração de vídeo para áudio, transcrição, divisão de quadros, rotulagem de conteúdo e extração de metadados) abrange vários sistemas, resultando em movimentação frequente de dados.

Pipeline de processamento unificado: Resultados intermediários e finais de pipelines de múltiplas etapas são centralizados em uma única tabela, eliminando a movimentação de dados entre sistemas.

Modelo de armazenamento e benefícios de desempenho

Modelo de armazenamento

O Blob do MaxCompute utiliza um modelo de armazenamento com separação entre referência e entidade, que divide as colunas de dados estruturados das colunas de objetos grandes Blob em arquivos físicos distintos. Conforme ilustrado na figura abaixo, a arquitetura possui três camadas:

  • A camada de acesso fornece diversos métodos, incluindo SQL, MaxFrame, odpscmd, SDK e Storage API.

  • A camada de serviço cuida da compactação, roteamento de referências Blob, gerenciamento de transações ACID, camadas de armazenamento e backups.

  • A camada de armazenamento divide os dados em:

    • Data File (arquivo de dados estruturados): Armazena dados de colunas não-Blob (como id, rótulo e metadados) e um ponteiro de referência (Reference) para a coluna Blob. Esses arquivos usam um formato de armazenamento colunar padrão que suporta pushdown de predicados eficiente e poda de colunas.

    • Blob File (arquivo de objeto grande): Armazena o conteúdo binário bruto dos objetos Blob, juntamente com checksums de dados e informações de índice. Os arquivos de armazenamento são divididos ou mesclados dinamicamente com base no tamanho de cada objeto Blob.

image

Ao gravar dados, o sistema carrega o conteúdo binário em um Blob File e escreve um ponteiro de referência no Data File estruturado. Durante a leitura, o sistema primeiro recupera o ponteiro de referência da coluna estruturada e depois carrega o conteúdo binário do Blob File conforme necessário. O upload do Blob e a gravação da referência ocorrem atomicamente em um único commit de sessão, e o MaxCompute gerencia as operações de leitura/gravação como uma única transação para garantir a atomicidade.

Esse processo é transparente e não requer nenhum tratamento especial.

Benefícios de desempenho

  • Mesclagem e compressão de arquivos pequenos

    • O armazenamento Blob mescla automaticamente muitos objetos pequenos (como imagens, trechos HTML e logs de sessão JSON) em Blob Files maiores, suportando operações de leitura e gravação em lote. Isso resolve as limitações de QPS associadas a solicitações de um grande número de arquivos pequenos.

    • Objetos baseados em texto são comprimidos automaticamente na gravação e descomprimidos na leitura. Para trechos HTML e texto JSON, por exemplo, isso pode reduzir o espaço de armazenamento em média 50%, diminuindo os custos.

  • Filtragem eficiente em metadados sem varredura de objetos de arquivo grandes

    Ao filtrar dados com base em metadados ou colunas de rótulo (por exemplo, localizando amostras com um rótulo específico), armazenar objetos como tipo Blob em vez de tipos STRING ou BINARY pode dobrar o desempenho de ponta a ponta, em média.

    Por exemplo, considere um conjunto de dados de 1 milhão de imagens com tamanho médio de 1,4 MB. A tabela a seguir compara a sobrecarga de consulta ao armazenar a imagem como tipo BINARY versus tipo Blob:

    Método de armazenamento

    Dados verificados

    Imagem armazenada em uma coluna BINARY

    Aprox. 1.400 GB (varredura completa da tabela)

    Imagem armazenada em uma coluna BLOB

    Aprox. 30 GB (apenas Data File)

    Ao executar a seguinte consulta de filtragem por rótulo, a tabela com o tipo BINARY realiza uma varredura completa de 1.400 GB. Em contraste, a tabela com o tipo Blob verifica apenas 30 GB de dados, uma redução de 45 vezes.

    -- Image stored as BINARY type
    SELECT id, image FROM multimodal_dataset_binary Where label = "cat";
    -- Image stored as Blob type
    SELECT id, read_blob(image) FROM multimodal_dataset_blob Where label = "cat";

Importação e exportação de dados

SDK

Utilize este método para leitura e gravação em lote de alto throughput de dados em larga escala. Use o MaxCompute Java SDK versão 0.57.1-public ou posterior.

Para objetos Blob menores que 1 MB, utilize a interface de upload em lote. O SDK agrupa automaticamente os objetos em lotes de 64 MB para upload.

<dependency>
    <groupId>com.aliyun.odps</groupId>
    <artifactId>odps-sdk-storage-api</artifactId>
    <version>0.57.1-public</version>
</dependency>

Object table

Use este método para importar muitos arquivos não estruturados existentes (como imagens, áudio, vídeo e documentos) do OSS para uma tabela do MaxCompute com uma coluna Blob. Crie uma Object Table para acessar objetos e metadados em um bucket do OSS e, em seguida, insira-os em massa em uma tabela multimodal do MaxCompute. Esse processo não exige área de staging.

Exemplo:

-- Step 1: Create an Object Table to associate with OSS data
SET odps.namespace.schema=true;
SET odps.sql.type.system.odps2 = true;
CREATE OBJECT TABLE oss_images
LOCATION 'oss://<accessKeyId>:<accessKeySecret>@<endpoint>/<bucket>/<path>/';

-- Refresh metadata
ALTER TABLE oss_images REFRESH METADATA;

-- Step 2: Create a multimodal table that contains a Blob column
CREATE TABLE ods_dataset_images (
  key VARCHAR(2048) COMMENT 'Object key',
  size BIGINT COMMENT 'Object size',
  type VARCHAR(32) COMMENT 'Object type',
  last_modified TIMESTAMP_NTZ COMMENT 'Last modified time',
  storage_class VARCHAR(32) COMMENT 'Storage class',
  etag VARCHAR(64) COMMENT 'ETag information',
  restore_info VARCHAR(256) COMMENT 'Restore information',
  owner_id BIGINT COMMENT 'Owner ID',
  owner_display_name VARCHAR(256) COMMENT 'Owner display name',
  data_file BLOB COMMENT 'Data file'
) COMMENT 'Multimodal table'
tblproperties ('table.format.version'='2') ;

-- Step 3: Bulk import data into the Blob table
INSERT OVERWRITE ods_dataset_images
SELECT key, size, type, last_modified, storage_class, etag, restore_info, owner_id, owner_display_name,
  to_blob(get_data_from_oss('<project_name>.default.oss_images', key)) AS data_file
  FROM oss_images;

Sintaxe SQL

DDL

Defina múltiplas colunas Blob em uma instrução CREATE TABLE.

CREATE TABLE video_dataset (
    id        BIGINT,
    video     BLOB,
    thumbnail BLOB,
    title     STRING
) TBLPROPERTIES('table.format.version'='2');

Funções Blob

to_blob()

A função to_blob() converte dados de string ou binários em um objeto Blob.

Função

Descrição

to_blob(STRING value)

Converte toda a string em um Blob.

to_blob(BINARY value)

Converte todo o valor binário em um Blob.

to_blob(STRING value, BIGINT offset)

Cria um Blob a partir de uma substring iniciando no offset especificado.

to_blob(BINARY value, BIGINT offset)

Cria um Blob a partir de uma substring binária iniciando no offset especificado.

to_blob(STRING value, BIGINT offset, BIGINT length)

Cria um Blob a partir de uma substring de comprimento especificado, iniciando no offset definido.

to_blob(BINARY value, BIGINT offset, BIGINT length)

Cria um Blob a partir de uma substring binária de comprimento especificado, iniciando no byte offset definido.

-- Create a Blob from a string
SELECT to_blob('hello world'); -- Returns: Blob{reference=CAEQAxqqAgEAAAAJA...}

-- Create a Blob from hexadecimal binary data
SELECT to_blob(X'89504E47');   -- PNG file header

-- Substring with an offset
SELECT to_blob('hello world', 6);           -- Result: 'world'
SELECT to_blob('hello world', 0, 5);        -- Result: 'hello'

read_blob()

A função read_blob() retorna o conteúdo de um objeto Blob como STRING ou BINARY.

Função

Descrição

read_blob(BLOB value)

Lê o conteúdo completo do Blob como uma STRING.

read_blob(BLOB value, BIGINT offset)

Lê o conteúdo a partir do offset especificado.

read_blob(BLOB value, BIGINT offset, BIGINT length)

Lê um comprimento especificado de conteúdo a partir do offset indicado.

-- Read the content of a Blob
SELECT id, read_blob(image) FROM image_dataset WHERE label = 'cat' LIMIT 10;

-- Read partial content (for example, to check the file header)
SELECT id, read_blob(content, 0, 4) AS file_header FROM media_library;

-- Nested usage
SELECT read_blob(to_blob('hello world'));  -- Returns 'hello world'

length()

-- Gets the length of a Blob in bytes
SELECT id, length(read_blob(image)) AS image_size FROM image_dataset;

Guia de início rápido

-- Create a table with a Blob column
CREATE TABLE blob_table (col1 BLOB)
TBLPROPERTIES (
  "table.format.version"="2" 
);

-- Write data
INSERT INTO blob_table VALUES (to_blob("hello world"));

-- Read data
SELECT read_blob(col1) FROM blob_table;