Aracılığıyla paylaş


Microsoft Fabric Synapse Veri Ambarı için Spark bağlayıcısı

Synapse Veri Ambarı için Spark bağlayıcısı, Spark geliştiricilerinin ve veri bilim adamlarının bir depodaki verilere ve bir lakehouse'un SQL analiz uç noktasından verilere erişmesini ve verilerle çalışmasını sağlar. Bağlayıcı aşağıdaki özellikleri sunar:

  • Aynı çalışma alanında veya birden çok çalışma alanında bir ambardan veya SQL analiz uç noktasından verilerle çalışabilirsiniz.
  • Bir Lakehouse'un SQL analiz uç noktası, çalışma alanı bağlamı temelinde otomatik olarak bulunur.
  • Bağlayıcı basitleştirilmiş bir Spark API'sine sahiptir, temel karmaşıklığı soyutlar ve tek bir kod satırıyla çalışır.
  • Bir tabloya veya görünüme erişirken bağlayıcı, SQL altyapısı düzeyinde tanımlanan güvenlik modellerini destekler. Bu modeller nesne düzeyinde güvenlik (OLS), satır düzeyi güvenlik (RLS) ve sütun düzeyinde güvenlik (CLS) içerir.
  • Bağlayıcı, Doku çalışma zamanına önceden yüklenmiş olarak gelir ve bu da ayrı yükleme gereksinimini ortadan kaldırır.

Not

Bağlayıcı şu anda önizleme aşamasındadır. Daha fazla bilgi için bu makalenin devamında yer alan geçerli sınırlamalara bakın.

Kimlik Doğrulaması

Microsoft Entra kimlik doğrulaması tümleşik bir kimlik doğrulama yaklaşımıdır. Kullanıcılar Microsoft Fabric çalışma alanında oturum açar ve kimlik bilgileri kimlik doğrulaması ve yetkilendirme için otomatik olarak SQL altyapısına geçirilir. Kimlik bilgileri otomatik olarak eşlenir ve kullanıcıların belirli yapılandırma seçeneklerini sağlaması gerekmez.

İzinler

SQL altyapısına bağlanmak için, kullanıcıların ambar veya SQL analiz uç noktasında (öğe düzeyi) en az Okuma iznine (SQL Server'da BAĞLANMA iznine benzer) olması gerekir. Kullanıcıların belirli tablo veya görünümlerdeki verileri okumak için ayrıntılı nesne düzeyinde izinlere de sahip olması gerekir. Daha fazla bilgi edinmek için bkz . Microsoft Fabric'te veri ambarı için güvenlik.

Kod şablonları ve örnekler

Yöntem imzası kullanma

Aşağıdaki komut, okuma isteği için yöntem imzasını gösterir synapsesql . Üç bölümden tableName oluşan bağımsız değişken, bir ambardan tablolara veya görünümlere ve bir lakehouse'un SQL analiz uç noktasına erişmek için gereklidir. Bağımsız değişkeni senaryonuza göre aşağıdaki adlarla güncelleştirin:

  • Bölüm 1: Deponun veya göl binasının adı.
  • Bölüm 2: Şemanın adı.
  • Bölüm 3: Tablonun veya görünümün adı.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame

Bir tablodan veya görünümden doğrudan okumanın yanı sıra, bu bağlayıcı SQL altyapısına geçirilen ve sonucu Spark'a geri döndürülen özel veya geçiş sorgusu belirtmenize de olanak tanır.

spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame

Bu bağlayıcı belirtilen ambar / lakehouse için uç noktayı otomatik olarak bulur, ancak açıkça belirtmek isterseniz, bunu yapabilirsiniz.

//For warehouse
spark.conf.set("spark.datawarehouse.<warehouse name>.sqlendpoint", "<sql endpoint,port>")
//For lakehouse
spark.conf.set("spark.lakehouse.<lakeshouse name>.sqlendpoint", "<sql endpoint,port>")
//Read from table
spark.read.synapsesql("<warehouse/lakeshouse name>.<schema name>.<table or view name>") => org.apache.spark.sql.DataFrame

Aynı çalışma alanı içindeki verileri okuma

Önemli

Bu içeri aktarma deyimlerini not defterinizin başında veya bağlayıcıyı kullanmaya başlamadan önce çalıştırın:

import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._

import com.microsoft.spark.fabric.Constants

Aşağıdaki kod, Spark DataFrame'deki bir tablodan veya görünümden verileri okumak için bir örnektir:

val df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")

Aşağıdaki kod, Spark DataFrame'de satır sayısı sınırı 10 olan bir tablodan veya görünümden veri okuma örneğidir:

val df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").limit(10)

Aşağıdaki kod, bir filtre uyguladıktan sonra Spark DataFrame'deki bir tablodan veya görünümden verileri okumak için bir örnektir:

val df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").filter("column name == 'value'")

Aşağıdaki kod, yalnızca seçili sütunlar için bir tablodaki veya Spark DataFrame'deki görünümdeki verileri okumak için bir örnektir:

val df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")

Çalışma alanları arasında veri okuma

Çalışma alanları arasında bir veri ambarı veya göl evinden verilere erişmek ve verileri okumak için, veri ambarınızın veya lakehouse'unuzun bulunduğu çalışma alanı kimliğini ve ardından lakehouse veya veri ambarı öğe kimliğini belirtebilirsiniz. Bu satır, belirtilen çalışma alanı kimliğine ve lakehouse/veri ambarı kimliğine sahip veri ambarından veya lakehouse'dan Spark DataFrame'deki bir tablodan veya görünümden veri okuma örneği sağlar:

import com.microsoft.spark.fabric.Constants
//For lakehouse
val df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.LakehouseId, "<lakehouse item id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
//For data warehouse
val df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.DatawarehouseId, "<data warehouse item id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")

