Todos los productos
Search
Centro de documentos

MaxCompute:Definición de tabla de objetos

Última actualización: Sep 03, 2026

MaxCompute introduce la función de tabla de objetos, que permite al motor de cómputo del almacén de datos acceder a datos no estructurados y a sus metadatos en el almacenamiento de data lake. Este tema describe la sintaxis de los comandos y proporciona ejemplos de uso.

Contexto

En muchos flujos de trabajo de IA, los desarrolladores de almacenes de datos que conocen bien los datos y la lógica de negocio deben preprocesar o procesar datos no estructurados para modelos grandes. Estas tareas aprovechan la capacidad de cómputo a gran escala y bajo costo de las plataformas de big data. Con frecuencia, estos procesos y sus resultados interactúan con datos en el almacén de datos o en el data lake.

El uso de SQL para procesar datos no estructurados presenta varios desafíos:

  • Al leer desde object storage, los motores SQL de big data no pueden determinar el tamaño de los objetos, lo que complica la optimización del plan de ejecución y dificulta controlar la concurrencia o iniciar un número adecuado de tareas simultáneas. Sin un predicate pushdown eficaz, no se aprovecha por completo la capacidad de cómputo, especialmente en casos de sesgo de datos.

  • La lectura de metadatos desde object storage introduce una alta latencia porque cada consulta requiere una llamada remota al servicio de almacenamiento.

  • Las listas de archivos de object storage solo se pueden recuperar de forma secuencial dentro de un único proceso en una función de tabla definida por el usuario (UDTF), lo que resulta en un rendimiento deficiente en la lectura de datos.

  • Debe implementar la lógica de autorización y conectividad de red dentro de funciones definidas por el usuario (UDF) para conectarse a los servicios de almacenamiento.

  • Los almacenes de datos tradicionales no ofrecen funciones para cargar imágenes personalizadas de forma segura ni un entorno de ejecución seguro para UDF. Además, las llamadas remotas requieren una gestión compleja de la concurrencia con el servicio de cómputo distribuido.

Funciones

MaxCompute introduce la función de tabla de objetos, que permite al motor de cómputo del almacén de datos acceder a datos no estructurados y a sus metadatos en el almacenamiento de data lake. Esta función ofrece las siguientes capacidades:

  • Permite que el motor lea los metadatos de los archivos de OSS como una tabla.

  • Aprovecha una tabla de metadatos para almacenar en caché los metadatos versionados de los archivos de OSS. El motor SQL puede usar luego estos metadatos para optimizaciones de consulta, como filtrado de datos y predicate pushdown.

  • Proporciona funciones integradas para leer el contenido de archivos de datos no estructurados de diversas maneras.

  • Permite que el motor SQL de MaxCompute cree divisiones concurrentes basadas en los metadatos de la tabla de objetos, lo que habilita el cómputo distribuido a gran escala para mejorar la eficiencia en la lectura y el procesamiento de datos.

  • Permite cargar una imagen personalizada para crear UDF que procesen los datos no estructurados leídos por el motor.

  • Admite el procesamiento de datos no estructurados para generar resultados estructurados y escribirlos en tablas internas o externas del almacén de datos. Las versiones futuras también admitirán la generación de resultados no estructurados y su escritura nuevamente en OSS mediante tablas de objetos.

  • Es compatible con el motor Maxframe del ecosistema Python.

Limitaciones

  • El proyecto de MaxCompute debe tener los esquemas habilitados. Para obtener más información, consulte Enable schema.

  • MaxCompute debe ser compatible con Type System 2.0.

  • Actualmente, las tablas de objetos no admiten particiones.

Facturación

  • Una Object Table almacena un conjunto de metadatos correspondientes a archivos en OSS. Se cobran tarifas de almacenamiento por los metadatos que se actualizan y se guardan en la Object Table. Para obtener más información, consulte Storage pricing. Dado que los archivos de OSS no se almacenan dentro de MaxCompute, este servicio no cobra por su almacenamiento. OSS cobra por el almacenamiento y el acceso a los datos. Para obtener más información, consulte OSS storage pricing.

  • Para las tareas que extraen y actualizan metadatos de OSS, el valor inputsize de cada archivo escaneado se basa en el tamaño de sus metadatos, no en el tamaño real del archivo. Por lo tanto, el costo total del trabajo de actualización depende de la cantidad de archivos, no de su tamaño total. Para obtener más información, consulte SQL billing for external tables.

  • Se generan cargos de cómputo cuando utiliza una Object Table y sus metadatos para analizar y extraer datos no estructurados de OSS.

    • En un modelo pay-as-you-go, el análisis de metadatos de Object Table se factura de la misma manera que una tabla interna. Para obtener más información, consulte Standard SQL billing. El procesamiento del contenido de datos no estructurados de OSS se factura como una tabla externa. Para obtener más información, consulte SQL billing for external tables.

    • En un plan de facturación por suscripción, se utilizan recursos de suscripción prepaga. Para obtener más información, consulte Computing fees (subscription).

