Tous les produits
Search
Centre de documentation

MaxCompute:Définition de la table d'objets

Dernière mise à jour :Aug 28, 2026

MaxCompute introduit la fonctionnalité de table d'objets, qui permet au moteur de calcul de l'entrepôt de données d'accéder aux données non structurées et à leurs métadonnées stockées dans un data lake. Cette rubrique décrit la syntaxe des commandes et fournit des exemples d'utilisation.

Contexte

Dans de nombreux flux de travail d'intelligence artificielle, les développeurs d'entrepôts de données, familiers avec les données et la logique métier, doivent prétraiter ou traiter des données non structurées destinées aux grands modèles. Ces tâches tirent parti de la puissance de calcul massive et économique des plateformes de big data. Les processus et leurs résultats interagissent souvent avec les données de l'entrepôt de données ou du data lake.

Le traitement des données non structurées via SQL présente plusieurs défis :

  • Lors de la lecture depuis le stockage d'objets, les moteurs SQL de big data ne peuvent pas déterminer la taille des objets, ce qui complique l'optimisation du plan d'exécution et rend difficile le contrôle de la concurrence ou le lancement d'un nombre approprié de tâches simultanées. Sans une projection de prédicat efficace, la puissance de calcul n'est pas pleinement exploitée, en particulier en cas de déséquilibre des données.

  • La lecture des métadonnées depuis le stockage d'objets engendre une latence élevée, car chaque requête nécessite un appel distant vers le service de stockage.

  • Les listes de fichiers provenant du stockage d'objets ne peuvent être récupérées que de manière sérielle au sein d'un seul processus dans une fonction de table définie par l'utilisateur (UDTF), ce qui entraîne de mauvaises performances de lecture des données.

  • Vous devez implémenter la logique d'autorisation et de connectivité réseau au sein des fonctions définies par l'utilisateur (UDF) pour vous connecter aux services de stockage.

  • Les entrepôts de données traditionnels ne proposent pas de fonctionnalités permettant de télécharger en toute sécurité des images personnalisées ni d'environnement d'exécution sécurisé pour les UDF. De plus, les appels distants nécessitent une gestion complexe de la concurrence avec le service de calcul distribué.

Fonctionnalités

MaxCompute introduit la fonctionnalité de table d'objets, qui permet au moteur de calcul de l'entrepôt de données d'accéder aux données non structurées et à leurs métadonnées stockées dans un data lake. Cette fonctionnalité offre les capacités suivantes :

  • Permet au moteur de lire les métadonnées des fichiers OSS sous forme de table.

  • S'appuie sur une table de métadonnées pour mettre en cache les métadonnées versionnées des fichiers OSS. Le moteur SQL peut ensuite utiliser ces métadonnées pour optimiser les requêtes, telles que le filtrage des données et la projection de prédicat.

  • Fournit des fonctions intégrées pour lire le contenu des fichiers de données non structurées de diverses manières.

  • Permet au moteur SQL MaxCompute de créer des partitions concurrentes basées sur les métadonnées de la table d'objets, déverrouillant ainsi le calcul distribué à grande échelle pour améliorer l'efficacité de la lecture et du traitement des données.

  • Vous permet de télécharger une image personnalisée pour construire des UDF qui traitent les données non structurées lues par le moteur.

  • Prend en charge le traitement des données non structurées pour générer des résultats structurés et les écrire dans des tables internes ou externes de l'entrepôt de données. Les versions futures prendront également en charge la génération de résultats non structurés et leur réécriture dans OSS via les tables d'objets.

  • Prend en charge le moteur Maxframe issu de l'écosystème Python.

Limitations

  • Le projet MaxCompute doit avoir les schémas activés. Pour plus d'informations, consultez Activer le schéma.

  • MaxCompute doit prendre en charge le système de types 2,0.

  • Les tables d'objets ne prennent pas actuellement en charge les partitions.