Not

Not defterini çalıştırırken, bağlayıcı varsayılan olarak not defterine bağlı olan göl evi çalışma alanında belirtilen veri ambarını veya lakehouse'u arar. Başka bir çalışma alanındaki bir veri ambarı veya lakehouse'a başvurmak için, çalışma alanı kimliğini ve göl evi veya veri ambarı öğe kimliğini yukarıda gösterildiği gibi belirtin.

Hücreler ve diller arasında gerçekleştirilmiş verileri kullanma

Spark SQL veya PySpark'taki başka bir hücre tarafından bir hücrede veya Scala'da (geçici görünüm olarak kaydettikten sonra) getirilen verilere erişmek için Spark DataFrame'in createOrReplaceTempView API'sini kullanabilirsiniz. Bu kod satırları, Scala'daki bir Spark DataFrame'deki bir tablodan veya görünümden verileri okumak ve bu verileri Spark SQL ve PySpark genelinde kullanmak için bir örnek sağlar:

%%spark
spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").createOrReplaceTempView("<Temporary View Name>")

Şimdi not defterindeki veya hücre düzeyindeki dil tercihini Spark SQL olarak değiştirin ve verileri kayıtlı geçici görünümden getirin:

%%sql
SELECT * FROM <Temporary View Name> LIMIT 100

Ardından, not defterindeki veya hücre düzeyindeki dil tercihini PySpark (Python) olarak değiştirin ve kayıtlı geçici görünümden veri getirin:

%%pyspark
df = spark.read.table("<Temporary View Name>")

Bir ambardaki verileri temel alan bir lakehouse tablosu oluşturma

Bu kod satırları Scala'daki bir Spark DataFrame'deki bir tablodan veya görünümden verileri okumak ve lakehouse tablosu oluşturmak için bu verileri kullanmak için bir örnek sağlar:

val df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
df.write.format("delta").saveAsTable("<Lakehouse table name>")

Sorun giderme

Tamamlandıktan sonra, hücrenin çıkışında okuma yanıtı parçacığı görüntülenir. Geçerli hücredeki hata, not defterinin sonraki hücre yürütmelerini de iptal eder. Ayrıntılı hata bilgileri Spark uygulama günlüklerinde bulunur.

Geçerli sınırlamalar

Şu anda bağlayıcı:

  • Doku ambarlarından ve lakehouse öğelerinin SQL analiz uç noktasından veri almayı destekler.
  • Yalnızca Scala'ya destek olur.
  • Doku DW artık zaman yolculuğu söz dizimi içeren bir sorgu için bu bağlayıcının çalışmaması özelliğini destekliyor Time Travel .
  • Aşağı itme iyileştirmesi uygulamaz.
  • Tutarlılık için Azure Synapse Analytics için Apache Spark ile birlikte gönderilen kullanım imzasını korur. Ancak Azure Synapse Analytics'te ayrılmış bir SQL havuzuna bağlanmak ve bu havuzla çalışmak geriye dönük olarak uyumlu değildir.
  • Özel karakterler içeren sütun adları, 3 bölümlü tablo/görünüm adı temelinde sorgu gönderilmeden önce kaçış karakteri eklenerek işlenir. Özel veya geçişli sorgu tabanlı okuma durumunda, kullanıcıların özel karakterler içeren sütun adlarından kaçması gerekir.