Delta tabloları oluşturma

Tamamlandı

Bir Microsoft Fabric lakehouse'ta tablo oluşturduğunuzda, lakehouse için meta veri deposunda bir delta tablosu tanımlanır ve tablonun verileri tablonun temel Parquet dosyalarında depolanır.

Microsoft Fabric ortamındaki çoğu etkileşimli araçta, meta veri deposundaki tablo tanımını temel alınan dosyalara eşlemenin ayrıntıları özetlenir. Ancak bir göl evinde Apache Spark ile çalışırken, delta tablolarının oluşturulması ve yönetimi üzerinde daha fazla denetime sahip olursunuz.

Veri çerçevesinden delta tablosu oluşturma

Spark'ta delta tablosu oluşturmanın en kolay yollarından biri, bir veri çerçevesini delta biçiminde kaydetmektir. Örneğin, aşağıdaki PySpark kodu var olan bir dosyadaki verileri içeren bir veri çerçevesini yükler ve bu veri çerçevesini delta tablosu olarak kaydeder:

# Load a file into a dataframe
df = spark.read.load('Files/mydata.csv', format='csv', header=True)

# Save the dataframe as a delta table
df.write.format("delta").saveAsTable("mytable")

Kod, tablonun belirtilen tablo adıyla delta biçiminde kaydedilmesi gerektiğini belirtir. Tablonun verileri, tabloya ilişkin işlem günlüklerini içeren bir _delta_log klasörüyle birlikte lakehouse'daki Tablolar depolama alanında Parquet dosyalarına (veri çerçevesine yüklediğiniz kaynak dosyanın biçiminden bağımsız olarak) kaydedilir. Tablo, Veri gezgini bölmesindeki göl evi için Tablolar klasöründe listelenir.

Yönetilen ve dış tablolar

Önceki örnekte, veri çerçevesi yönetilen tablo olarak kaydedilmiştir; yani meta veri deposundaki tablo tanımı ve temel alınan veri dosyaları, Fabric lakehouse için Spark çalışma zamanı tarafından yönetilir. Tablo silindiğinde, lakehouse için Tablolar depolama konumundan temel alınan dosyalar da silinir.

Tabloları, meta veri deposundaki ilişkisel tablo tanımının alternatif bir dosya depolama konumuna eşlendiği dış tablolar olarak da oluşturabilirsiniz. Örneğin, aşağıdaki kod, verilerin lakehouse için Dosyalar depolama konumundaki klasörde depolandığı bir dış tablo oluşturur:

df.write.format("delta").saveAsTable("myexternaltable", path="Files/myexternaltable")

Bu örnekte, tablo tanımı meta veri deposunda oluşturulur (bu nedenle tablo lakehouse için Tablolar kullanıcı arabiriminde listelenir), ancak tablonun Parquet veri dosyaları ve JSON günlük dosyaları Dosyalar depolama konumunda depolanır (ve Lakehouse gezgini bölmesindeki Dosyalar düğümünde gösterilir).

Depolama konumu için aşağıdaki gibi tam bir yol da belirtebilirsiniz:

df.write.format("delta").saveAsTable("myexternaltable", path="abfss://my_store_url..../myexternaltable")

Lakehouse meta veri deposundan bir dış tablo silindiğinde ilişkili veri dosyaları silinmez .

Tablo meta verileri oluşturma

Bir veri çerçevesindeki mevcut verilerden tablo oluşturmak yaygın olsa da, meta veri deposunda başka yollarla verilerle doldurulacak bir tablo tanımı oluşturmak istediğiniz senaryolar genellikle vardır. Bu hedefe ulaşmak için kullanabileceğiniz birden çok yol vardır.

DeltaTableBuilder API'sini kullanma

DeltaTableBuilder API'si, belirtimlerinize göre bir tablo oluşturmak için Spark kodu yazmanızı sağlar. Örneğin, aşağıdaki kod belirtilen ad ve sütunlara sahip bir tablo oluşturur.

from delta.tables import *

DeltaTable.create(spark) \
  .tableName("products") \
  .addColumn("Productid", "INT") \
  .addColumn("ProductName", "STRING") \
  .addColumn("Category", "STRING") \
  .addColumn("Price", "FLOAT") \
  .execute()

Spark SQL kullanma

Bu örnekte gösterildiği gibi Spark SQL CREATE TABLE deyimini kullanarak da delta tabloları oluşturabilirsiniz:

%%sql

CREATE TABLE salesorders
(
    Orderid INT NOT NULL,
    OrderDate TIMESTAMP NOT NULL,
    CustomerName STRING,
    SalesTotal FLOAT NOT NULL
)
USING DELTA

Önceki örnek yönetilen bir tablo oluşturur. Burada gösterildiği gibi bir parametre belirterek bir LOCATION dış tablo da oluşturabilirsiniz:

%%sql

CREATE TABLE MyExternalTable
USING DELTA
LOCATION 'Files/mydata'

Dış tablo oluştururken, tablonun şeması belirtilen konumdaki verileri içeren Parquet dosyaları tarafından belirlenir. Bu yaklaşım, delta biçiminde kaydedilmiş verilere başvuran bir tablo tanımı oluşturmak istediğinizde veya verileri delta biçiminde almayı beklediğiniz bir klasöre bağlı olarak yararlı olabilir.

Verileri delta biçiminde kaydetme

Şimdiye kadar bir veri çerçevesini delta tablosu olarak kaydetmeyi (hem meta veri deposunda tablo şeması tanımını hem de delta biçimindeki veri dosyalarını oluşturma) ve tablo tanımını oluşturmayı (veri dosyalarını kaydetmeden meta veri deposunda tablo şemasını oluşturur) gördünüz. Üçüncü bir olasılık da meta veri deposunda tablo tanımı oluşturmadan verileri delta biçiminde kaydetmektir. Bu yaklaşım, Spark'ta gerçekleştirilen veri dönüştürme işlemlerinin sonuçlarını daha sonra delta lake API'sini kullanarak doğrudan bir tablo tanımını veya işlemini "yer paylaşımı" yapabileceğiniz bir dosya biçiminde kalıcı hale getirmek istediğinizde yararlı olabilir.

Örneğin, aşağıdaki PySpark kodu bir veri çerçevesini delta biçiminde yeni bir klasör konumuna kaydeder:

delta_path = "Files/mydatatable"
df.write.format("delta").save(delta_path)

Delta dosyaları belirtilen yolda Parquet biçiminde kaydedilir ve işlem günlüğü dosyalarını içeren bir _delta_log klasörü içerir. İşlem günlükleri, dış tablolarda veya Delta Lake API'sinde yapılan güncelleştirmeler gibi verilerdeki değişiklikleri kaydeder.

Var olan bir klasörün içeriğini, burada gösterildiği gibi üzerine yazma modunu kullanarak bir veri çerçevesindeki verilerle değiştirebilirsiniz:

new_df.write.format("delta").mode("overwrite").save(delta_path)

Ekleme modunu kullanarak veri çerçevesinden var olan bir klasöre satır da ekleyebilirsiniz:

new_rows_df.write.format("delta").mode("append").save(delta_path)

İpucu

Veri çerçevesini göl evindeki Tablolar konumuna kaydetmek için burada açıklanan tekniği kullanırsanız, Microsoft Fabric meta veri deposunda karşılık gelen tablo meta verilerini oluşturmak için otomatik tablo bulma özelliğini kullanır.