Tworzenie tabel wykazu
Do tej pory rozważaliśmy wystąpienia tabel usługi Delta Lake utworzone na podstawie ramek danych i zmodyfikowane za pośrednictwem interfejsu API usługi Delta Lake. Tabele usługi Delta Lake można również zdefiniować jako tabele wykazu w magazynie metadanych Hive dla puli spark i pracować z nimi przy użyciu języka SQL.
Tabele zewnętrzne i zarządzane
Tabele w wykazie platformy Spark, w tym tabele usługi Delta Lake, mogą być zarządzane lub zewnętrzne. Ważne jest, aby zrozumieć rozróżnienie między tymi rodzajami tabel.
- Zarządzana tabela jest definiowana bez określonej lokalizacji, a pliki danych są przechowywane w magazynie używanym przez magazyn metadanych. Usunięcie tabeli nie tylko usuwa metadane z wykazu, ale także usuwa folder, w którym są przechowywane pliki danych.
- Tabela zewnętrzna jest definiowana dla niestandardowej lokalizacji pliku, w której są przechowywane dane dla tabeli. Metadane tabeli są definiowane w wykazie platformy Spark. Usunięcie tabeli powoduje usunięcie metadanych z wykazu, ale nie ma wpływu na pliki danych.
Tworzenie tabel wykazu
Istnieje kilka sposobów tworzenia tabel wykazu.
Tworzenie tabeli wykazu na podstawie ramki danych
Tabele zarządzane można utworzyć, pisząc ramkę danych przy użyciu saveAsTable
operacji, jak pokazano w poniższych przykładach:
# Save a dataframe as a managed table
df.write.format("delta").saveAsTable("MyManagedTable")
## specify a path option to save as an external table
df.write.format("delta").option("path", "/mydata").saveAsTable("MyExternalTable")
Tworzenie tabeli wykazu przy użyciu języka SQL
Tabelę wykazu można również utworzyć przy użyciu CREATE TABLE
instrukcji SQL z klauzulą USING DELTA
i opcjonalnym LOCATION
parametrem tabel zewnętrznych. Instrukcję można uruchomić przy użyciu interfejsu API SparkSQL, jak w poniższym przykładzie:
spark.sql("CREATE TABLE MyExternalTable USING DELTA LOCATION '/mydata'")
Alternatywnie możesz użyć natywnej obsługi SQL na platformie Spark, aby uruchomić instrukcję :
%%sql
CREATE TABLE MyExternalTable
USING DELTA
LOCATION '/mydata'
Napiwek
Instrukcja CREATE TABLE
zwraca błąd, jeśli tabela o określonej nazwie już istnieje w wykazie. Aby wyeliminować to zachowanie, możesz użyć CREATE TABLE IF NOT EXISTS
instrukcji lub instrukcji CREATE OR REPLACE TABLE
.
Definiowanie schematu tabeli
We wszystkich przykładach do tej pory tabela jest tworzona bez jawnego schematu. W przypadku tabel utworzonych przez napisanie ramki danych schemat tabeli jest dziedziczony z ramki danych. Podczas tworzenia tabeli zewnętrznej schemat jest dziedziczony z wszystkich plików, które są obecnie przechowywane w lokalizacji tabeli. Jednak podczas tworzenia nowej tabeli zarządzanej lub tabeli zewnętrznej z aktualnie pustą lokalizacją należy zdefiniować schemat tabeli, określając nazwy kolumn, typy i wartość null w ramach instrukcji CREATE TABLE; jak pokazano w poniższym przykładzie:
%%sql
CREATE TABLE ManagedSalesOrders
(
Orderid INT NOT NULL,
OrderDate TIMESTAMP NOT NULL,
CustomerName STRING,
SalesTotal FLOAT NOT NULL
)
USING DELTA
W przypadku korzystania z usługi Delta Lake schematy tabel są wymuszane — wszystkie wstawki i aktualizacje muszą być zgodne z określoną wartością null kolumny i typami danych.
Korzystanie z interfejsu API deltaTableBuilder
Możesz użyć interfejsu API deltaTableBuilder (część interfejsu API usługi Delta Lake), aby utworzyć tabelę wykazu, jak pokazano w poniższym przykładzie:
from delta.tables import *
DeltaTable.create(spark) \
.tableName("default.ManagedProducts") \
.addColumn("Productid", "INT") \
.addColumn("ProductName", "STRING") \
.addColumn("Category", "STRING") \
.addColumn("Price", "FLOAT") \
.execute()
Podobnie jak w przypadku instrukcji CREATE TABLE
SQL metoda zwraca błąd, create
jeśli tabela o określonej nazwie już istnieje. To zachowanie można ograniczyć przy użyciu createIfNotExists
metody lub createOrReplace
.
Korzystanie z tabel wykazu
Tabele wykazu, takie jak tabele, można używać w dowolnej relacyjnej bazie danych SQL, wykonywania zapytań i manipulowania nimi przy użyciu standardowych instrukcji SQL. Na przykład poniższy przykład kodu używa SELECT
instrukcji do wykonywania zapytań względem tabeli ManagedSalesOrders :
%%sql
SELECT orderid, salestotal
FROM ManagedSalesOrders
Napiwek
Aby uzyskać więcej informacji na temat pracy z usługą Delta Lake, zobacz Artykuł Table batch reads and writes (Operacje odczytu i zapisu w usłudze Table batch) w dokumentacji usługi Delta Lake.