Tous les produits
Search
Centre de documentation

MaxCompute:Développer une tâche ODPS SQL

Dernière mise à jour :Sep 07, 2026

Une tâche MaxCompute SQL utilise une syntaxe de type SQL pour le traitement distribué de données à grande échelle (niveau TB) lorsque des résultats en temps réel ne sont pas requis. Cette rubrique décrit comment développer une tâche SQL dans DataWorks et fournit d'importantes notes d'utilisation.

Introduction

ODPS SQL est utilisé pour traiter et interroger les données dans MaxCompute. Il prend en charge les opérations SQL courantes, telles que SELECT, INSERT, UPDATE et DELETE, ainsi que la syntaxe et les fonctions spécifiques à MaxCompute. Avec ODPS SQL, vous pouvez écrire des instructions de type SQL pour interroger et traiter les données sans avoir à écrire une logique de traitement de données complexe. Pour plus d'informations sur la syntaxe SQL, consultez Vue d'ensemble du SQL.

Limitations

Les nœuds ODPS SQL dans DataWorks présentent les limitations suivantes :

Catégorie

Description

Utilisation des commentaires

Seuls les commentaires sur une seule ligne au format -- contenu du commentaire sont pris en charge. Les commentaires multilignes au format / contenu du commentaire / ne sont pas pris en charge.

Pour plus d'informations, consultez Commentaires SQL MaxCompute.

Les limitations suivantes s'appliquent également aux commentaires :

  • Vous ne pouvez pas ajouter de commentaire après une instruction de mot clé, telle que SET ou USE.

  • Vous ne pouvez pas utiliser de point-virgule (;) dans un commentaire.

  • Vous ne pouvez pas ajouter de commentaire après une instruction se terminant par un point-virgule (;).

Soumission SQL

Vous ne pouvez pas utiliser les instructions SET ou USE seules. Vous devez les exécuter avec d'autres instructions SQL.

Développement SQL

La taille du code SQL ne peut pas dépasser 128 Ko et le nombre d'instructions SQL ne peut pas dépasser 200.

Résultat de la requête

Seules les instructions SQL commençant par SELECT ou WITH peuvent renvoyer un ensemble de résultats formaté.

Un résultat de requête est soumis aux limitations suivantes :

  • Si un résultat de requête dépasse 10 000 lignes, un maximum de 10 000 lignes est affiché.

  • Si la taille d'un résultat de requête dépasse 10 Mo, le message d'erreur Result is too large, exceed the limit size: 10MB est renvoyé.

Remarque

Si vous rencontrez ces limitations, vous pouvez télécharger le résultat de la requête pour une consultation locale en utilisant l'une des méthodes suivantes :

Notes d'utilisation

  • Assurez-vous que le compte utilisé pour exécuter la tâche ODPS SQL dispose des autorisations requises sur le projet MaxCompute correspondant. Pour plus d'informations, consultez Contrôle des autorisations DataWorks sur MaxCompute et Autorisations MaxCompute.

  • Les tâches MaxCompute SQL nécessitent des ressources de quota pour s'exécuter. Si une tâche s'exécute pendant une longue période, accédez à la console MaxCompute pour vérifier la consommation de quota et vous assurer que suffisamment de ressources sont disponibles pour exécuter la tâche. Pour plus d'informations, consultez Ressources de calcul - Gestion des quotas.

  • Lorsque vous développez une tâche sur un nœud ODPS SQL, les paramètres spéciaux, tels qu'une adresse OSS, doivent être entourés de guillemets doubles ("). Sinon, une erreur d'analyse se produit et la tâche échoue.

  • Dans certains cas extrêmes, tels qu'une panne de courant du serveur ou un basculement primaire/secondaire, DataWorks peut ne pas être en mesure de terminer complètement les tâches MaxCompute associées. Dans cette situation, accédez au projet MaxCompute correspondant pour terminer la tâche.

  • L'ordre d'exécution des instructions de mot clé (SET et USE) varie selon l'environnement DataWorks.

    • Dans DataStudio : Toutes les instructions de mot clé (SET et USE) sont combinées et exécutées avant les autres instructions SQL.

    • Dans l'environnement de planification : Les instructions sont exécutées dans l'ordre où elles sont écrites.

    Supposons que le code suivant soit défini dans un nœud.

    SET a=b;
    CREATE TABLE name1(id string);
    SET c=d;
    CREATE TABLE name2(id string);

    Le tableau suivant décrit l'ordre d'exécution dans différents environnements.

    Instruction SQL exécutée

    DataStudio

    Environnement de planification

    Première instruction SQL

    SET a=b;
    SET c=d;
    CREATE TABLE name1(id string);
    SET a=b;
    CREATE TABLE name1(id string);

    Deuxième instruction SQL

    SET a=b;
    SET c=d;
    CREATE TABLE name2(id string);
    SET c=d;
    CREATE TABLE name2(id string);