Facturation

  • Une table d'objets stocke une collection de métadonnées pour les fichiers dans OSS. Des frais de stockage sont appliqués pour les métadonnées actualisées et stockées dans la table d'objets. Pour plus d'informations, consultez Tarification du stockage. Étant donné que les fichiers provenant d'OSS ne sont pas stockés dans MaxCompute, MaxCompute ne facture pas leur stockage. OSS facture le stockage et l'accès aux données. Pour plus d'informations, consultez Tarification du stockage OSS.

  • Pour les tâches qui extraient et actualisent les métadonnées OSS, la valeur inputsize pour chaque fichier analysé est basée sur la taille de ses métadonnées, et non sur sa taille de fichier réelle. Par conséquent, le coût total de la tâche d'actualisation dépend du nombre de fichiers, et non de leur taille totale. Pour plus d'informations, consultez Facturation SQL pour les tables externes.

  • Des frais de calcul s'appliquent lorsque vous utilisez une table d'objets et ses métadonnées pour analyser et extraire des données non structurées depuis OSS.

    • Dans un abonnement à l'utilisation, l'analyse des métadonnées de la table d'objets est facturée de la même manière qu'une table interne. Pour plus d'informations, consultez Facturation SQL standard. Le traitement du contenu des données non structurées provenant d'OSS est facturé comme une table externe. Pour plus d'informations, consultez Facturation SQL pour les tables externes.

    • Dans un plan de facturation par abonnement, vous utilisez des ressources d'abonnement prépayées. Pour plus d'informations, consultez Frais de calcul (abonnement).

Créer une table d'objets

Syntaxe

CREATE OBJECT TABLE [IF NOT EXISTS] <objecttable_name> 
WITH SERDEPROPERTIES ('<key>' = '<value>') 
LOCATION '<location>' 
[TBLPROPERTIES ('<key>' = '<value>')] 
[COMMENT '<comment>'] 
;
Remarque
  • Les tables d'objets doivent être utilisées dans un projet ayant les schémas activés, et vous devez activer l'option de syntaxe de schéma.

  • Il n'est pas nécessaire de définir des colonnes pour une table d'objets, car ses colonnes de métadonnées sont fournies par le système.

Paramètres

Paramètre

Obligatoire

Description

objecttable_name

Oui

Le nom de la table.

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

Oui

Spécifie les propriétés du sérialiseur-désérialiseur (SerDe). Vous pouvez spécifier un rôle RAM pour l'autorisation en définissant la clé odps.properties.rolearn. Si vous omettez cette clé, MaxCompute utilise le rôle RAM AliyunODPSDefaultRole du compte Alibaba Cloud actuel pour accéder à OSS.

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

Avant d'utiliser cette fonctionnalité, assurez-vous d'avoir effectué l'autorisation en un clic pour AliyunODPSDefaultRole. Cette autorisation permet au projet MaxCompute d'accéder directement aux ressources OSS appartenant au compte cloud actuel via un jeton STS.

Remarque

L'autorisation en un clic n'est possible que si le propriétaire du projet MaxCompute et le propriétaire du compte OSS sont identiques.

location

Oui

  • Le chemin OSS vers lequel la table d'objets est mappée. Le format est oss://<oss_endpoint>/<bucket_name>/<oss_directory_name>/. Par exemple, oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/.

  • La table d'objets extrait les métadonnées des fichiers dans le répertoire spécifié.

  • Pour obtenir le oss_endpoint :

    • Connectez-vous à la console OSS.

    • Sur la page Buckets, cliquez sur le Bucket Name cible pour ouvrir sa page Objects.

    • Dans la zone Port de la page Overview, obtenez l'Endpoint pour Access from ECS over the Classic Network (internal network).

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

