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 abstrakcję relacyjną nad plikami. 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 powoduje usunięcia 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ętrznej zarządzanej lokalizacji magazynu skojarzonej 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 (Rok ) i Month (Miesiąc ), 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 o formacie Year=*NNNN* / Month=*N*, z każdym folderem zawierającym 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 przy użyciu klucza magic %%sql w pierwszym wierszu, aby wskazać, że składnia SQL będzie używana, jak pokazano w poniższym skry skrywcie:

%%sql

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

Usuwanie tabel

Podczas pracy z tabelami zewnętrznymi możesz użyć DROP polecenia , 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;