Crear una Object Table

Sintaxis

CREATE OBJECT TABLE [IF NOT EXISTS] <objecttable_name> 
WITH SERDEPROPERTIES ('<key>' = '<value>') 
LOCATION '<location>' 
[TBLPROPERTIES ('<key>' = '<value>')] 
[COMMENT '<comment>'] 
;
Nota
  • Las tablas de objetos deben usarse en un proyecto que tenga esquemas habilitados, y debe activar el modificador de sintaxis de esquema.

  • No es necesario definir columnas para una Object Table porque sus columnas de metadatos las proporciona el sistema.

Parámetros

Parámetro

Obligatorio

Descripción

objecttable_name

Sí

El nombre de la tabla.

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

Sí

Especifica propiedades para el serializador-deserializador (SerDe). Puede especificar un rol de RAM para la autorización al establecer la clave odps.properties.rolearn. Si omite esta clave, MaxCompute utiliza el rol de RAM AliyunODPSDefaultRole de la cuenta actual de Alibaba Cloud para acceder a OSS.

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

Antes de usar esta función, asegúrese de haber completado la autorización con un clic para AliyunODPSDefaultRole. Esta autorización permite que el proyecto de MaxCompute acceda directamente a los recursos de OSS propiedad de la cuenta en la nube actual mediante un token STS.

Nota

La autorización con un clic solo es posible si el propietario del proyecto de MaxCompute y el propietario de la cuenta de OSS son la misma persona.

location

Sí

  • La ruta de OSS a la que se asigna la Object Table. El formato es oss://<oss_endpoint>/<bucket_name>/<oss_directory_name>/. Por ejemplo, oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/.

  • La Object Table extrae los metadatos de los archivos en el directorio especificado.

  • Para obtener el oss_endpoint:

    • Inicie sesión en la OSS console.

    • En la página Buckets, haga clic en el Bucket Name objetivo para abrir su página de Objects.

    • En el área Port de la página Overview, obtenga el Endpoint para Access from ECS over the Classic Network (internal network).

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

No

  • metadata.cache.mode: El modo de actualización de la caché.

    • manual: Activación manual (predeterminado).

    • periodic: Activación periódica. Este modo requiere el parámetro metadata.staleness.seconds para especificar el intervalo de actualización.

  • metadata.staleness.seconds: El intervalo de actualización en segundos. El valor puede oscilar entre 1 y 604800 (de 1 segundo a 1 semana). Este parámetro representa una garantía de mejor esfuerzo, y el programador intenta ejecutar la actualización lo más cerca posible del intervalo especificado.

comment

No

Un comentario para la tabla.

Ejemplo

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/';

Consultar propiedades de Object Table

Sintaxis

DESC <object_table_name>

Parámetros

object_table_name: Obligatorio. El nombre de la tabla.

Ejemplo

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

Se devuelve el siguiente resultado:

+------------------------------------------------------------------------------------+
| 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.       |
+------------------------------------------------------------------------------------+

La siguiente tabla describe las columnas clave del resultado.

Parámetro

Tipo

Permite nulos

Descripción

key

VARCHAR(2048)

La restricción de longitud en OSS es de 1,023 caracteres.

Para obtener más información, consulte OSS object naming rules and examples.

False

La ruta relativa del objeto dentro de la Object Table.

size

BIGINT

False

El tamaño del objeto en bytes.

type

VARCHAR(32)

False

El tipo de objeto en OSS: Normal, Multipart, Appendable o Symlink.

last_modified

TIMESTAMP_NTZ

False

La hora en que se modificaron por última vez los datos del objeto en OSS.

storage_class

VARCHAR(32)

False

La clase de almacenamiento del objeto en OSS. Para ver una lista de clases de almacenamiento, consulte Storage classes.

etag

VARCHAR(64)

False

El ETag es una etiqueta de entidad generada para un objeto. Identifica si el contenido de un objeto ha cambiado entre actualizaciones, pero no es un identificador único.

restore_info

VARCHAR(256)

True

Indica si un objeto se ha restaurado desde el almacenamiento frío. Si un objeto se está restaurando, esta columna proporciona información relevante.

owner_id

BIGINT

True

El ID del propietario del objeto.

owner_display_name

VARCHAR(256)

True

El nombre para mostrar del propietario del objeto.

Consultar sentencia CREATE TABLE

Sintaxis

SHOW CREATE TABLE <object_table_name>;

Parámetros

object_table_name: Obligatorio. El nombre de la tabla.

Ejemplo

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

Se devuelve el siguiente resultado:

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');

Actualizar metadatos de Object Table

