Le nœud MaxCompute SQL de DataWorks planifie périodiquement des tâches MaxCompute SQL et s'intègre à d'autres types de nœuds au sein d'un flux de travail unifié. MaxCompute SQL utilise une syntaxe de type SQL adaptée au traitement distribué de données volumineuses (niveau TB) lorsque les résultats en temps réel ne sont pas critiques.
Présentation
MaxCompute SQL traite et interroge 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. Pour plus d'informations sur la syntaxe SQL, consultez Présentation du langage SQL.
Prérequis
Vous avez lié un moteur de calcul MaxCompute à l'espace de travail DataWorks.
-
(Facultatif, pour les utilisateurs RAM) L'utilisateur RAM chargé du développement des tâches doit être membre de l'espace de travail et disposer du rôle Development ou Workspace Administrator. Le rôle Workspace Administrator inclut des autorisations étendues et doit être attribué avec prudence. Pour plus d'informations sur l'ajout d'un membre à un espace de travail, consultez Ajouter des membres à un espace de travail.
RemarqueSi vous utilisez un compte Alibaba Cloud, ignorez cette étape.
Limites
Les limites suivantes s'appliquent au développement SQL dans le nœud MaxCompute SQL :
Catégorie | Description |
Commentaires | Seuls les commentaires sur une seule ligne commençant par Pour plus d'informations, consultez Commentaires SQL MaxCompute. Les limites suivantes s'appliquent également aux commentaires :
|
Soumission SQL | ODPS SQL ne prend pas en charge les instructions SET ou USE autonomes. Elles doivent être exécutées conjointement avec une instruction SQL spécifique. |
Développement SQL | La taille du code SQL ne peut pas dépasser128 Ko et le nombre d'instructions SQL ne peut pas dépasser200. |
Résultats de requête | Seules les instructions SQL commençant par SELECT ou WITH peuvent produire des jeux de résultats formatés. Les résultats de requête présentent les limites suivantes :
Remarque Si vous rencontrez des limites liées aux résultats de requête, téléchargez ces résultats sur votre machine locale en utilisant l'une des méthodes suivantes :
|
Remarques
Assurez-vous que le compte utilisé pour exécuter les tâches MaxCompute SQL dispose des autorisations requises sur le projet MaxCompute correspondant. Pour plus d'informations, consultez Contrôle des autorisations DataWorks sur MaxCompute et Autorisation MaxCompute.
L'exécution des tâches MaxCompute SQL dépend des ressources de quota. Si votre tâche met beaucoup de temps à s'exécuter, accédez à la console MaxCompute pour vérifier la consommation des ressources de quota et vous assurer que suffisamment de ressources sont disponibles pour l'exécution de la tâche. Pour plus d'informations, consultez Afficher la consommation des ressources de quota.
Lorsque vous développez des tâches de nœud MaxCompute SQL, placez les paramètres spéciaux tels que les chemins OSS entre guillemets doubles. L'absence de guillemets peut provoquer des exceptions d'analyse de la tâche, entraînant l'échec de son exécution.
Lorsque vous exécutez des instructions liées aux mots-clés (SET, USE) dans différents environnements sur DataWorks, l'ordre d'exécution varie. Pour plus d'informations, consultez Annexe 1 : Ordre d'exécution SQL dans différents environnements.
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 la tâche.
Lorsque l'objectif principal d'une tâche est de créer une nouvelle table (par exemple,
DROP TABLEsuivi deCREATE TABLE AS SELECT), le moteur MaxCompute effectue une pré-vérification des métadonnées avant l'exécution. Si la table existe déjà, une erreur est directement renvoyée. Pour la création initiale de table, utilisezCREATE TABLE IF NOT EXISTS. Pour les écritures de données ultérieures, utilisez plutôtINSERT OVERWRITE TABLE ... SELECT ....-
Contrôlez le mode d'exécution SQL en définissant le paramètre
odps.task.sql.realtime. Définissez la valeur surtruepour activer le mode Online pour une exécution en temps réel, ou surfalsepour forcer le mode Offline. Placez ce paramètre au début de votre code SQL, avant les instructions SQL métier. Exemple :SET odps.task.sql.realtime=true; -- Your business SQL statements SELECT * FROM my_table; La modification directe du type de données d'une colonne de STRING vers des types complexes tels que STRUCT n'est pas prise en charge. Si l'erreur
ODPS-0130071est renvoyée, vérifiez si la conversion de type de champ respecte les règles sémantiques et évitez les opérations de conversion de type non prises en charge.
Créer un nœud MaxCompute SQL
Pour savoir comment créer un nœud, consultez Créer un nœud MaxCompute SQL.
Développer un nœud MaxCompute SQL
Sur la page d'édition du nœud MaxCompute SQL, effectuez les opérations suivantes.
Développer du code SQL
DataWorks fournit des paramètres de planification pour transmettre dynamiquement des valeurs au code dans des scénarios de planification. Définissez des variables dans un nœud MaxCompute SQL en utilisant le format ${nom_variable}, puis attribuez-leur des valeurs dans la section Scheduling Parameters de Scheduling Settings. Pour plus d'informations sur les formats pris en charge, consultez Paramètres de planification. MaxCompute SQL utilise une syntaxe similaire au SQL standard et prend en charge les instructions DDL, DML et DQL, ainsi que la syntaxe spécifique à MaxCompute. Pour une syntaxe détaillée et des exemples, consultez Présentation du langage SQL.
Les trois exemples suivants illustrent différents scénarios :
Lorsque les fonctions étendues de MaxCompute 2.0 utilisent de nouveaux types de données, ajoutez
SET odps.sql.type.system.odps2=true;avant l'instruction SQL contenant la fonction, et soumettez-la et exécutez-la conjointement avec l'instruction SQL pour que les nouveaux types de données fonctionnent correctement. Pour plus d'informations sur les types de données 2.0, consultez Types de données MaxCompute 2.0.Les instructions SQL MaxCompute sont exécutées dans un ordre différent dans les environnements Data Studio et Operation Center. Pour plus d'informations, consultez Annexe 1 : Ordre d'exécution SQL dans différents environnements.
Créer une table
Utilisez l'instruction CREATE TABLE pour créer des tables non partitionnées, des tables partitionnées, des tables externes et des tables clusterisées. Pour plus d'informations, consultez CREATE TABLE. Voici un exemple SQL :
-- Create a partitioned table named students
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.
Évitez d'utiliser l'instructionINSERT INTOpour insérer des données, car cela peut entraîner une duplication inattendue des données. Nous vous recommandons d'utiliserINSERT OVERWRITEà la place. Pour plus d'informations, consultez Insérer ou écraser des données .
Voici un exemple SQL :
-- Insert data
INSERT OVERWRITE students PARTITION(gender='boy') VALUES (1,'ZhangSan',15,DATE '2008-05-15') ;
L'instruction INSERT peut déclencher la fonctionnalité Compare DDL Columns, qui vous permet de comparer les colonnes de la clause SELECT d'une instruction SQL avec les colonnes de la table de destination.
Cette fonctionnalité n'est pas prise en charge lorsque le projet MaxCompute a activé le modèle à trois couches basé sur le schéma au niveau du projet mais pas au niveau du locataire.
-- Compare DDL columns
INSERT OVERWRITE TABLE dws_user_info_all_di PARTITION (dt='${workflow.var}')
SELECT COALESCE(a.uid, b.uid) AS uid
, b.gender
, b.age_range
, b.zodiac
, a.region
, a.device
, a.identity
, a.method
, a.url
, a.referer
, a.time
-- ...The FROM/JOIN and other clauses are omitted here. Complete them based on your actual business requirements.
;
Interroger des données
Utilisez l'instruction SELECT pour effectuer des requêtes imbriquées, des requêtes groupées, des tris et d'autres opérations. Pour plus d'informations, consultez Syntaxe SELECT. Voici un exemple SQL :
-- (Optional) Enable full table scan at the project level. This operation requires elevated permissions.
-- SETPROJECT odps.sql.allow.fullscan=true;
-- Enable full table scan at the session level. This setting is effective only for the current session.
SET odps.sql.allow.fullscan=true;
-- Query information about all male students and sort the results by ID in ascending order.
SELECT * FROM students WHERE gender='boy' ORDER BY id;
Par défaut, les utilisateurs RAM ne disposent pas de l'autorisation d'interroger les tables de production. Pour demander des autorisations d'interrogation des tables de production, accédez au Security Center. Pour plus d'informations sur les préréglages d'autorisations de données MaxCompute et le contrôle d'accès aux données sur DataWorks, consultez Préréglages d'autorisations de données MaxCompute et contrôle d'accès. Pour plus d'informations sur l'autorisation basée sur les commandes MaxCompute, consultez Autorisation MaxCompute.
Utiliser des fonctions SQL
MaxCompute prend en charge les fonctions intégrées et les fonctions définies par l'utilisateur (UDF). Créez et utilisez des fonctions SQL en fonction de vos besoins métier. 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. Les exemples suivants montrent comment utiliser des fonctions SQL.
-
Fonctions intégrées : Les fonctions intégrées sont préinstallées dans MaxCompute et peuvent être appelées directement. Sur la base des exemples précédents de création de table, d'insertion de données et d'interrogation de données, vous pouvez utiliser la fonction
dateaddpour modifier la colonne birth selon une unité et un décalage spécifiés. Voici un exemple de commande :--Enable full table scan at session level. Only effective for this 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, écrivez le code de la fonction, téléchargez-le en tant que ressource et enregistrez la fonction. Pour plus d'informations, consultez Créer une UDF MaxCompute.
Déboguer un nœud MaxCompute SQL
-
Configurez les paramètres pertinents dans le panneau Run Configuration situé sur le côté droit de la page d'édition du nœud.
|
**Paramètre**
|
**Description**
| | --- | --- | |
**Compute resource**
|
Sélectionnez la ressource de calcul MaxCompute que vous avez associée à l'espace de travail.
| |
**Compute quota**
|
Sélectionnez le quota de calcul pour fournir les ressources de calcul requises (CPU et mémoire) pour les travaux de calcul.
Si aucun quota de calcul n'est disponible, cliquez sur **Create Compute Quota** dans la liste déroulante et créez un quota sur la [console MaxCompute](https://maxcompute.console.alibabacloud.com). Pour plus d'informations, consultez [Créer un quota de calcul](t2242047.xdita#title_29q_66v_6o0).
| |
**Resource group**
|
Sélectionnez un groupe de ressources de planification ayant réussi le test de connectivité avec la ressource de calcul. Pour plus d'informations, consultez [Groupes de ressources pour la planification](t1695533.dita#concept_ovl_zgv_42b).
| Dans la boîte de dialogue des paramètres de la barre d'outils, sélectionnez la source de données MaxCompute que vous avez créée, puis cliquez sur Run pour exécuter la tâche MaxCompute SQL.
L'exécution directe d'un nœud dans DataStudio correspond au mode débogage. Dans ce mode, le nœud valide uniquement la logique SQL et ne dépend pas de la configuration de planification. Si vous devez exécuter le nœud dans un flux de travail (mode planification), effectuez les configurations suivantes avant que le flux de travail puisse exécuter le nœud :
Dans la configuration d'exécution, sélectionnez la Compute resource requise.
Configurez les propriétés de Scheduling du nœud.
Deploy le nœud vers l'environnement de production.
Afficher les résultats
-
Les résultats sont affichés 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.
RemarqueEn raison des modifications apportées aux informations de fuseau horaire de la Chine publiées par l'Organisation internationale de normalisation (ISO), des écarts d'affichage des dates peuvent survenir pour certaines périodes lors de l'exécution d'instructions SQL connexes via DataWorks : une différence de 5 minutes et 52 secondes pour les dates comprises entre 1900 et 1928, et une différence de 9 secondes pour les dates antérieures à 1900.
Journal d'exécution : Dans l'onglet
des résultats, cliquez sur le lien Logview pour afficher les journaux. Pour plus d'informations, consultez LogView.Trier les résultats : Sur la page des résultats, cliquez sur le menu déroulant de l'en-tête de colonne correspondant, sélectionnez l'ordre croissant ou décroissant dans la section Sort, puis confirmez pour trier les résultats.
Afficher les colonnes BLOB : MaxCompute prend en charge le type de données BLOB pour stocker des objets binaires tels que des images et des fichiers audio. Dans les résultats, double-cliquez sur une cellule de ce type de données pour prévisualiser le contenu dans la boîte de dialogue Current Field Value (les images sont rendues directement ; le texte est affiché en mode lecture seule). Vous pouvez basculer entre Blob View, Text View et JSON View à l'aide des boutons situés en bas de la boîte de dialogue.
Affichage en notation scientifique : Dans l'environnement de développement de données DataWorks, les valeurs numériques des résultats de requête peuvent être affichées en notation scientifique. Il s'agit d'un problème d'affichage frontal qui n'affecte pas les valeurs de données réelles. Pour garantir que les valeurs numériques s'affichent comme prévu, utilisez la fonction
CASTdans votre SQL pour convertir manuellement le type de données. Par exemple, utilisezCAST(column_name AS STRING)pour convertir une valeur numérique en chaîne pour l'affichage. Vous pouvez également vérifier l'exactitude des données dans le module DataAnalysis.
Étapes suivantes
Configurer les paramètres de planification : Si les nœuds du répertoire du projet doivent être planifiés périodiquement, configurez la Scheduling Policy et les propriétés de planification associées dans le panneau Scheduling Settings situé sur le côté droit du nœud.
Déployer un nœud : Si une tâche doit être déployée dans l'environnement de production, cliquez sur l'icône
sur la page pour lancer le processus de déploiement. Les nœuds du répertoire du projet ne sont planifiés périodiquement qu'après leur déploiement dans l'environnement de production.
Annexe 1 : Ordre d'exécution SQL dans différents environnements
Lorsque vous exécutez des instructions liées aux mots-clés (SET, USE) dans différents environnements DataWorks pour un nœud MaxCompute SQL, l'ordre d'exécution varie.
Exécution dans Data Studio : Toutes les instructions de mots-clés (SET, USE) du code de la tâche actuelle sont fusionnées et ajoutées au début de toutes les instructions SQL.
Exécution 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);
L'ordre d'exécution varie selon l'environnement comme suit :
Instruction SQL | Data Studio | Environnement de planification |
Première instruction SQL | | |
Deuxième instruction SQL | | |
Annexe 2 : Pratiques Lakehouse
Pour lire et écrire dans les tables de données DLF dans les tâches MaxCompute SQL, utilisez les projets externes MaxCompute (External Project). Les projets externes permettent un accès en temps réel aux métadonnées et aux données en mappant les catalogues DLF. Ils délèguent la gestion des autorisations à DLF et prennent en charge l'accès aux métadonnées ainsi que les opérations de lecture/écriture sur les données gérées par DLF stockées dans OSS. Pour plus d'informations, consultez Projets externes MaxCompute.
Références
Pour plus d'exemples de tâches MaxCompute SQL, consultez les rubriques suivantes :
Analyse unifiée par lots et en temps réel des événements GitHub
Convertir des adresses IP en géolocalisations avec des UDF MaxCompute
Construire un data lakehouse MaxCompute à l'aide de DataWorks et DLF
Gestion des autorisations basée sur des politiques pour les utilisateurs ayant des rôles intégrés
Implémenter les fonctionnalités fournies par la fonction GROUP_CONCAT