Dans la deuxième partie de la série d'articles sur l'annonce de SQL Scripting, nous examinerons la tâche administrative dont nous avons discuté dans la première partie : comment appliquer une règle insensible à la casse à chaque colonne STRING d'une table.
Nous allons parcourir cet exemple étape par étape, expliquer les fonctionnalités utilisées et l'étendre au-delà d'une seule table pour couvrir un schéma entier.
Vous pouvez également suivre dans ce notebook.
Databricks prend en charge un large éventail de collations, conscientes de la langue, insensibles à la casse et aux accents. Il est facile d'utiliser cette fonctionnalité pour les nouvelles tables et colonnes. Mais que faire si vous avez un système existant qui utilise upper() ou lower() dans les prédicats partout et que vous souhaitez bénéficier des améliorations de performance associées à une collation native insensible à la casse tout en simplifiant vos requêtes ? Cela nécessitera une certaine programmation ; maintenant, vous pouvez tout faire en SQL.
Utilisons le schéma de test suivant :
L'ordre est basé sur les points de code ASCII, où toutes les lettres majuscules précèdent toutes les lettres minuscules. Pouvez-vous corriger cela sans ajouter upper() ou lower() ?
Notre première étape consiste à indiquer à la table de modifier sa collation par défaut pour les colonnes nouvellement ajoutées. Vous pouvez alimenter vos variables locales avec des marqueurs de paramètres, que le notebook détectera automatiquement et ajoutera des widgets. Vous pouvez également utiliser EXECUTE IMMEDIATE pour exécuter une instruction ALTER TABLE composée dynamiquement.
Chaque script SQL se compose d'une instruction BEGIN .. END (composée). Les variables locales sont définies d'abord dans une instruction composée, suivies de la logique.
Il s'agit uniquement d'un ensemble d'instructions linéaires. Jusqu'à présent, vous pouviez écrire tout cela avec des variables de session SQL sans l'instruction composée. Vous n'avez pas non plus obtenu grand-chose. Après tout, vous vouliez changer la collation des colonnes existantes. Pour ce faire, vous devez :
En bref, vous devez boucler sur la table INFORMATION_SCHEMA.COLUMNS.
SQL Scripting offre quatre types de boucles et des moyens de contrôler les itérations de boucle.
Appliquons maintenant la boucle FOR à notre script de collation. La requête récupère les noms de colonnes de toutes les colonnes de chaîne de la table. Le corps de la boucle modifie la collation de chaque colonne à tour de rôle :
Vérifions que la table a été correctement mise à jour :
Jusqu'ici, tout va bien. Notre code est fonctionnellement complet, mais vous devriez indiquer à Delta d'analyser les colonnes que vous avez modifiées pour bénéficier du saut de fichier. Vous ne voulez pas faire cela colonne par colonne. Mais rassemblez-les toutes et effectuez le travail uniquement s'il y avait effectivement une colonne de type chaîne pour laquelle la collation a été modifiée. Des décisions, des décisions…
SQL Scripting offre trois façons d'exécuter conditionnellement des instructions SQL.
Pour notre script de collation, un simple IF THEN END IF suffira. Vous devez également collecter l'ensemble des colonnes auxquelles appliquer ANALYZE et utiliser quelques fonctions d'ordre supérieur pour générer la liste des colonnes :
Ce que vous avez écrit jusqu'à présent fonctionne pour des tables individuelles. Qu'en est-il si vous voulez opérer sur toutes les tables d'un schéma ? SQL Scripting est entièrement composable. Vous pouvez imbriquer des instructions composées, des instructions conditionnelles et des boucles dans d'autres instructions SQL Scripting.
Vous allez donc faire deux choses ici :
This error makes sense. You have multiple ways to proceed:
A key capability of SQL Scripting is the ability to intercept and handle exceptions. Condition handlers are defined in the declaration section of a compound statement, and they apply to any statement within that compound, including nested statements. You can handle specific error conditions by name, specific SQLSTATEs handling several error conditions, or all error conditions. Within the body of the condition handler, you can use the GET DIAGNOSTICS statement to retrieve information about the exception being handled and execute any SQL scripting you deem appropriate, such as recording the error in a log or running an alternative logic to the one that failed. You can then SIGNAL a new error condition, RESIGNAL the original condition, or simply exit the compound statement where the handler is defined and continue with the following statement.
In our script, you want to skip any statement for which the ALTER TABLE DEFAULT COLLATION statement did not apply and log the object's name.
Above, you have developed an administrative script purely in SQL. You can also write ELT scripts and turn them into Jobs. SQL Scripting is a truly powerful tool you should exploit.
Whether you are an existing Databricks user or migrating from another product, SQL Scripting is a capability you should use. SQL Scripting follows the ANSI standard and is fully compatible with OSS Apache Spark™. SQL Scripting is described in detail in SQL Scripting | Databricks Documentation.
You can also use this notebook to see for yourself.
(Cet article de blog a été traduit à l'aide d'outils basés sur l'intelligence artificielle) Article original