Non

  • metadata.cache.mode : Le mode d'actualisation du cache.

    • manual : Déclenchement manuel (par défaut).

    • periodic : Déclenchement périodique. Ce mode nécessite le paramètre metadata.staleness.seconds pour spécifier l'intervalle d'actualisation.

  • metadata.staleness.seconds : L'intervalle d'actualisation en secondes. La valeur peut aller de 1 à 604800 (1 seconde à 1 semaine). Ce paramètre constitue une garantie de meilleure effort, et le planificateur tente d'exécuter l'actualisation aussi près que possible de l'intervalle spécifié.

comment

Non

Un commentaire pour la table.

Exemple

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

Consulter les propriétés d'une table d'objets

Syntaxe

DESC <object_table_name>

Paramètres

object_table_name : Obligatoire. Nom de la table.

Exemple

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

Le résultat suivant est renvoyé :

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

Le tableau ci-dessous décrit les colonnes clés du résultat.

Paramètre

Type

Valeur NULL autorisée

Description

key

VARCHAR(2048)

La contrainte de longueur dans OSS est de 1 023 caractères.

Pour plus d'informations, consultez les règles et exemples de dénomination des objets OSS.

Faux

Chemin relatif de l'objet au sein de la table d'objets.

size

BIGINT

Faux

Taille de l'objet en octets.

type

VARCHAR(32)

Faux

Type de l'objet dans OSS : Normal, Multipart, Appendable ou Symlink.

last_modified

TIMESTAMP_NTZ

Faux

Date de dernière modification des données de l'objet dans OSS.

storage_class

VARCHAR(32)

Faux

Classe de stockage de l'objet dans OSS. Pour obtenir la liste des classes de stockage, consultez les classes de stockage.

etag

VARCHAR(64)

Faux

L'ETag est une balise d'entité générée pour un objet. Elle permet d'identifier si le contenu d'un objet a changé entre les mises à jour, mais ne constitue pas un identifiant unique.

restore_info

VARCHAR(256)

Vrai

Indique si un objet a été restauré depuis le stockage froid. Si un objet est en cours de restauration, cette colonne fournit les informations pertinentes.

owner_id

BIGINT

Vrai

ID du propriétaire de l'objet.

owner_display_name

VARCHAR(256)

Vrai

Nom d'affichage du propriétaire de l'objet.

Afficher l'instruction CREATE TABLE

Syntaxe

SHOW CREATE TABLE <object_table_name>;

Paramètres

object_table_name : Obligatoire. Nom de la table.

Exemple

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

Le résultat suivant est renvoyé :

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

Actualiser les métadonnées d'une table d'objets

Les données réelles d'une table d'objets sont stockées dans OSS. MaxCompute met en cache les métadonnées de ces objets et utilise ce cache pour les requêtes et les calculs. Par conséquent, vous devez actualiser le cache avant d'utiliser une table d'objets. Vous pouvez actualiser les métadonnées manuellement ou configurer des actualisations périodiques lors de la création de la table.

Remarque

Les actualisations manuelles et périodiques sont toutes deux des actualisations complètes.

Actualisation manuelle

Chaque actualisation effectue une synchronisation complète des métadonnées. Vous pouvez contrôler le moment et la fréquence de ces actualisations.

  • Syntaxe

    ALTER TABLE <objecttable_name> REFRESH METADATA;
  • Paramètres

    objecttable_name : Obligatoire. Nom de la table.

  • Exemple

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

Actualisation périodique

Si les fichiers du répertoire OSS mappé par la table d'objets changent fréquemment, vous pouvez configurer des actualisations périodiques des métadonnées. Cela réduit les coûts de maintenance en spécifiant les paramètres pertinents lors de la création de la table.

  • Syntaxe

    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'
    );
    
  • Paramètres

    • metadata.staleness.seconds: Intervalle d'actualisation. Ce paramètre est requis pour le mode periodic. La valeur peut aller de [1, 604800], soit de 1 seconde à 1 semaine. Ce paramètre constitue une garantie de meilleure effort ; le planificateur tentera d'exécuter l'actualisation aussi près que possible de l'intervalle spécifié.

    • metadata.cache.mode: Mode d'actualisation. Les options disponibles sont les suivantes :

      • periodic: Déclenchement périodique.

      • crontab: Actualisation planifiée.

      • manual: Déclenchement manuel (par défaut). Vous pouvez contrôler le moment du déclenchement.

