Todos os produtos
Search
Central de documentação

MaxCompute:Metadata Processing (Java)

Última atualização: Sep 19, 2026

As Object Tables do MaxCompute fornecem UDFs Java para extrair metadados e identificar os formatos de arquivos de dados não estruturados armazenados no OSS.

No processamento de dados de IA, extrair metadados de dados não estruturados, como imagens, áudio, vídeo, PDFs e documentos do Office, é um caso de uso típico das Object Tables. Dados não estruturados armazenados no OSS precisam passar por pipelines como treinamento de modelos, compreensão de conteúdo ou geração aumentada por recuperação (RAG). Antes disso, geralmente é necessário extrair os metadados dos arquivos em lotes. Por exemplo:

  • Extraia as dimensões, o formato e as informações EXIF de imagens.

  • Extraia a duração, a taxa de amostragem, o formato de codificação e os quadros-chave de arquivos de áudio e vídeo.

  • Extraia o número de páginas, o autor e a data de criação de documentos PDF ou Word.

O MaxCompute fornece as seguintes UDFs Java para extrair metadados e pré-processar arquivos de Object Tables de forma leve diretamente no SQL. Use os resultados extraídos para criar tabelas de metadados estruturados, filtrar ou amostrar conjuntos de dados e alimentar tarefas subsequentes, como engenharia de recursos e vetorização.

Baixe o pacote JAR da UDF Java

Baixe o pacote JAR da UDF Java: lakehouse-udf-1.0-SNAPSHOT.jar

Lista de AI-UDF

GetFileMeta

A função GetFileMeta extrai metadados de um arquivo e retorna um Map<String, String>.

  • Formatos de arquivo compatíveis

    Tipo

    Formatos compatíveis

    Imagem

    jpg, jpeg, png, bmp, gif, tif, tiff

    Áudio/Vídeo

    mp3, mp4, avi, wav

    Documento do Office

    pdf, doc, docx, ppt, pptx, xls, xlsx

  • Assinaturas

    evaluate(Binary data, String fileFormat)
    evaluate(Binary data, String fileFormat, String metadataKeyDelimiter)
    evaluate(Binary data, String fileFormat, String metadataKeyDelimiter, String parseFailPolicy)
    evaluate(Binary data, String fileFormat, Map<String, String> options)
  • Parâmetros

    Parâmetro

    Tipo

    Padrão

    Descrição

    metadataKeyDelimiter

    String

    "."

    O delimitador para chaves de metadados hierárquicas.

    Em arquivos de imagem, esse parâmetro atua como um delimitador entre o diretório de metadados e a tag. Por exemplo:

    • Padrão: "EXIF.DateTimeOriginal"

    • Personalizado /: "EXIF/DateTimeOriginal"

    password

    String

    null

    A senha para o arquivo PDF criptografado. Aplica-se apenas ao formato pdf. Não há suporte para outros arquivos criptografados, como documentos do Office.

    parseFailPolicy

    String

    "OUTPUT_NULL"

    A política para lidar com falhas de análise. Os valores válidos são:

    • OUTPUT_DEFAULT: Retorna null silenciosamente.

    • OUTPUT_NULL: Retorna null silenciosamente.

    • WARN_AND_NULL: Gera um log de aviso e retorna null.

    • THROW_EXCEPTION: Lança uma exceção e interrompe o processo.

    metadataKeyExclusionRegex

    String

    null

    Um filtro de expressão regular para chaves de metadados. Remove os itens de metadados cujas chaves correspondem à expressão regular. Separe vários padrões por vírgulas. Por exemplo:

    • "Photoshop.*" (remove entradas cujas chaves começam com Photoshop)

    • ".Path Info." (remove entradas cujas chaves contêm a substring Path Info)

GetFileFormat

