Przekształcanie danych przy użyciu języka SQL

Ukończone

Biblioteka SparkSQL, która udostępnia strukturę ramek danych, umożliwia również używanie języka SQL jako sposobu pracy z danymi. Dzięki temu podejściu można wykonywać zapytania i przekształcać dane w ramkach danych przy użyciu zapytań SQL i utrwalać wyniki jako tabele.

Uwaga

Tabele to abstrakcje metadanych w plikach. Dane nie są przechowywane w tabeli relacyjnej, ale tabela zapewnia warstwę relacyjną na plikach w usłudze Data Lake.

Definiowanie tabel i widoków

Definicje tabel na platformie Spark są przechowywane w magazynie metadanych , warstwie metadanych, która hermetyzuje abstrakcje relacyjne w plikach. tabele zewnętrzne to tabele relacyjne w magazynie metadanych odwołujące się do plików w określonej lokalizacji typu data lake. Dostęp do tych danych można uzyskać, wykonując zapytanie względem tabeli lub odczytując pliki bezpośrednio z usługi Data Lake.

Uwaga

Tabele zewnętrzne są "luźno powiązane" z podstawowymi plikami i usunięcie tabeli nie usuwa plików. Dzięki temu można używać platformy Spark do wykonywania ciężkich operacji transformacji, a następnie utrwalania danych w jeziorze. Po wykonaniu tej czynności można usunąć tabelę i procesy podrzędne mogą uzyskiwać dostęp do tych zoptymalizowanych struktur. Można również zdefiniować tabele zarządzane, dla których bazowe pliki danych są przechowywane w wewnętrznie zarządzanej lokalizacji pamięci powiązanej z magazynem metadanych. Tabele zarządzane są "ściśle powiązane" z plikami, a usunięcie zarządzanej tabeli spowoduje usunięcie skojarzonych plików.

Poniższy przykład kodu zapisuje ramkę danych (załadowaną z plików CSV) jako nazwę tabeli zewnętrznej sales_orders. Pliki są przechowywane w folderze /sales_orders_table w usłudze Data Lake.

order_details.write.saveAsTable('sales_orders', format='parquet', mode='overwrite', path='/sales_orders_table')

Wykonywanie zapytań i przekształcanie danych przy użyciu języka SQL

Po zdefiniowaniu tabeli można użyć języka SQL do wykonywania zapytań i przekształcania danych. Poniższy kod tworzy dwie nowe kolumny pochodne o nazwie Year i Month, a następnie tworzy nową tabelę transformed_orders z dodanymi nowymi kolumnami pochodnymi.

# Create derived columns
sql_transform = spark.sql("SELECT *, YEAR(OrderDate) AS Year, MONTH(OrderDate) AS Month FROM sales_orders")

# Save the results
sql_transform.write.partitionBy("Year","Month").saveAsTable('transformed_orders', format='parquet', mode='overwrite', path='/transformed_orders_table')

Pliki danych dla nowej tabeli są przechowywane w hierarchii folderów w formacie Year=*NNNN* / Month=*N*, gdzie każdy folder zawiera plik parquet dla odpowiednich zamówień według roku i miesiąca.

Wykonywanie zapytań względem magazynu metadanych

Ponieważ ta nowa tabela została utworzona w magazynie metadanych, możesz użyć języka SQL do wykonywania zapytań bezpośrednio za pomocą klucza magic %%sql w pierwszym wierszu, aby wskazać, że składnia SQL będzie używana, jak pokazano w poniższym skrywcie:

%%sql

SELECT * FROM transformed_orders
WHERE Year = 2021
    AND Month = 1

Usuwanie tabel

Podczas pracy z tabelami zewnętrznymi można użyć polecenia DROP, aby usunąć definicje tabel z magazynu metadanych bez wpływu na pliki w usłudze Data Lake. Takie podejście umożliwia wyczyszczenie magazynu metadanych po użyciu programu SQL w celu przekształcenia danych przy jednoczesnym udostępnieniu przekształconych plików danych do podrzędnej analizy danych i procesów pozyskiwania.

%%sql

DROP TABLE transformed_orders;
DROP TABLE sales_orders;