Escriba análisis componibles de Spark SQL en JupyterLab | de Jean-Claude Côte | julio de 2022

Ponga un poco de magia en sus cuadernos Spark SQL con el editor mágico de celdas SQL de JupyterLab

Foto de Julia Kadel en Unsplash

jupyterlab-sql-editor es una magia de ipython que le permite escribir análisis componibles en Spark SQL. Esta extensión de jupyterlab tiene un amplio conjunto de características:

  • Autocompletado de
    – nombres de tablas, nombres de columnas, subcampos anidados
    – uniones de mesa
    – funciones
  • Resaltado y formato de sintaxis SQL
  • Múltiples salidas de pantalla
    – html y texto sin formato
    – cuadrícula de datos interactiva y árbol json
    – captura de dataframe y vistas

jupyterlab-sql-editor amplía JupyterLab con formato SQL y resaltado de sintaxis.

jupyterlab-sql-editor también registra un servidor LSP que proporciona autocompletado. Prensa tecla para activar el autocompletado de nombres de tablas y columnas, incluidos los subcampos anidados. Utilizar el %%sparksql --refresh all Comando para actualizar el archivo de caché local utilizado por el autocompletador. El comando de actualización enumera las funciones, tablas y columnas que se encuentran en el contexto de chispa actual.

Autocompletar Spark SQL funciones con documentación y ejemplos de uso.

También hay algunas funciones para usuarios avanzados, como el llenado automático de todos los nombres de columna en la declaración SELECT y la sugerencia automática de condiciones JOIN en los nombres de columna coincidentes.

La magia de sparksql es una forma conveniente de ejecutar sentencias de spark sql. En este ejemplo, ejecutamos una declaración e imprimimos los resultados como texto.

%%sparksql --output textSELECT * from range(1, 1000)

Podemos hacer lo mismo en python.

statement = 'select * from range(1, 1000)'
df = spark.sql(statement)
df.show()

Como puedes ver, no es realmente magia. La magia de sparksql toma el cuerpo de una celda como declaración, la ejecuta e imprime los resultados. La extensión simplemente encapsula el código estándar de Python y lo hace fácilmente disponible a través de las opciones de la línea de comandos.

Jupyterlab-sql-editor admite un amplio conjunto de formatos de salida, como una cuadrícula de datos interactiva. Usamos los de Bloomberg ipydatagrid que puede posprocesar (ordenar, filtrar y buscar) los resultados devueltos por la consulta de Spark.

Un widget de árbol muestra el esquema de los resultados. Esto es especialmente útil para las columnas que contienen estructuras de datos anidadas complejas.

Utilice la salida JSON para navegar por el contenido de columnas anidadas complejas. Esta salida utiliza el widget de árbol de ipython estándar que puede buscar en cualquiera de los campos anidados.

Hasta ahora, hemos visto principalmente cómo consultar datos, sin embargo, no está limitado a consultas. Puede realizar cualquier instrucción SQL compatible con Spark SQL.

%%sparksql
CREATE TABLE prod.db.sample (
id bigint COMMENT 'unique id',
data string)
USING iceberg
%%sparksql
ALTER TABLE prod.db.sample
ADD COLUMNS (
new_column string comment 'new_column docs'
)

Usa la magia de la línea %sparksql para declaraciones simples de una sola línea

%sparksql SET spark.sql.variable.substitute=false
%sparksql DROP TABLE prod.db.sample
%sparksql CALL prod.system.set_current_snapshot('db.sample', 1)

Las expresiones de tabla comunes (CTE) son una forma estándar de dividir declaraciones SQL grandes en partes más manejables. Jupyterlab-sql-editor no solo es compatible con CTE, sino que también le permite capturar o alias de declaraciones SQL como vistas que luego se pueden reutilizar en celdas posteriores. Este mecanismo aprovecha el marco de datos de Spark createOrReplaceTempView función. Utilizar el --view opción para crear una vista temporal. Para evitar la ejecución inmediata de la consulta, utilice el --output skip opción. Cuando se utiliza esta opción, solo se crea la vista.

El autocompletado también funciona en vistas temporales. Utilizar el %%sparksql --refresh local opción para actualizar su archivo de caché de autocompletar con cualquier vista local que haya creado.

Hasta ahora hemos visto cómo usar las vistas de SQL para crear análisis de SQL componibles. Sin embargo, no está limitado solo a SQL, puede cambiar de SQL a marco de datos y viceversa. Partes de su análisis pueden adaptarse mejor a la API de marco de datos, ya que otras pueden prestarse mejor al dialecto SQL. Jupyterlab-sql-editor hace que sea muy fácil cambiar entre dialectos. Utilizar el--dataframeopción para convertir una instrucción SQL como marco de datos.

Dado cualquier marco de datos, vuelva a SQL llamando df.createOrReplaceTempView(). Por ejemplo, podría estar usando Spark ML, Spark GraphFrames o simplemente usando una fuente de datos como CSV. Muchas de las bibliotecas de Spark crean marcos de datos.

df = spark.read.csv(path)
df.createOrReplaceTempView(‘my_csv_table’)

Luego consulte la vista que creó en %%sparksql

%%sparksql
SELECT * FROM my_csv_table

Recuerde actualizar su caché local ejecutando %%sparksql --refresh local ¡y disfruta del autocompletador!

jupyterlab-sql-editor tiene dos dependencias principales. jupyterlab-lsp y sql-language-server. Instalar la extensión es muy fácil.

pip install jupyterlab-lsp jupyterlab-sql-editor

Instale el proyecto sql-language-server para proporcionar autocompletado.

sudo npm install -g sql-language-server

Para obtener una lista completa de las opciones de configuración, consulte la instalación detallada guía.

En este artículo mostramos cómo aprovechar %%sparksql para escribir fácilmente análisis componibles en Spark SQL. Nos enfocamos en Spark, sin embargo, jupyterlab-sql-editor también incluye un %%trino ¡magia! Es posible que se agreguen más motores SQL en el futuro. ¡Las contribuciones son bienvenidas! Aquí está nuestro repositorio git CybercentreCanada/jupyterlab-sql-editor.

en un artículo de seguimiento Cubriremos el soporte de jupyterlab-sql-editor para plantillas SQL usando Jinja y DBT.

A los contribuyentes de estos proyectos:

krassowski/jupyterlab-lsp
joe-re/sql-language-server
zeroturnaround/sql-formateador
cryeo/sparksql-magia
bloomberg/ipydatagrid

Fuente del artículo

¿Que te ha parecido?

Deja un comentario