Modification du code : exemples simples

Commandes SQL

Les commandes MaxCompute SQL utilisent une syntaxe similaire au SQL standard et prennent en charge les instructions DDL, DML et DQL, ainsi que la syntaxe spécifique à MaxCompute. Pour plus d'informations sur les exigences syntaxiques et des exemples d'utilisation de chaque commande SQL, consultez Présentation de MaxCompute SQL. L'exemple simple suivant illustre le développement et l'exécution de commandes SQL.

Remarque
  • Lorsque vous utilisez de nouveaux types de données avec les fonctions étendues de MaxCompute 2.0, vous devez ajouter SET odps.sql.type.system.odps2=true; avant l'instruction SQL et soumettre l'ensemble afin que les nouveaux types de données puissent être utilisés. Pour plus d'informations, consultez Version des types de données 2.0.

  • DataWorks fournit des paramètres de planification pour permettre le passage dynamique de paramètres dans les scénarios planifiés. Vous pouvez définir des variables dans le code de votre nœud ODPS SQL en utilisant le format ${nom_variable} et attribuer des valeurs dans la section Properties > Parameter. Pour plus d'informations sur les formats pris en charge pour les paramètres de planification, consultez Formats pris en charge pour les paramètres de planification.

  • Créer une table

    Vous pouvez utiliser l'instruction CREATE TABLE pour créer une table non partitionnée, une table partitionnée, une table externe ou une table clusterisée. Pour plus d'informations, consultez CREATE TABLE. Exemple d'instruction SQL :

    -- Create a partitioned table named test1.
    CREATE TABLE if NOT EXISTS students
    ( id BIGINT,
      name STRING,
      age BIGINT,
      birth DATE)
    partitioned BY (gender STRING); 
  • Insérer des données

    Vous pouvez utiliser l'instruction INSERT INTO ou INSERT OVERWRITE pour insérer ou mettre à jour des données dans une table de destination. Pour plus d'informations, consultez Insérer ou écraser des données (INSERT INTO | INSERT OVERWRITE). Exemples d'instructions SQL :

    -- Insert data.
    INSERT INTO students PARTITION(gender='boy') VALUES (1,'John',15,DATE '2008-05-15') ;
    INSERT INTO students PARTITION(gender='boy') VALUES (2,'Jack',17,DATE '2006-07-20') ;
    INSERT INTO students PARTITION(gender='girl') VALUES (3,'Alice',20,DATE '2003-04-20') ;
    INSERT INTO students PARTITION(gender='girl') VALUES (4,'Lily',21,DATE '2002-01-08') ;
    INSERT INTO students PARTITION(gender='boy') VALUES (5,'Bob',17,DATE '2006-09-12') ;
    Important

    Évitez d'utiliser l'instruction INSERT INTO pour insérer des données, car cela peut entraîner une duplication accidentelle des données. Nous vous recommandons d'utiliser plutôt l'instruction INSERT OVERWRITE. Pour plus d'informations, consultez Insérer ou écraser des données.

  • Interroger des données

    Vous pouvez utiliser l'instruction SELECT pour effectuer des opérations telles que des requêtes imbriquées, des requêtes groupées et un tri. Pour plus d'informations, consultez Syntaxe SELECT. Exemples d'instructions SQL :

    -- (Optional) Enable full table scan at the project level. This operation requires high-level permissions.
    -- SETPROJECT odps.sql.allow.fullscan=true;  
    
    -- Enable full table scan at the session level. This setting is valid only for the current session.
    SET odps.sql.allow.fullscan=true; 
    -- Query the information about all boys and sort the results by ID in ascending order.
    SELECT * FROM students WHERE gender='boy' ORDER BY id;
    Remarque

    Par défaut, un utilisateur RAM ne dispose pas des permissions de requête sur les tables de production. Pour interroger les tables de production, soumettez une demande dans Security Center. Pour obtenir des informations sur les préréglages des permissions de données MaxCompute et le contrôle d'accès dans DataWorks, consultez Détails du contrôle des permissions de données MaxCompute. Pour savoir comment accorder des permissions à l'aide de commandes dans MaxCompute, consultez Gérer les permissions des utilisateurs à l'aide de commandes.

