Trabalhar com dados usando o Spark SQL
A API de Dataframe faz parte de uma biblioteca do Spark chamada Spark SQL, a qual permite que analistas de dados usem expressões SQL para consultar e manipular dados.
Tabelas e o catálogo do Spark
O catálogo do Spark é um metastore para objetos de dados relacionais, como exibições e tabelas. O runtime do Spark pode usar o catálogo para integrar perfeitamente o código escrito em qualquer linguagem com suporte do Spark a expressões SQL que podem ser mais naturais para alguns analistas de dados ou desenvolvedores.
Uma das maneiras mais simples de disponibilizar dados em um dataframe para consulta no catálogo do Spark é criar uma exibição temporária, conforme mostrado no seguinte código de exemplo:
df.createOrReplaceTempView("products_view")
Uma exibição é temporária, o que significa que ela é excluída automaticamente no final da sessão atual. Você também pode criar tabelas que persistem no catálogo para definir um banco de dados que possa ser consultado usando o Spark SQL.
Tabelas são estruturas de metadados que armazenam dados subjacentes no local de armazenamento associado ao catálogo. No Microsoft Fabric, os dados das tabelas gerenciadas são armazenados no local de armazenamento Tabelas mostrado no data lake, e esse local também lista todas as tabelas criadas usando o Spark.
É possível criar uma tabela vazia usando o método spark.catalog.createTable
ou salvar um dataframe como uma tabela usando o método saveAsTable
. Excluir uma tabela gerenciada também exclui os dados subjacentes.
Por exemplo, o seguinte código salva um dataframe como uma nova tabela chamada produtos:
df.write.format("delta").saveAsTable("products")
Observação
O catálogo do Spark dá suporte a tabelas de vários formatos baseadas em arquivos. O formato preferencial no Microsoft Fabric é delta, que é o formato de uma tecnologia de dados relacionais no Spark chamada Delta Lake. As tabelas Delta dão suporte a recursos comumente encontrados em sistemas de banco de dados relacionais, incluindo transações, controle de versão e suporte a dados de streaming.
Além disso, é possível criar tabelas externas usando o método spark.catalog.createExternalTable
. Tabelas externas definem metadados no catálogo, mas obtêm seus dados subjacentes de um local de armazenamento externo; frequentemente, uma pasta na área de armazenamento de Arquivos de um data lake. Excluir uma tabela externa não exclui os dados subjacentes.
Usando a API do Spark SQL para consultar dados
Você pode usar a API do Spark SQL em código escrito em qualquer linguagem para consultar dados no catálogo. Por exemplo, o código PySpark a seguir usa uma consulta SQL para retornar dados da tabela produtos como um dataframe.
bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
FROM products \
WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)
Os resultados do exemplo de código seriam semelhantes a estes:
ProductID | ProductName | ListPrice |
---|---|---|
771 | Mountain-100 Silver, 38 | 3399.9900 |
839 | Road-750 Black, 52 | 539,9900 |
... | ... | ... |
Usando SQL código
O exemplo anterior demonstrou como usar a API do Spark SQL para inserir expressões SQL no código Spark. Em um notebook, você também pode usar o magic %%sql
para executar um código SQL que consulta objetos no catálogo, conforme exemplificado abaixo:
%%sql
SELECT Category, COUNT(ProductID) AS ProductCount
FROM products
GROUP BY Category
ORDER BY Category
O exemplo de código SQL retorna um conjunto de resultados que é exibido automaticamente no notebook como uma tabela:
Categoria | ProductCount |
---|---|
Bretelles | 3 |
Racks de bicicleta | 1 |
Suportes de bicicleta | 1 |
... | ... |