A função GetFileFormat extrai o formato detalhado de um arquivo, como json, csv, orc ou parquet. O tipo de retorno é String.

  • Assinaturas

    • Uso 1: Extrair o formato a partir do nome do arquivo

      evaluate(String fileName, String parseFailPolicy)
    • Uso 2: Extrair o formato a partir de dados binários e do nome do arquivo

      evaluate(Binary data, String fileName, String parseFailPolicy)
  • Parâmetros

    parseFailPolicy: A política para lidar com falhas de análise. O tipo de dados é String. O valor padrão é "OUTPUT_NULL". Os valores válidos são:

    • OUTPUT_DEFAULT: Retorna null silenciosamente.

    • OUTPUT_NULL: Retorna null silenciosamente.

    • WARN_AND_NULL: Gera um log de aviso e retorna null.

    • THROW_EXCEPTION: Lança uma exceção e interrompe o processo.

GetFileMediaType

A função GetFileMediaType detecta o tipo de mídia MIME de nível superior de um arquivo com base no registro IANA. O tipo de retorno é String.

  • Tipos de mídia compatíveis:

    • application

    • audio

    • example

    • font

    • haptics

    • image

    • message

    • model

    • multipart

    • text

    • video

  • Assinaturas

    • Uso 1: Detectar o tipo de mídia a partir do nome do arquivo

      evaluate(String fileName, String parseFailPolicy)
    • Uso 2: Detectar o tipo de mídia a partir de dados binários e do nome do arquivo

      evaluate(Binary data, String fileName, String parseFailPolicy)
  • Parâmetros

    parseFailPolicy: A política para lidar com falhas de análise. O tipo de dados é String. O valor padrão é "OUTPUT_NULL". Os valores válidos são:

    • OUTPUT_DEFAULT: Retorna null silenciosamente.

    • OUTPUT_NULL: Retorna null silenciosamente.

    • WARN_AND_NULL: Gera um log de aviso e retorna null.

    • THROW_EXCEPTION: Lança uma exceção e interrompe o processo.

GetFileContentType

A função GetFileContentType retorna o tipo de conteúdo MIME completo (Content-Type) de um arquivo. O tipo de retorno é String.

  • Assinaturas

    • Uso 1: Detectar o tipo de conteúdo a partir do nome do arquivo

      evaluate(String fileName, String parseFailPolicy)
    • Uso 2: Detectar o tipo de conteúdo a partir de dados binários e do nome do arquivo

      evaluate(Binary data, String fileName, String parseFailPolicy)
  • Parâmetros

    parseFailPolicy: A política para lidar com falhas de análise. O tipo de dados é String. O valor padrão é "OUTPUT_NULL". Os valores válidos são:

    • OUTPUT_DEFAULT: Retorna null silenciosamente.

    • OUTPUT_NULL: Retorna null silenciosamente.

    • WARN_AND_NULL: Gera um log de aviso e retorna null.

    • THROW_EXCEPTION: Lança uma exceção e interrompe o processo.

GetFileName

A função GetFileName extrai o nome do arquivo a partir de um caminho do arquivo. O tipo de retorno é String.

  • Assinatura

    evaluate(String filePath, String parseFailPolicy)
  • Parâmetros

    parseFailPolicy: A política para lidar com falhas de análise. O tipo de dados é String. O valor padrão é "OUTPUT_NULL". Os valores válidos são:

    • OUTPUT_DEFAULT: Retorna null silenciosamente.

    • OUTPUT_NULL: Retorna null silenciosamente.

    • WARN_AND_NULL: Gera um log de aviso e retorna null.

    • THROW_EXCEPTION: Lança uma exceção e interrompe o processo.

