Tous les produits
Search
Centre de documentation

DataWorks:Développer une tâche ODPS SQL

Dernière mise à jour :Aug 21, 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 permet de traiter et d'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 à rédiger une logique de traitement complexe. Pour plus d'informations sur la syntaxe SQL, consultez Vue d'ensemble de 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, téléchargez le résultat de la requête pour l'afficher localement 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 On 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 du quota et assurez-vous 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, entourez les paramètres spéciaux, tels qu'une adresse OSS, 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 arrêter le job.

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

    • Dans DataStudio : Toutes les instructions de mots clés (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 ont été é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);

Modifier le 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 de syntaxe et les exemples d'utilisation de chaque commande SQL, consultez Vue d'ensemble de MaxCompute SQL. L'exemple simple suivant montre comment développer et exécuter des commandes SQL.

Remarque
  • Lorsque vous utilisez de nouveaux types de données avec les fonctions étendues MaxCompute 2.0, ajoutez SET odps.sql.type.system.odps2=true; avant l'instruction SQL et soumettez-les 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. Définissez des variables dans le code de votre nœud ODPS SQL en utilisant le format ${nom_variable} et attribuez 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

    Utilisez 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

    Utilisez 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

    Utilisez l'instruction SELECT pour effectuer des opérations telles que des requêtes imbriquées, des requêtes groupées et le 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 d'autorisations 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 d'autorisation de données MaxCompute et le contrôle d'accès dans DataWorks, consultez Détails du contrôle des autorisations de données MaxCompute. Pour savoir comment accorder des autorisations à l'aide de commandes dans MaxCompute, consultez Gérer les autorisations 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 Vue d'ensemble des fonctions intégrées. Pour plus d'informations sur les UDF, consultez Vue d'ensemble 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 apparaissent directement sous forme de feuille de calcul. Vous pouvez effectuer des opérations dans DataWorks, ouvrir les résultats dans une feuille de calcul ou copier-coller le contenu dans un fichier Excel local. Pour plus d'informations, consultez 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 Afficher les informations du job à l'aide de Logview V2.0.

  • Résultats renvoyés :

    • Interroger les informations sur tous les garçons et trier les résultats par ID par 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        |
      +------------+------------+------------+------------+------------+
    • Modifier 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 par champ spécifique et télécharger les résultats. Pour plus d'informations, consultez 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 assurez-vous que suffisamment de ressources sont disponibles pour exécuter la tâche. Pour plus d'informations, consultez 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 autorisations requises sur le projet MaxCompute correspondant. Pour plus d'informations, consultez Autorisations MaxCompute.