Los datos reales de una Object Table se almacenan en OSS. MaxCompute almacena en caché los metadatos de estos objetos y utiliza dicha caché para consultas y cálculos. Por lo tanto, debe actualizar la caché antes de usar una Object Table. Puede actualizar los metadatos manualmente o configurar actualizaciones periódicas al crear la tabla.

Nota

Tanto las actualizaciones manuales como las periódicas son actualizaciones completas.

Actualización manual

Cada actualización realiza una sincronización completa de los metadatos. Usted puede controlar el momento y la frecuencia de estas actualizaciones.

  • Sintaxis

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

    objecttable_name: Obligatorio. El nombre de la tabla.

  • Ejemplo

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

Actualización periódica

Si los archivos en el directorio de OSS al que se asigna la Object Table cambian con frecuencia, puede configurar actualizaciones periódicas de metadatos. Esto reduce los costos de mantenimiento al especificar los parámetros relevantes cuando crea la tabla.

  • Sintaxis

    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: El intervalo de actualización. Este parámetro es obligatorio para el modo periodic. El valor puede oscilar entre [1, 604800], lo que representa un rango de 1 segundo a 1 semana. Este parámetro representa una garantía de mejor esfuerzo, y el programador intentará ejecutar la actualización lo más cerca posible del intervalo especificado.

    • metadata.cache.mode: El modo de actualización. Las opciones disponibles son:

      • periodic: Activación periódica.

      • crontab: Actualización programada.

      • manual: Activación manual (predeterminado). Usted puede controlar el momento de la activación.

Actualización programada

Si los archivos en el directorio de OSS al que se asigna la Object Table cambian con frecuencia, puede programar actualizaciones de metadatos. Esto reduce los costos de mantenimiento al especificar los parámetros relevantes cuando crea la tabla.

  • Sintaxis

    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: Una expresión cron que define la programación. Por ejemplo, para activar una actualización a las 2:00 PM todos los días, puede usar la expresión 0 0 14 * * ?, que significa 0 segundos, 0 minutos, hora 14 (2:00 PM), every día, every mes, y ? para no especificar un día de la semana (mutuamente excluyente con el campo de día del mes para evitar conflictos).

    • metadata.cache.mode: El modo de actualización. Las opciones disponibles son:

      • crontab: Actualización programada.

      • periodic: Activación periódica.

      • manual: Activación manual (predeterminado). Usted puede controlar el momento de la activación.

Consultar tareas de actualización

Puede ejecutar el siguiente comando para consultar el historial de tareas de actualización.

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

    • <object_table_name> debe ser una tabla de objetos.

    • Valores devueltos: El ID de instancia de la tarea de actualización (InstanceId), la hora de creación (CreateTime), la hora de finalización (EndTime) y el estado (Status).

    • Si el Status es Failed, puede ejecutar wait InstanceId; para consultar el registro y verificar los detalles del error.

  • Ejemplo

    -- 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

Consulta de Object Tables

Después de que una Object Table obtiene los metadatos de archivos de un directorio de OSS, puede consultar la tabla para explorar dichos metadatos. También puede usar sentencias SQL para realizar cálculos sobre los metadatos, como filtrado, coincidencia, agregaciones, uniones, funciones de ventana, ORDER BY y LIMIT.

Sintaxis

SELECT * FROM <object_table_name>;

Parámetros

object_table_name: Obligatorio. El nombre de la tabla.

Ejemplo

-- 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];

Eliminar una Object Table

Una Object Table almacena en caché metadatos de usuario, lo que consume almacenamiento y genera costos. Si ya no necesita los datos en caché, puede eliminar la Object Table. Puede volver a crearla más adelante si es necesario.

Sintaxis

DROP TABLE [IF EXISTS] <object_table_name>; 

Parámetros

object_table_name: Obligatorio. El nombre de la tabla.

Ejemplo

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

Preguntas frecuentes

ODPS-0010000:System internal error

  • Síntoma

    Se reporta el siguiente mensaje de error:

    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

    Utilizó un endpoint público para OSS al crear la Object Table.

  • Solución

    Cuando crea una Object Table, el parámetro location debe contener un endpoint interno para el oss_endpoint. Para obtener información sobre cómo conseguir el endpoint interno, consulte Parameter description. Si el error persiste después de cambiar la dirección a un endpoint interno, póngase en contacto con el equipo de soporte técnico de MaxCompute mediante la apertura de un ticket de soporte.

Error en la actualización periódica

  • Síntoma

Configuró parámetros de actualización periódica al crear la Object Table. Sin embargo, la actualización no se ejecuta cuando se alcanza el intervalo.

  • Solución

Asegúrese de que el parámetro location utilizado para crear la Object Table especifique un endpoint interno de OSS. Para obtener más información sobre la creación de una Object Table, consulte Parameters.