Fonctions SQL

MaxCompute prend en charge les fonctions intégrées et les fonctions définies par l'utilisateur (UDF) pour le développement et l'analyse de données. Pour plus d'informations sur les fonctions intégrées, consultez Présentation des fonctions intégrées. Pour plus d'informations sur les UDF, consultez Présentation des UDF MaxCompute. L'exemple suivant montre comment utiliser les fonctions SQL.

  • Fonctions intégrées : ces fonctions sont préinstallées dans MaxCompute et peuvent être appelées directement. Sur la base de l'exemple précédent, vous pouvez utiliser la fonction dateadd pour modifier la colonne birth selon une unité et un intervalle spécifiés. Exemple de commande :

    -- Enable full table scan at the session level. This setting is valid only for the current session.
    SET odps.sql.allow.fullscan=true; 
    SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students;
  • Fonctions définies par l'utilisateur (UDF) : pour utiliser une UDF, vous devez écrire le code de la fonction, le télécharger en tant que ressource et enregistrer la fonction. Pour plus d'informations, consultez Créer et utiliser une UDF.

Exécution et résultats

  • Les résultats d'exécution s'affichent directement sous forme de tableau. Vous pouvez effectuer des opérations dans DataWorks, ouvrir les résultats dans un tableur ou copier-coller le contenu dans un fichier Excel local. Pour plus d'informations, consultez la rubrique Déboguer les tâches.

    Remarque

    En raison d'un ajustement des informations de fuseau horaire pour la Chine publié par l'Organisation internationale de normalisation (ISO), un décalage temporel peut apparaître dans l'affichage des dates lors de l'exécution de requêtes SQL pertinentes dans DataWorks. La différence de temps est de 5 minutes et 52 secondes pour les dates comprises entre 1900 et 1928, et de 9 secondes pour les dates antérieures à 1900.

  • Journal d'exécution : cliquez sur l'onglet Operational Logs pour afficher le Logview. Pour plus d'informations, consultez la rubrique Afficher les informations sur les tâches à l'aide de Logview V2.0.

  • Résultats renvoyés :

    • Interrogez les informations concernant tous les garçons et triez les résultats par ID dans l'ordre croissant.

      +------------+------------+------------+------------+------------+
      | id         | name       | age        | birth      | gender     |
      +------------+------------+------------+------------+------------+
      | 1          | John       | 15         | 2008-05-15 | boy        |
      | 2          | Jack       | 17         | 2006-07-20 | boy        |
      | 5          | Bob        | 17         | 2006-09-12 | boy        |
      +------------+------------+------------+------------+------------+
    • Modifiez la colonne birth selon une unité et un intervalle spécifiés.

      +------------+------------+------------+------------+---------------+
      | id         | name       | age        | birth      | birth_dateadd |
      +------------+------------+------------+------------+---------------+
      | 4          | Lily       | 21         | 2002-01-08 | 2002-02-08    |
      | 3          | Alice      | 20         | 2003-04-20 | 2003-05-20    |
      | 2          | Jack       | 17         | 2006-07-20 | 2006-08-20    |
      | 1          | John       | 15         | 2008-05-15 | 2008-06-15    |
      | 5          | Bob        | 17         | 2006-09-12 | 2006-10-12    |
      +------------+------------+------------+------------+---------------+

    Sur la page des résultats de la requête, vous pouvez trier les résultats selon un champ spécifique et les télécharger. Pour plus d'informations, consultez la rubrique Traiter les résultats de requête.

Modifier le code : exemples avancés

Pour des exemples plus avancés de tâches ODPS SQL, consultez les rubriques suivantes :

FAQ

  • Q : Pourquoi ma tâche ODPS SQL reste-t-elle longtemps dans l'état d'attente ?

    R : Les tâches ODPS SQL nécessitent des ressources de quota pour s'exécuter. Si votre tâche reste longtemps dans l'état d'attente, accédez à la console MaxCompute pour vérifier la consommation du quota et vous assurer que suffisamment de ressources sont disponibles pour exécuter la tâche. Pour plus d'informations, consultez la rubrique Ressources de calcul - Gestion des quotas.

  • Q : Pourquoi le message d'erreur « You have No privilege 'odps:xxxx' on xxxx » apparaît-il lors de l'exécution d'une tâche ODPS SQL ?

    R : Le compte utilisé pour exécuter la tâche ODPS SQL doit disposer des permissions requises sur le projet MaxCompute correspondant. Pour plus d'informations, consultez la rubrique Permissions MaxCompute.