Actualisation planifiée

Si les fichiers du répertoire OSS mappé par la table d'objets changent fréquemment, vous pouvez planifier des actualisations de métadonnées. Cette approche réduit les coûts de maintenance en spécifiant les paramètres pertinents lors de la création de la table.

  • Syntaxe

    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'
    );
  • Paramètres

    • metadata.crontab.expression: expression cron définissant la planification. Par exemple, pour déclencher une actualisation tous les jours à 14 h 00, utilisez l'expression 0 0 14 * * ?, ce qui signifie 0 seconde, 0 minute, heure 14 (14 h 00), chaque jour, chaque mois et ? pour ne pas spécifier le jour de la semaine (exclusif avec le champ jour du mois afin d'éviter les conflits).

    • metadata.cache.mode: mode d'actualisation. Les options disponibles sont les suivantes :

      • crontab: actualisation planifiée.

      • periodic: déclenchement périodique.

      • manual: déclenchement manuel (par défaut). Vous contrôlez le moment du déclenchement.

Afficher les tâches d'actualisation

Exécutez la commande suivante pour consulter l'historique des tâches d'actualisation.

SHOW refresh task history FOR object TABLE <object_table_name>;
  • Paramètres

    • <object_table_name> doit correspondre à une table d'objets.

    • Valeurs renvoyées : ID de l'instance de la tâche d'actualisation (InstanceId), heure de création (CreateTime), heure de fin (EndTime) et statut (Status).

    • Si le statut est Failed, exécutez wait InstanceId; pour afficher le journal et vérifier les détails de l'erreur.

  • Exemple

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

Interroger des tables d'objets

Une fois que la table d'objets a récupéré les métadonnées des fichiers depuis un répertoire OSS, interrogez la table pour parcourir ces métadonnées. Vous pouvez également utiliser des instructions SQL pour effectuer des calculs sur les métadonnées, tels que le filtrage, la mise en correspondance, les agrégations, les jointures, les fonctions de fenêtrage, ORDER BY et LIMIT.

Syntaxe

SELECT * FROM <object_table_name>;

Paramètres

object_table_name : obligatoire. Nom de la table.

Exemple

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

Supprimer une table d'objets

Une table d'objets met en cache les métadonnées utilisateur, ce qui consomme de l'espace de stockage et engendre des coûts. Si vous n'avez plus besoin des données mises en cache, supprimez la table d'objets. Vous pourrez recréer la table d'objets ultérieurement si nécessaire.

Syntaxe

DROP TABLE [IF EXISTS] <object_table_name>; 

Paramètres

object_table_name : obligatoire. Nom de la table.

Exemple

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

FAQ

ODPS-0010000:System internal error

  • Symptôme

    Le message d'erreur suivant s'affiche :

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

    Vous avez utilisé un endpoint public pour OSS lors de la création de la table d'objets.

  • Solution

    Lors de la création d'une table d'objets, le paramètre location doit contenir un endpoint interne pour oss_endpoint. Pour savoir comment obtenir l'endpoint interne, consultez la section Description des paramètres. Si l'erreur persiste après avoir remplacé l'adresse par un endpoint interne, contactez l'équipe de support technique MaxCompute en soumettant un ticket de support.

Échec de l'actualisation périodique

  • Symptôme

Vous avez défini des paramètres d'actualisation périodique lors de la création de la table d'objets. Toutefois, l'actualisation ne s'exécute pas lorsque l'intervalle est atteint.

  • Solution

Assurez-vous que le paramètre location utilisé pour créer la table d'objets spécifie un endpoint interne OSS. Pour plus d'informations sur la création d'une table d'objets, consultez la section Paramètres.