En la segunda parte de la serie de blogs sobre el anuncio de SQL Scripting, examinaremos la tarea administrativa que discutimos en la primera parte: cómo aplicar una regla insensible a mayúsculas y minúsculas a cada columna STRING en una tabla. Recorreremos ese ejemplo paso a paso, explicaremos las características utilizadas y lo ampliaremos más allá de una sola tabla para cubrir un esquema completo.
También puedes seguir el ejemplo en este notebook.
Databricks admite una amplia gama de intercalaciones, sensibles al idioma, insensibles a mayúsculas y minúsculas y a acentos. Es fácil usar esta característica para tablas y columnas nuevas. Pero, ¿qué pasa si tienes un sistema existente que usa upper() o lower() en predicados en todas partes y quieres aprovechar las mejoras de rendimiento asociadas con una intercalación nativa insensible a mayúsculas y minúsculas mientras simplificas tus consultas? Eso requerirá algo de programación; ahora puedes hacerlo todo en SQL.
Usemos el siguiente esquema de prueba:
El orden se basa en los puntos de código ASCII, donde todas las letras mayúsculas preceden a todas las letras minúsculas. ¿Puedes arreglar esto sin agregar upper() o lower()?
Nuestro primer paso es indicarle a la tabla que cambie su intercalación predeterminada para las columnas que se agreguen en el futuro. Puedes alimentar tus variables locales con marcadores de parámetros, que el notebook detectará automáticamente y agregará widgets. También puedes usar EXECUTE IMMEDIATE para ejecutar una instrucción ALTER TABLE compuesta dinámicamente.
Cada script SQL consta de una instrucción compuesta BEGIN .. END. Las variables locales se definen primero dentro de una instrucción compuesta, seguida de la lógica.
Todo esto es solo un conjunto de instrucciones lineales. Hasta ahora, podrías escribir todo esto con variables de sesión SQL sin la instrucción compuesta. Tampoco has logrado mucho. Después de todo, querías cambiar la intercalación de las columnas existentes. Para hacer esto, necesitas:
En resumen, necesitas iterar sobre la tabla INFORMATION_SCHEMA.COLUMNS.
SQL Scripting ofrece cuatro formas de bucles y maneras de controlar las iteraciones del bucle.
Ahora, aplica el bucle FOR a nuestro script de intercalación. La consulta obtiene los nombres de columna de todas las columnas de cadena de la tabla. El cuerpo del bucle altera la intercalación de cada columna por turno:
Verifiquemos que la tabla se ha actualizado correctamente:
Hasta ahora, todo bien. Nuestro código está funcionalmente completo, pero deberías indicarle a Delta que analice las columnas que modificaste para beneficiarte del salto de archivos. No quieres hacer esto por columna. Sino agruparlas todas y hacer el trabajo solo si hubo, de hecho, una columna de tipo string para la cual se alteró la intercalación. Decisiones, decisiones...
SQL Scripting ofrece tres formas de ejecutar sentencias SQL de forma condicional.
Para nuestro script de intercalación, un simple IF THEN END IF será suficiente. También necesitas recopilar el conjunto de columnas a las que aplicar ANALYZE y algo de magia de funciones de orden superior para producir la lista de columnas:
Lo que has escrito hasta ahora funciona para tablas individuales. ¿Qué pasa si quieres operar sobre todas las tablas de un esquema? SQL Scripting es totalmente componible. Puedes anidar sentencias compuestas, sentencias condicionales y bucles dentro de otras sentencias de SQL Scripting.
Así que lo que harás aquí es doble:
Este error tiene sentido. Tienes varias formas de proceder:
Una capacidad clave de SQL Scripting es la habilidad de interceptar y manejar excepciones. Los manejadores de condiciones se definen en la sección de declaración de una sentencia compuesta y se aplican a cualquier sentencia dentro de esa sentencia compuesta, incluidas las anidadas. Puedes manejar condiciones de error específicas por nombre, SQLSTATEs específicos que manejan varias condiciones de error, o todas las condiciones de error. Dentro del cuerpo del manejador de condiciones, puedes usar la sentencia GET DIAGNOSTICS para recuperar información sobre la excepción que se está manejando y ejecutar cualquier script SQL que consideres apropiado, como registrar el error en un log o ejecutar una lógica alternativa a la que falló. Luego puedes SIGNAL una nueva condición de error, RESIGNAL la condición original, o simplemente salir de la sentencia compuesta donde se define el manejador y continuar con la siguiente sentencia.
En nuestro script, queremos omitir cualquier sentencia para la que la sentencia ALTER TABLE DEFAULT COLLATION no se aplicó y registrar el nombre del objeto.
Arriba, has desarrollado un script administrativo puramente en SQL. También puedes escribir scripts ELT y convertirlos en Jobs. SQL Scripting es una herramienta realmente potente que deberías aprovechar.
Ya seas un usuario existente de Databricks o estés migrando desde otro producto, SQL Scripting es una capacidad que deberías usar. SQL Scripting sigue el estándar ANSI y es totalmente compatible con OSS Apache Spark™. SQL Scripting se describe en detalle en SQL Scripting | Documentación de Databricks.
También puedes usar este notebook para verlo tú mismo.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