Exemplos de uso

  1. Prepare os dados

    Faça login no OSS console e faça upload dos seus dados. Este exemplo usa os seguintes dados de teste: object_table_demo_files.zip.

  2. Faça upload do pacote JAR da UDF e crie as UDFs

    Baixe o pacote JAR da UDF Java: lakehouse-udf-1.0-SNAPSHOT.jar

    Este exemplo usa o odpscmd. Para outras formas de fazer upload de um pacote JAR, consulte Java UDFs.

    -- Enter the odpscmd environment.
    SET odps.sql.allow.namespace.schema=true;
    SET odps.namespace.schema=true;
    SET odps.sql.type.system.odps2=true;
    
    -- Create an Object Table.
    DROP TABLE IF EXISTS udf_demo;
    CREATE OBJECT TABLE udf_demo 
    WITH serdeproperties (
      'odps.properties.rolearn'='acs:ram::<uid>:role/<role_name>'
    ) 
    LOCATION 'oss://<endpoint>/<bucket>/path/to/files/'; -- Replace with the OSS location of your uploaded files.
    -- Refresh the Object Table metadata.
    ALTER TABLE udf_demo refresh metadata;
    
    -- Upload the UDF JAR package and then create the functions.
    add jar /path/to/lakehouse-udf-1.0-SNAPSHOT.jar;  -- Replace with the absolute path to your local UDF JAR package.
    create function get_file_name as 'com.aliyun.odps.lakehouse.udf.GetFileName' using 'lakehouse-udf-1.0-SNAPSHOT.jar';
    create function get_file_media_type as 'com.aliyun.odps.lakehouse.udf.GetFileMediaType' using 'lakehouse-udf-1.0-SNAPSHOT.jar';
    create function get_file_content_type as 'com.aliyun.odps.lakehouse.udf.GetFileContentType' using 'lakehouse-udf-1.0-SNAPSHOT.jar';
    create function get_file_format as 'com.aliyun.odps.lakehouse.udf.GetFileFormat' using 'lakehouse-udf-1.0-SNAPSHOT.jar';
    create function get_file_meta as 'com.aliyun.odps.lakehouse.udf.GetFileMeta' using 'lakehouse-udf-1.0-SNAPSHOT.jar';
  3. Use funções em uma Object Table

    set odps.sql.allow.namespace.schema=true;
    set odps.namespace.schema=true;
    set odps.sql.type.system.odps2=true;
    
    -- Query the file content type and file media type.
    select 
      key, 
      get_file_content_type(key, "OUTPUT_DEFAULT"), 
      get_file_media_type(key, "OUTPUT_DEFAULT") 
    from udf_demo;
    -- Result:
    +------------+------------+------------+
    | key        | _c1        | _c2        | 
    +------------+------------+------------+
    | lancePaper.pdf | application/pdf | application | 
    | sample.avi | video/x-msvideo | video      | 
    | sample.doc | application/msword | application | 
    | sample.gif | image/gif  | image      | 
    | sample.jpeg | image/jpeg | image      | 
    | sample.jpg | image/jpeg | image      | 
    | sample.mp3 | audio/mpeg | audio      | 
    | sample.mp4 | video/mp4  | video      | 
    | sample.png | image/png  | image      | 
    | sample.ppt | application/vnd.ms-powerpoint | application | 
    | sample.wav | audio/vnd.wave | audio      | 
    | sample.xls | application/vnd.ms-excel | application | 
    +------------+------------+------------+
    
    -- Query the file format and metadata (assuming all file names have a format suffix, such as "xxx.pdf").
    select 
      key,
      get_file_format(key, 'OUTPUT_DEFAULT'), 
      get_file_meta(
        -- The get_data_from_oss function gets the file content from OSS.
        get_data_from_oss('three_tier_model.default.udf_demo', key), -- File content in binary format.
        get_file_format(key, 'OUTPUT_DEFAULT')  -- File type, such as pdf, mp3, avi, or jpg.
      )
    from udf_demo;

FAQ

Como lidar com erros de conflito de classes Java

  • Mensagem de erro

    java.lang.LinkageError: loader constraint violation: 
      when resolving overridden method "org.apache.xerces.jaxp.SAXParserImpl.parse(Lorg/xml/sax/InputSource;Lorg/xml/sax/helpers/DefaultHandler;)V" 
      the class loader (instance of com/aliyun/odps/udf/impl/utils/OdpsUserCodeLoaderFactory$ChildFirstLoader) of the current class, org/apache/xerces/jaxp/SAXParserImpl, 
      and its superclass loader (instance of <bootloader>), have different Class objects for the type org/xml/sax/helpers/DefaultHandler used in the signature
        at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source)
        at org.apache.tika.mime.MimeTypesReader.newSAXParser(MimeTypesReader.java:223)
  • Causa

    O pacote JAR da UDF deste tópico pode causar conflitos de classes com outros recursos em seu projeto, como UDFs Java existentes.

  • Solução

    Crie um novo schema, faça upload do pacote JAR da UDF para ele e, em seguida, crie e use a UDF. Se o problema persistir, crie um novo projeto antes de usar a função.