Usare i dati con Spark SQL
L'API Dataframe fa parte di una libreria Spark denominata Spark SQL, che consente agli analisti dei dati di usare espressioni SQL per eseguire query e modificare i dati.
Creazione di oggetti di database nel catalogo Spark
Il catalogo Spark è un metastore per oggetti dati relazionali, ad esempio viste e tabelle. Il runtime di Spark può usare il catalogo per integrare facilmente il codice scritto in qualsiasi linguaggio supportato da Spark con espressioni SQL che potrebbero risultare più naturali per alcuni analisti o sviluppatori di dati.
Uno dei modi più semplici per rendere disponibili i dati in un dataframe per l'esecuzione di query nel catalogo Spark consiste nel creare una visualizzazione temporanea, come illustrato nell'esempio di codice seguente:
df.createOrReplaceTempView("products_view")
Una vista è temporanea, ovvero viene eliminata automaticamente alla fine della sessione corrente. È anche possibile creare tabelle che vengono salvate in modo permanente nel catalogo per definire un database su cui è possibile eseguire query usando Spark SQL.
Le tabelle sono strutture di metadati che archiviano i dati sottostanti nel percorso di archiviazione associato al catalogo. In Microsoft Fabric, i dati per le tabelle gestite vengono archiviati nella posizione di archiviazione Tabelle visualizzata nel data lake e nella stessa posizione sono elencate tutte le tabelle create con Spark.
È possibile creare una tabella vuota usando il metodo spark.catalog.createTable
oppure salvare un dataframe come tabella usando il relativo metodo saveAsTable
. L'eliminazione di una tabella gestita comporta anche l'eliminazione dei dati sottostanti.
Ad esempio, il codice seguente salva un dataframe come nuova tabella denominata prodotti:
df.write.format("delta").saveAsTable("products")
Nota
Il catalogo Spark supporta le tabelle basate su file in diversi formati. Il formato preferito in Microsoft Fabric è delta, ovvero il formato per una tecnologia dati relazionale in Spark denominata Delta Lake. Le tabelle Delta supportano le funzionalità comunemente disponibili nei sistemi di database relazionali, tra cui transazioni, controllo delle versioni e supporto per i dati di streaming.
Inoltre, è possibile creare una tabella esterna usando il metodo spark.catalog.createExternalTable
. Le tabelle esterne definiscono i metadati nel catalogo, ma ottengono i dati sottostanti da una posizione di archiviazione esterna; in genere una cartella nell'area di archiviazione File di un lakehouse. L'eliminazione di una tabella esterna non comporta l'eliminazione dei dati sottostanti.
Suggerimento
È possibile applicare la stessa tecnica di partizionamento alle tabelle delta lake descritte per i file parquet nell'unità precedente. Il partizionamento delle tabelle può dar luogo a prestazioni migliori durante l'esecuzione di query.
Uso dell'API Spark SQL per l'esecuzione di query sui dati
È possibile usare l'API Spark SQL nel codice scritto in qualsiasi linguaggio per eseguire query sui dati nel catalogo. Ad esempio, il codice PySpark seguente usa una query SQL per restituire i dati della tabella dei prodotti come dataframe.
bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
FROM products \
WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)
I risultati dell'esempio di codice sono simili alla tabella seguente:
ProductID | ProductName | ListPrice |
---|---|---|
771 | Mountain-100 argento, 38 | 3399,9900 |
839 | Road-750 Black, 52 | 539.9900 |
... | ... | ... |
Uso di codice SQL
L'esempio precedente ha illustrato come usare l'API Spark SQL per incorporare espressioni SQL nel codice Spark. In un notebook è anche possibile usare la riga magic %%sql
per eseguire codice SQL che esegue query sugli oggetti nel catalogo, come illustrato di seguito:
%%sql
SELECT Category, COUNT(ProductID) AS ProductCount
FROM products
GROUP BY Category
ORDER BY Category
L'esempio di codice SQL restituisce un set di risultati visualizzato automaticamente nel notebook come tabella:
Categoria | ProductCount |
---|---|
Bib-Shorts | 3 |
Bike Racks | 1 |
Bike Stands | 1 |
... | ... |