PolyBase ile Azure Databricks ve Azure Synapse'i Bağlan (eski)
Önemli
Bu belge kullanımdan kaldırılmıştır ve güncelleştirilmeyebilir. Bu içerikte belirtilen ürünler, hizmetler veya teknolojiler artık desteklenmemektedir. Bkz. Azure Synapse Analytics'te verileri sorgulama.
Databricks, Azure Synapse bağlantıları için Azure Data Lake Storage 2. Nesil ile varsayılan COPY
işlevselliğin kullanılmasını önerir. Bu makale PolyBase ve blob depolama ile ilgili eski belgeleri içerir.
Azure Synapse Analytics (eski adıYLA SQL Veri Ambarı), petabaytlarca veri arasında karmaşık sorguları hızla çalıştırmak için yüksek düzeyde paralel işlemeden (MPP) yararlanan bulut tabanlı bir kurumsal veri ambarıdır. Azure'ı büyük veri çözümünün önemli bir bileşeni olarak kullanın. Basit PolyBase T-SQL sorguları veya COPY deyimiyle büyük verileri Azure'a aktarın ve ardından yüksek performanslı analiz çalıştırmak için MPP'nin gücünü kullanın. Tümleştirme ve analiz işlemleri sırasında veri ambarı, işletmenizin öngörüler için güvenebileceği tek veri sürümü haline gelir.
Azure Synapse bağlayıcısı, Azure Blob depolama kullanan Apache Spark için bir veri kaynağı uygulaması olan Azure Synapse bağlayıcısını ve PolyBase'i veya COPY
Azure Synapse'teki deyimini kullanarak Azure Databricks kümesi ile Azure Synapse örneği arasında büyük hacimli verileri verimli bir şekilde aktarmak için Azure Synapse'den Azure Synapse'e erişebilirsiniz.
Hem Azure Databricks kümesi hem de Azure Synapse örneği, bu iki sistem arasında veri alışverişi yapmak için ortak bir Blob depolama kapsayıcısına erişmektedir. Azure Databricks'te Apache Spark işleri Azure Synapse bağlayıcısı tarafından blob depolama kapsayıcısından veri okumak ve blob depolama kapsayıcısına veri yazmak için tetiklenir. Azure Synapse tarafında PolyBase tarafından gerçekleştirilen veri yükleme ve kaldırma işlemleri Azure Synapse bağlayıcısı tarafından JDBC aracılığıyla tetiklenir. Databricks Runtime 7.0 ve üzerinde, COPY
JDBC aracılığıyla Azure Synapse bağlayıcısı tarafından Azure Synapse'e veri yüklemek için varsayılan olarak kullanılır.
Not
COPY
yalnızca daha iyi performans sağlayan Azure Synapse 2. Nesil örneklerinde kullanılabilir. Veritabanınız 1. Nesil örneklerini kullanmaya devam ediyorsa, veritabanını 2. Nesil'e geçirmenizi öneririz.
Azure Synapse bağlayıcısı ETL için etkileşimli sorgulara göre daha uygundur çünkü her sorgu yürütme blob depolamaya büyük miktarda veri ayıklayabilir. Aynı Azure Synapse tablosunda birkaç sorgu gerçekleştirmeyi planlıyorsanız, ayıklanan verileri Parquet gibi bir biçimde kaydetmenizi öneririz.
Gereksinimler
Azure Synapse veritabanı ana anahtarı.
Kimlik doğrulama
Azure Synapse bağlayıcısında üç farklı türde ağ bağlantısı kullanılır:
- Spark sürücüsü ile Azure Synapse bağlantısı
- Azure depolama hesabı için Spark sürücüsü ve yürütücüleri
- Azure Synapse ile Azure depolama hesabı bağlantısı
┌─────────┐
┌─────────────────────────>│ STORAGE │<────────────────────────┐
│ Storage acc key / │ ACCOUNT │ Storage acc key / │
│ Managed Service ID / └─────────┘ OAuth 2.0 / │
│ │ │
│ │ │
│ │ Storage acc key / │
│ │ OAuth 2.0 / │
│ │ │
v v ┌──────v────┐
┌──────────┐ ┌──────────┐ │┌──────────┴┐
│ Synapse │ │ Spark │ ││ Spark │
│ Analytics│<────────────────────>│ Driver │<───────────────>│ Executors │
└──────────┘ JDBC with └──────────┘ Configured └───────────┘
username & password / in Spark
Aşağıdaki bölümlerde her bağlantının kimlik doğrulama yapılandırma seçenekleri açıklanmaktadır.
Spark sürücüsü ile Azure Synapse bağlantısı
Spark sürücüsü, kullanıcı adı ve parola ile JDBC veya kimlik doğrulaması için hizmet sorumlusuyla OAuth 2.0 kullanarak Azure Synapse'e bağlanabilir.
Kullanıcı adı ve parola
Spark sürücüsü ile Azure Synapse örneği arasında JDBC bağlantısı üzerinden gönderilen tüm veriler için Güvenli Yuva Katmanı (SSL) şifrelemesini etkinleştiren her iki kimlik doğrulama türü için de Azure portalı tarafından sağlanan bağlantı dizesi kullanmanızı öneririz. SSL şifrelemesinin etkinleştirildiğini doğrulamak için encrypt=true
bağlantı dizesi içinde arama yapabilirsiniz.
Spark sürücüsünün Azure Synapse'e erişmesine izin vermek için Azure portal aracılığıyla Azure Synapse çalışma alanının güvenliği altındaki Ağ bölmesinde Azure hizmetlerinin ve kaynaklarının bu çalışma alanına erişmesine izin ver ayarını ON olarak ayarlamanızı öneririz. Bu ayar tüm Azure IP adreslerinden ve tüm Azure alt ağlarından gelen iletişimlere olanak tanır ve Spark sürücülerinin Azure Synapse örneğine erişmesini sağlar.
OAuth 2.0 ve hizmet sorumlusu
Temel alınan depolama hesabına erişimi olan bir hizmet sorumlusu kullanarak Azure Synapse Analytics'de kimlik doğrulaması yapabilirsiniz. Bir Azure depolama hesabına erişmek üzere hizmet sorumlusu kimlik bilgilerini kullanmayla ilgili daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil ve Blob Depolama'ya bağlanma. Bağlayıcının enableServicePrincipalAuth
bir hizmet sorumlusuyla kimlik doğrulaması yapmasını sağlamak için bağlantı yapılandırması Parametrelerinde seçeneğini true
olarak ayarlamanız gerekir.
İsteğe bağlı olarak Azure Synapse Analytics bağlantısı için farklı bir hizmet sorumlusu kullanabilirsiniz. Depolama hesabı için hizmet sorumlusu kimlik bilgilerini ve Synapse için isteğe bağlı hizmet sorumlusu kimlik bilgilerini yapılandıran bir örnek:
ını
; Defining the Service Principal credentials for the Azure storage account
fs.azure.account.auth.type OAuth
fs.azure.account.oauth.provider.type org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
fs.azure.account.oauth2.client.id <application-id>
fs.azure.account.oauth2.client.secret <service-credential>
fs.azure.account.oauth2.client.endpoint https://login.microsoftonline.com/<directory-id>/oauth2/token
; Defining a separate set of service principal credentials for Azure Synapse Analytics (If not defined, the connector will use the Azure storage account credentials)
spark.databricks.sqldw.jdbc.service.principal.client.id <application-id>
spark.databricks.sqldw.jdbc.service.principal.client.secret <service-credential>
Scala
// Defining the Service Principal credentials for the Azure storage account
spark.conf.set("fs.azure.account.auth.type", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret", "<service-credential>")
spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Defining a separate set of service principal credentials for Azure Synapse Analytics (If not defined, the connector will use the Azure storage account credentials)
spark.conf.set("spark.databricks.sqldw.jdbc.service.principal.client.id", "<application-id>")
spark.conf.set("spark.databricks.sqldw.jdbc.service.principal.client.secret", "<service-credential>")
Python
# Defining the service principal credentials for the Azure storage account
spark.conf.set("fs.azure.account.auth.type", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret", "<service-credential>")
spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
# Defining a separate set of service principal credentials for Azure Synapse Analytics (If not defined, the connector will use the Azure storage account credentials)
spark.conf.set("spark.databricks.sqldw.jdbc.service.principal.client.id", "<application-id>")
spark.conf.set("spark.databricks.sqldw.jdbc.service.principal.client.secret", "<service-credential>")
R
# Load SparkR
library(SparkR)
conf <- sparkR.callJMethod(sparkR.session(), "conf")
# Defining the service principal credentials for the Azure storage account
sparkR.callJMethod(conf, "set", "fs.azure.account.auth.type", "OAuth")
sparkR.callJMethod(conf, "set", "fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
sparkR.callJMethod(conf, "set", "fs.azure.account.oauth2.client.id", "<application-id>")
sparkR.callJMethod(conf, "set", "fs.azure.account.oauth2.client.secret", "<service-credential>")
sparkR.callJMethod(conf, "set", "fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
# Defining a separate set of service principal credentials for Azure Synapse Analytics (If not defined, the connector will use the Azure storage account credentials)
sparkR.callJMethod(conf, "set", "spark.databricks.sqldw.jdbc.service.principal.client.id", "<application-id>")
sparkR.callJMethod(conf, "set", "spark.databricks.sqldw.jdbc.service.principal.client.secret", "<service-credential>")
Azure depolama hesabı için Spark sürücüsü ve yürütücüleri
Azure depolama kapsayıcısı, Azure Synapse'ten okurken veya Azure Synapse'e yazarken toplu verileri depolamak için bir aracı görevi görür. Spark, sürücüyü kullanarak abfss
ADLS 2. Nesil veya Blob Depolama bağlanır.
Aşağıdaki kimlik doğrulama seçenekleri kullanılabilir:
- hesap erişim anahtarını ve gizli diziyi Depolama
- OAuth 2.0 kimlik doğrulaması. OAuth 2.0 ve hizmet sorumluları hakkında daha fazla bilgi için bkz . Hizmet sorumlusu kullanarak depolamaya erişme ve Microsoft Entra Kimliği (Azure Active Directory).
Aşağıdaki örneklerde depolama hesabı erişim anahtarı yaklaşımını kullanmanın bu iki yolu gösterilmektedir. Aynı durum OAuth 2.0 yapılandırması için de geçerlidir.
Not defteri oturumu yapılandırması (tercih edilen)
Bu yaklaşım kullanıldığında, hesap erişim anahtarı komutu çalıştıran not defteriyle ilişkilendirilmiş oturum yapılandırmasında ayarlanır. Bu yapılandırma, aynı kümeye bağlı diğer not defterlerini etkilemez. spark
SparkSession
, not defterinde sağlanan nesnedir.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
Genel Hadoop yapılandırması
Bu yaklaşım, tüm not defterleri tarafından paylaşılan nesneyle SparkContext
ilişkili genel Hadoop yapılandırmasını güncelleştirir.
Scala
sc.hadoopConfiguration.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
Python
hadoopConfiguration
PySpark'ın tüm sürümlerinde kullanıma sunulmaz. Aşağıdaki komut bazı Spark iç sürümlerini kullanıyor olsa da, tüm PySpark sürümleriyle birlikte çalışmalıdır ve gelecekte bozulması veya değişmesi pek olası değildir:
sc._jsc.hadoopConfiguration().set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
Azure Synapse ile Azure depolama hesabı bağlantısı
Azure Synapse geçici verilerin yüklenmesi ve kaldırılması sırasında da bir depolama hesabına bağlanır.
Depolama hesabı için bir hesap anahtarı ve gizli dizi ayarladıysanız olarak ayarlayabilirsiniz forwardSparkAzureStorageCredentials
true
. Bu durumda, Azure Synapse bağlayıcısı not defteri oturum yapılandırmasında veya genel Hadoop yapılandırmasında ayarlanan hesap erişim anahtarını otomatik olarak bulur ve geçici bir Azure veritabanı kapsamlı kimlik bilgisi oluşturarak depolama hesabı erişim anahtarını bağlı Azure Synapse örneğine iletir.
Alternatif olarak, ADLS 2. Nesil'i OAuth 2.0 kimlik doğrulamasıyla kullanıyorsanız veya Azure Synapse örneğiniz Yönetilen Hizmet Kimliğine sahip olacak şekilde yapılandırılmışsa (genellikle bir VNet + Hizmet Uç Noktaları kurulumuyla birlikte), olarak true
ayarlamanız useAzureMSI
gerekir. Bu durumda bağlayıcı, veritabanı kapsamlı kimlik bilgileri için belirtecektir IDENTITY = 'Managed Service Identity'
ve belirtmeyecektir SECRET
.
Akış desteği
Azure Synapse bağlayıcısı, toplu yazma işlemleriyle tutarlı kullanıcı deneyimi sağlayan ve PolyBase COPY
kullanan veya Azure Databricks kümesi ile Azure Synapse örneği arasındaki büyük veri aktarımları için Azure Synapse için verimli ve ölçeklenebilir Yapılandırılmış Akış yazma desteği sunar. Toplu yazma işlemlerine benzer şekilde, akış büyük ölçüde ETL için tasarlanmıştır, bu nedenle bazı durumlarda gerçek zamanlı veri işleme için uygun olmayan daha yüksek gecikme süresi sağlar.
Hataya dayanıklılık semantiği
Varsayılan olarak, Azure Synapse Streaming DBFS'deki denetim noktası konumunun, Azure Synapse'teki denetim noktası tablosunun ve akışın her tür hatayı, yeniden denemeyi ve sorgu yeniden başlatmayı işleyebilmesini sağlamak için kilitleme mekanizmasını kullanarak sorgunun ilerleme durumunu güvenilir bir şekilde izleyerek Azure Synapse tablosuna veri yazmak için tam bir kez uçtan uca garanti sunar.
İsteğe bağlı olarak, seçeneğini olarak ayarlayarak spark.databricks.sqldw.streaming.exactlyOnce.enabled
false
Azure Synapse Streaming için en az bir kez daha az kısıtlayıcı semantik seçebilirsiniz. Bu durumda, Azure Synapse'e aralıklı bağlantı hataları veya beklenmeyen sorgu sonlandırma durumunda veri yineleme gerçekleşebilir.
Kullanım (Toplu İş)
Bu bağlayıcıyı Scala, Python, SQL ve R not defterlerindeki veri kaynağı API'sini kullanarak kullanabilirsiniz.
Scala
// Otherwise, set up the Blob storage account access key in the notebook session conf.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
// Get some data from an Azure Synapse table.
val df: DataFrame = spark.read
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("dbTable", "<your-table-name>")
.load()
// Load data from an Azure Synapse query.
val df: DataFrame = spark.read
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("query", "select x, count(*) as cnt from table group by x")
.load()
// Apply some transformations to the data, then use the
// Data Source API to write the data back to another table in Azure Synapse.
df.write
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("dbTable", "<your-table-name>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.save()
Python
# Otherwise, set up the Blob storage account access key in the notebook session conf.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
# Get some data from an Azure Synapse table.
df = spark.read \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("dbTable", "<your-table-name>") \
.load()
# Load data from an Azure Synapse query.
df = spark.read \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("query", "select x, count(*) as cnt from table group by x") \
.load()
# Apply some transformations to the data, then use the
# Data Source API to write the data back to another table in Azure Synapse.
df.write \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("dbTable", "<your-table-name>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.save()
SQL
-- Otherwise, set up the Blob storage account access key in the notebook session conf.
SET fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net=<your-storage-account-access-key>;
-- Read data using SQL.
CREATE TABLE example_table_in_spark_read
USING com.databricks.spark.sqldw
OPTIONS (
url 'jdbc:sqlserver://<the-rest-of-the-connection-string>',
forwardSparkAzureStorageCredentials 'true',
dbTable '<your-table-name>',
tempDir 'abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>'
);
-- Write data using SQL.
-- Create a new table, throwing an error if a table with the same name already exists:
CREATE TABLE example_table_in_spark_write
USING com.databricks.spark.sqldw
OPTIONS (
url 'jdbc:sqlserver://<the-rest-of-the-connection-string>',
forwardSparkAzureStorageCredentials 'true',
dbTable '<your-table-name>',
tempDir 'abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>'
)
AS SELECT * FROM table_to_save_in_spark;
R
# Load SparkR
library(SparkR)
# Otherwise, set up the Blob storage account access key in the notebook session conf.
conf <- sparkR.callJMethod(sparkR.session(), "conf")
sparkR.callJMethod(conf, "set", "fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net", "<your-storage-account-access-key>")
# Get some data from an Azure Synapse table.
df <- read.df(
source = "com.databricks.spark.sqldw",
url = "jdbc:sqlserver://<the-rest-of-the-connection-string>",
forward_spark_azure_storage_credentials = "true",
dbTable = "<your-table-name>",
tempDir = "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
# Load data from an Azure Synapse query.
df <- read.df(
source = "com.databricks.spark.sqldw",
url = "jdbc:sqlserver://<the-rest-of-the-connection-string>",
forward_spark_azure_storage_credentials = "true",
query = "select x, count(*) as cnt from table group by x",
tempDir = "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
# Apply some transformations to the data, then use the
# Data Source API to write the data back to another table in Azure Synapse.
write.df(
df,
source = "com.databricks.spark.sqldw",
url = "jdbc:sqlserver://<the-rest-of-the-connection-string>",
forward_spark_azure_storage_credentials = "true",
dbTable = "<your-table-name>",
tempDir = "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
Kullanım (Akış)
Scala ve Python not defterlerinde Yapılandırılmış Akış'ı kullanarak veri yazabilirsiniz.
Scala
// Set up the Blob storage account access key in the notebook session conf.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
// Prepare streaming source; this could be Kafka or a simple rate stream.
val df: DataFrame = spark.readStream
.format("rate")
.option("rowsPerSecond", "100000")
.option("numPartitions", "16")
.load()
// Apply some transformations to the data then use
// Structured Streaming API to continuously write the data to a table in Azure Synapse.
df.writeStream
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("dbTable", "<your-table-name>")
.option("checkpointLocation", "/tmp_checkpoint_location")
.start()
Python
# Set up the Blob storage account access key in the notebook session conf.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
# Prepare streaming source; this could be Kafka or a simple rate stream.
df = spark.readStream \
.format("rate") \
.option("rowsPerSecond", "100000") \
.option("numPartitions", "16") \
.load()
# Apply some transformations to the data then use
# Structured Streaming API to continuously write the data to a table in Azure Synapse.
df.writeStream \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("dbTable", "<your-table-name>") \
.option("checkpointLocation", "/tmp_checkpoint_location") \
.start()
Yapılandırma
Bu bölümde bağlayıcı, gerekli izinler ve çeşitli yapılandırma parametreleri için yazma semantiğinin nasıl yapılandırıldığı açıklanmaktadır.
Bu bölümde:
- Toplu yazma işlemleri için desteklenen kaydetme modları
- Akış yazma işlemleri için desteklenen çıkış modları
- Yazma semantiği
- PolyBase için gerekli Azure Synapse izinleri
- Deyimi için
COPY
gerekli Azure Synapse izinleri - Parametreler
- Azure Synapse'e sorgu gönderme
- Geçici veri yönetimi
- Geçici nesne yönetimi
- Akış denetim noktası tablo yönetimi
Toplu yazma işlemleri için desteklenen kaydetme modları
Azure Synapse bağlayıcısı , , ve kayıt modlarını destekler ErrorIfExists
ve Overwrite
varsayılan mod olarak olurErrorIfExists
. Append
Ignore
Apache Spark'ta desteklenen kaydetme modları hakkında daha fazla bilgi için Bkz . Kaydetme Modları hakkında Spark SQL belgeleri.
Akış yazma işlemleri için desteklenen çıkış modları
Azure Synapse bağlayıcısı, kayıt eklemeleri ve Complete
toplamaları için ve çıkış modlarını desteklerAppend
.
Çıkış modları ve uyumluluk matrisi hakkında daha fazla bilgi için Yapılandırılmış Akış kılavuzuna bakın.
Yazma semantiği
Not
COPY
Databricks Runtime 7.0 ve üzeri sürümleriyle kullanılabilir.
PolyBase'e ek olarak Azure Synapse bağlayıcısı deyimini COPY
de destekler. deyimi COPY
, dış tablo oluşturmaya gerek kalmadan Azure Synapse'e veri yüklemenin daha kolay bir yolunu sunar, verileri yüklemek için daha az izin gerektirir ve Azure Synapse'e veri alımı performansını artırır.
Varsayılan olarak, bağlayıcı otomatik olarak en iyi yazma semantiğini bulur (COPY
bir Azure Synapse 2. Nesil örneğini hedeflerken PolyBase aksi takdirde). Yazma semantiğini aşağıdaki yapılandırmayla da belirtebilirsiniz:
Scala
// Configure the write semantics for Azure Synapse connector in the notebook session conf.
spark.conf.set("spark.databricks.sqldw.writeSemantics", "<write-semantics>")
Python
# Configure the write semantics for Azure Synapse connector in the notebook session conf.
spark.conf.set("spark.databricks.sqldw.writeSemantics", "<write-semantics>")
SQL
-- Configure the write semantics for Azure Synapse connector in the notebook session conf.
SET spark.databricks.sqldw.writeSemantics=<write-semantics>;
R
# Load SparkR
library(SparkR)
# Configure the write semantics for Azure Synapse connector in the notebook session conf.
conf <- sparkR.callJMethod(sparkR.session(), "conf")
sparkR.callJMethod(conf, "set", "spark.databricks.sqldw.writeSemantics", "<write-semantics>")
polybase
burada <write-semantics>
PolyBase kullanmak veya copy
deyimini COPY
kullanmaktır.
PolyBase için gerekli Azure Synapse izinleri
PolyBase kullandığınızda, Azure Synapse bağlayıcısı JDBC bağlantı kullanıcısının bağlı Azure Synapse örneğinde aşağıdaki komutları çalıştırma iznine sahip olmasını gerektirir:
- CREATE DATABASE SCOPED CREDENTIAL
- CREATE EXTERNAL DATA SOURCE
- CREATE EXTERNAL FILE FORMAT
- DıŞ TABLO OLUŞTURMA
İlk komutun önkoşulu olarak bağlayıcı, belirtilen Azure Synapse örneği için bir veritabanı ana anahtarının zaten mevcut olmasını bekler. Değilse, CREATE MASTER KEY komutunu kullanarak bir anahtar oluşturabilirsiniz.
Ayrıca, aracılığıyla ayarlanan dbTable
Azure Synapse tablosunu veya içinde query
başvuruda bulunılan tabloları okumak için JDBC kullanıcısının gerekli Azure Synapse tablolarına erişme iznine sahip olması gerekir. aracılığıyla dbTable
ayarlanan bir Azure Synapse tablosuna veri yazmak için JDBC kullanıcısının bu Azure Synapse tablosuna yazma izni olmalıdır.
Aşağıdaki tabloda PolyBase ile tüm işlemler için gerekli izinler özetlemektedir:
İşlem | İzinler | Dış veri kaynağı kullanırken izinler |
---|---|---|
Toplu yazma | DENETLE | Bkz. Toplu yazma |
Akış yazma | DENETLE | Bkz. Akış yazma |
Okundu | DENETLE | Bkz. Okuma |
Dış veri kaynağı seçeneğiyle PolyBase için gerekli Azure Synapse izinleri
PolyBase'i önceden sağlanan bir dış veri kaynağıyla kullanabilirsiniz. externalDataSource
Daha fazla bilgi için Parametreler'deki parametresine bakın.
PolyBase'i önceden sağlanan bir dış veri kaynağıyla kullanmak için Azure Synapse bağlayıcısı, JDBC bağlantı kullanıcısının bağlı Azure Synapse örneğinde aşağıdaki komutları çalıştırma iznine sahip olmasını gerektirir:
Dış veri kaynağı oluşturmak için önce veritabanı kapsamlı bir kimlik bilgisi oluşturmanız gerekir. Aşağıdaki bağlantılarda, hizmet sorumluları için kapsamlı kimlik bilgilerinin ve ABFS konumu için dış veri kaynağının nasıl oluşturulacağı açıklanmaktadır:
Not
Dış veri kaynağı konumu bir kapsayıcıyı işaret etmelidir. Konum bir kapsayıcıdaki bir dizinse bağlayıcı çalışmaz.
Aşağıdaki tabloda, dış veri kaynağı seçeneğiyle PolyBase yazma işlemlerinin izinleri özetlemektedir:
İşlem | İzinler (var olan bir tabloya ekleme) | İzinler (yeni bir tabloya ekleme) |
---|---|---|
Toplu yazma | VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME INSERT CREATE TABLE TÜM ŞEMALARı DEĞIŞTIRME TÜM DıŞ VERI KAYNAKLARıNı DEĞIŞTIRME TÜM DıŞ DOSYA BIÇIMLERINI DEĞIŞTIRME |
VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME INSERT CREATE TABLE TÜM ŞEMALARı DEĞIŞTIRME TÜM DıŞ VERI KAYNAKLARıNı DEĞIŞTIRME TÜM DıŞ DOSYA BIÇIMLERINI DEĞIŞTIRME |
Akış yazma | VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME INSERT CREATE TABLE TÜM ŞEMALARı DEĞIŞTIRME TÜM DıŞ VERI KAYNAKLARıNı DEĞIŞTIRME TÜM DıŞ DOSYA BIÇIMLERINI DEĞIŞTIRME |
VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME INSERT CREATE TABLE TÜM ŞEMALARı DEĞIŞTIRME TÜM DıŞ VERI KAYNAKLARıNı DEĞIŞTIRME TÜM DıŞ DOSYA BIÇIMLERINI DEĞIŞTIRME |
Aşağıdaki tabloda, dış veri kaynağı seçeneğiyle PolyBase okuma işlemlerinin izinleri özetlemektedir:
İşlem | İzinler |
---|---|
Okundu | CREATE TABLE TÜM ŞEMALARı DEĞIŞTIRME TÜM DıŞ VERI KAYNAKLARıNı DEĞIŞTIRME TÜM DıŞ DOSYA BIÇIMLERINI DEĞIŞTIRME |
Scala, Python, SQL ve R not defterlerindeki veri kaynağı API'sini okumak için bu bağlayıcıyı kullanabilirsiniz.
Scala
// Get some data from an Azure Synapse table.
val df: DataFrame = spark.read
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("externalDataSource", "<your-pre-provisioned-data-source>")
.option("dbTable", "<your-table-name>")
.load()
Python
# Get some data from an Azure Synapse table.
df = spark.read \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.option("externalDataSource", "<your-pre-provisioned-data-source>") \
.option("dbTable", "<your-table-name>") \
.load()
SQL
-- Read data using SQL.
CREATE TABLE example_table_in_spark_read
USING com.databricks.spark.sqldw
OPTIONS (
url 'jdbc:sqlserver://<the-rest-of-the-connection-string>',
forwardSparkAzureStorageCredentials 'true',
dbTable '<your-table-name>',
tempDir 'abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>',
externalDataSource '<your-pre-provisioned-data-source>'
);
R
# Get some data from an Azure Synapse table.
df <- read.df(
source = "com.databricks.spark.sqldw",
url = "jdbc:sqlserver://<the-rest-of-the-connection-string>",
forward_spark_azure_storage_credentials = "true",
dbTable = "<your-table-name>",
tempDir = "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>"
externalDataSource = "<your-pre-provisioned-data-source>")
Deyimi için COPY
gerekli Azure Synapse izinleri
Not
Databricks Runtime 7.0 ve üzerinde kullanılabilir.
deyimini COPY
kullandığınızda Azure Synapse bağlayıcısı, JDBC bağlantı kullanıcısının bağlı Azure Synapse örneğinde aşağıdaki komutları çalıştırma iznine sahip olmasını gerektirir:
Hedef tablo Azure Synapse'te yoksa, yukarıdaki komuta ek olarak aşağıdaki komutu çalıştırma izni gerekir:
Aşağıdaki tabloda ile COPY
toplu ve akış yazma izinlerini özetlemektedir:
İşlem | İzinler (var olan bir tabloya ekleme) | İzinler (yeni bir tabloya ekleme) |
---|---|---|
Toplu yazma | VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME INSERT |
VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME INSERT CREATE TABLE ALTER ON SCHEMA :: dbo |
Akış yazma | VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME INSERT |
VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME INSERT CREATE TABLE ALTER ON SCHEMA :: dbo |
Parametreler
Spark SQL'de sağlanan parametre eşlemesi OPTIONS
aşağıdaki ayarları destekler:
Parametre | Zorunlu | Varsayılan | Notlar |
---|---|---|---|
dbTable |
Evet, belirtilmediği sürece query |
Varsayılan yok | Azure Synapse'te oluşturulacak veya okunacak tablo. Bu parametre verileri Azure Synapse'e geri kaydederken gereklidir. Belirli bir şemadaki bir tabloya erişmek için de kullanabilirsiniz {SCHEMA NAME}.{TABLE NAME} . Şema adı sağlanmazsa, JDBC kullanıcısı ile ilişkilendirilmiş varsayılan şema kullanılır.Daha önce desteklenen dbtable değişken kullanım dışıdır ve gelecek sürümlerde yoksayılacaktır. Bunun yerine "camel case" adını kullanın. |
query |
Evet, belirtilmediği sürece dbTable |
Varsayılan yok | Azure Synapse'te okunacak sorgu. Sorguda başvuruda bulunan tablolar için, belirli bir şemadaki bir tabloya erişmek için de kullanabilirsiniz {SCHEMA NAME}.{TABLE NAME} . Şema adı sağlanmazsa, JDBC kullanıcısı ile ilişkilendirilmiş varsayılan şema kullanılır. |
user |
Hayır | Varsayılan yok | Azure Synapse kullanıcı adı. Seçenekle password birlikte kullanılmalıdır. Yalnızca kullanıcı ve parola URL'ye geçirilmediyse kullanılabilir. her ikisini de geçirmek hataya neden olur. |
password |
Hayır | Varsayılan yok | Azure Synapse parolası. Seçenekle user birlikte kullanılmalıdır. Yalnızca kullanıcı ve parola URL'ye geçirilmediyse kullanılabilir. her ikisini de geçirmek hataya neden olur. |
url |
Yes | Varsayılan yok | Altprotocol olarak ayarlanmış bir JDBC URL'si sqlserver . Azure portalı tarafından sağlanan bağlantı dizesi kullanılması önerilir. Ayarencrypt=true JDBC bağlantısının SSL şifrelemesini etkinleştirdiğinden kesinlikle önerilir. ve password ayrı olarak ayarlanırsauser , bunları URL'ye eklemeniz gerekmez. |
jdbcDriver |
Hayır | JDBC URL'sinin altprotokolü tarafından belirlenir | Kullanılacak JDBC sürücüsünün sınıf adı. Bu sınıf sınıf yolu üzerinde olmalıdır. Çoğu durumda, uygun sürücü sınıf adı JDBC URL'sinin altprotokolü tarafından otomatik olarak belirlendiğinden, bu seçeneği belirtmek gerekli olmamalıdır. Daha önce desteklenen jdbc_driver değişken kullanım dışıdır ve gelecek sürümlerde yoksayılacaktır. Bunun yerine "camel case" adını kullanın. |
tempDir |
Yes | Varsayılan yok | Bir abfss URI. Azure Synapse için ayrılmış bir Blob depolama kapsayıcısı kullanmanızı öneririz.Daha önce desteklenen tempdir değişken kullanım dışıdır ve gelecek sürümlerde yoksayılacaktır. Bunun yerine "camel case" adını kullanın. |
tempFormat |
Hayır | PARQUET |
Azure Synapse'e yazarken geçici dosyaların blob deposuna kaydedildiği biçim. varsayılan değeri PARQUET ; şu anda başka hiçbir değere izin verilmiyor. |
tempCompression |
Hayır | SNAPPY |
Hem Spark hem de Azure Synapse tarafından geçici kodlamak/kodunu çözmek için kullanılacak sıkıştırma algoritması. Şu anda desteklenen değerler şunlardır: UNCOMPRESSED , SNAPPY ve GZIP . |
forwardSparkAzureStorageCredentials |
Hayır | yanlış | ise true , kitaplık Spark'ın Blob depolama kapsayıcısına bağlanmak için kullandığı kimlik bilgilerini otomatik olarak bulur ve bu kimlik bilgilerini JDBC üzerinden Azure Synapse'e iletir. Bu kimlik bilgileri JDBC sorgusunun bir parçası olarak gönderilir. Bu nedenle, bu seçeneği kullandığınızda JDBC bağlantısının SSL şifrelemesini etkinleştirmeniz kesinlikle önerilir.Azure Synapse bağlayıcısının geçerli sürümü için , veya sürümünden forwardSparkAzureStorageCredentials enableServicePrincipalAuth birinin (tam olarak) olarak useAzureMSI ayarlanması gerekirtrue .Daha önce desteklenen forward_spark_azure_storage_credentials değişken kullanım dışıdır ve gelecek sürümlerde yoksayılacaktır. Bunun yerine "camel case" adını kullanın. |
useAzureMSI |
Hayır | yanlış | isetrue , kitaplık, oluşturduğu veritabanı kapsamlı kimlik bilgileri için belirtip hayır SECRET değerini belirtirIDENTITY = 'Managed Service Identity' .Azure Synapse bağlayıcısının geçerli sürümü için , veya sürümünden forwardSparkAzureStorageCredentials enableServicePrincipalAuth birinin (tam olarak) olarak useAzureMSI ayarlanması gerekirtrue . |
enableServicePrincipalAuth |
Hayır | yanlış | ise true , kitaplık JDBC üzerinden Azure depolama hesabına ve Azure Synapse Analytics'e bağlanmak için sağlanan hizmet sorumlusu kimlik bilgilerini kullanır.Azure Synapse bağlayıcısının geçerli sürümü için , veya sürümünden forwardSparkAzureStorageCredentials enableServicePrincipalAuth birinin (tam olarak) olarak useAzureMSI ayarlanması gerekirtrue . |
tableOptions |
Hayır | CLUSTERED COLUMNSTORE INDEX , DISTRIBUTION = ROUND_ROBIN |
aracılığıyla dbTable ayarlanan Azure Synapse tablosunu oluştururken tablo seçeneklerini belirtmek için kullanılan dize. Bu dize, Azure Synapse'e WITH karşı verilen SQL deyiminin CREATE TABLE yan tümcesine geçirilir.Daha önce desteklenen table_options değişken kullanım dışıdır ve gelecek sürümlerde yoksayılacaktır. Bunun yerine "camel case" adını kullanın. |
preActions |
Hayır | Varsayılan yok (boş dize) | ; Azure Synapse örneğine veri yazmadan önce Azure Synapse'te yürütülecek SQL komutlarının ayrılmış listesi. Bu SQL komutlarının Azure Synapse tarafından kabul edilen geçerli komutlar olması gerekir.Bu komutlardan herhangi biri başarısız olursa, hata olarak değerlendirilir ve yazma işlemi yürütülemez. |
postActions |
Hayır | Varsayılan yok (boş dize) | ; Bağlayıcı Verileri Azure Synapse örneğine başarıyla yazdıktan sonra Azure Synapse'de yürütülecek SQL komutlarının ayrılmış listesi. Bu SQL komutlarının Azure Synapse tarafından kabul edilen geçerli komutlar olması gerekir.Bu komutlardan herhangi biri başarısız olursa hata olarak değerlendirilir ve veriler Azure Synapse örneğine başarıyla yazıldıktan sonra bir özel durumla karşılaşırsınız. |
maxStrLength |
Hayır | Kategori 256 | StringType Spark'ta, Azure Synapse'teki türe NVARCHAR(maxStrLength) eşlenir. Tabloda bulunan tüm NVARCHAR(maxStrLength) tür sütunları için dize uzunluğunu adla ayarlamak için kullanabilirsiniz maxStrLength dbTable azure synapse'te.Daha önce desteklenen maxstrlength değişken kullanım dışıdır ve gelecek sürümlerde yoksayılacaktır. Bunun yerine "camel case" adını kullanın. |
checkpointLocation |
Yes | Varsayılan yok | Meta verileri ve denetim noktası bilgilerini yazmak için Yapılandırılmış Akış tarafından kullanılacak DBFS'de konum. Yapılandırılmış Akış programlama kılavuzunda Denetim Noktası Oluşturma ile Hatalardan Kurtarma bölümüne bakın. |
numStreamingTempDirsToKeep |
Hayır | 0 | Akıştaki mikro toplu işlemlerin düzenli olarak temizlenmesi için kaç (en son) geçici dizinin tutulacak olduğunu gösterir. olarak 0 ayarlandığında, mikro toplu iş işlendikten hemen sonra dizin silme tetiklenir, aksi takdirde en son mikro toplu iş sayısı tutulur ve dizinlerin geri kalanı kaldırılır. Düzenli temizlemeyi devre dışı bırakmak için kullanın -1 . |
applicationName |
Hayır | Databricks-User-Query |
Her sorgu için bağlantının etiketi. Belirtilmezse veya değer boş bir dizeyse, etiketin varsayılan değeri JDBC URL'si eklenir. Varsayılan değer, Azure DB İzleme aracının sorgulara karşı sahte SQL ekleme uyarıları oluşturmasını engeller. |
maxbinlength |
Hayır | Varsayılan yok | Sütunların sütun uzunluğunu BinaryType denetleyin. Bu parametre olarak VARBINARY(maxbinlength) çevrilir. |
identityInsert |
Hayır | yanlış | true Azure Synapse tablosunun kimlik sütununa DataFrame tarafından sağlanan bir değer ekleyen modu etkinleştirme IDENTITY_INSERT ayarı.Bkz. Bir IDENTITY sütununa açıkça değer ekleme. |
externalDataSource |
Hayır | Varsayılan yok | Azure Synapse'ten verileri okumak için önceden sağlanan bir dış veri kaynağı. Dış veri kaynağı yalnızca PolyBase ile kullanılabilir ve bağlayıcının verileri yüklemek için kapsamlı bir kimlik bilgisi ve dış veri kaynağı oluşturması gerekmediğinden CONTROL izin gereksinimini kaldırır. Örneğin, dış veri kaynağı kullanılırken gereken kullanım ve izin listesi için bkz . Dış veri kaynağı seçeneğiyle PolyBase için gerekli Azure Synapse izinleri. |
maxErrors |
Hayır | 0 | Yükleme işlemi (PolyBase veya COPY) iptal edilmeden önce okuma ve yazma işlemleri sırasında reddedilebilen en fazla satır sayısı. Reddedilen satırlar yoksayılır. Örneğin, on kayıttan ikisinde hata varsa, yalnızca sekiz kayıt işlenir. COPY'de CREATE EXTERNAL TABLE ve MAXERRORS belgelerinde REJECT_VALUE belgelerine bakın. |
Not
tableOptions
,preActions
,postActions
vemaxStrLength
yalnızca Azure Databricks'ten Azure Synapse'teki yeni bir tabloya veri yazarken geçerlidir.externalDataSource
yalnızca Azure Synapse'ten veri okurken ve Azure Databricks'ten PolyBase semantiği ile Azure Synapse'te yeni bir tabloya veri yazarken geçerlidir. veyauseAzureMSI
gibiforwardSparkAzureStorageCredentials
bir depolama kimlik doğrulaması türünü kullanırkenexternalDataSource
diğer depolama kimlik doğrulama türlerini belirtmemelisiniz.checkpointLocation
venumStreamingTempDirsToKeep
yalnızca Azure Databricks'ten Azure Synapse'teki yeni bir tabloya yazma akışı için geçerlidir.- Tüm veri kaynağı seçenek adları büyük/küçük harfe duyarlı olmasa da, bunları netlik için "deve durumunda" belirtmenizi öneririz.
Azure Synapse'e sorgu gönderme
Azure Synapse bağlayıcısı, aşağıdaki işleçleri Azure Synapse'e göndermek için bir dizi iyileştirme kuralı uygular:
Filter
Project
Limit
Project
ve Filter
işleçleri aşağıdaki ifadeleri destekler:
- Çoğu boole mantıksal işleci
- Karşılaştırmalar
- Temel aritmetik işlemler
- Sayısal ve dize atamaları
işleci için Limit
, yalnızca belirtilen bir sıralama olmadığında aşağı gönderme desteklenir. Örneğin:
SELECT TOP(10) * FROM table
, ama değil SELECT TOP(10) * FROM table ORDER BY col
.
Not
Azure Synapse bağlayıcısı dizelerde, tarihlerde veya zaman damgalarında çalışan ifadeleri aşağı göndermez.
Azure Synapse bağlayıcısı ile oluşturulan sorgu anında iletme varsayılan olarak etkindir.
olarak ayarlayarak spark.databricks.sqldw.pushdown
false
devre dışı bırakabilirsiniz.
Geçici veri yönetimi
Azure Synapse bağlayıcısı Blob depolama kapsayıcısında oluşturduğu geçici dosyaları silmez .
Bu nedenle, kullanıcı tarafından sağlanan tempDir
konum altındaki geçici dosyaları düzenli aralıklarla silmenizi öneririz.
Veri temizlemeyi kolaylaştırmak için Azure Synapse bağlayıcısı veri dosyalarını doğrudan altında tempDir
depolamaz, bunun yerine formun bir alt dizinini oluşturur: <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/
.
Belirli bir eşikten daha eski olan alt dizinleri (örneğin, 2 gün) yinelemeli olarak silmek için düzenli işleri (Azure Databricks işleri özelliğini veya başka bir şekilde kullanarak) ayarlayabilirsiniz ve spark işlerinin bu eşikten daha uzun süre çalıştırılamayacağı varsayımını kullanabilirsiniz.
Daha basit bir alternatif, kapsayıcının tamamını düzenli aralıklarla bırakmak ve aynı ada sahip yeni bir kapsayıcı oluşturmaktır. Bunun için Azure Synapse bağlayıcısı tarafından oluşturulan geçici veriler için ayrılmış bir kapsayıcı kullanmanız ve bağlayıcıyla ilgili hiçbir sorgunun çalışmadığını garantileyebileceğiniz bir zaman penceresi bulmanız gerekir.
Geçici nesne yönetimi
Azure Synapse bağlayıcısı, Azure Databricks kümesi ile Azure Synapse örneği arasında veri aktarımını otomatikleştirir.
Azure Synapse tablosundaki verileri okumak veya Azure Synapse tablosuna veri yazmak veya sorgulamak için Azure Synapse bağlayıcısı , EXTERNAL DATA SOURCE
, EXTERNAL FILE FORMAT
ve EXTERNAL TABLE
arkası gibi DATABASE SCOPED CREDENTIAL
geçici nesneler oluşturur. Bu nesneler yalnızca ilgili Spark işinin süresi boyunca yaşar ve bundan sonra otomatik olarak bırakılmalıdır.
Bir küme Azure Synapse bağlayıcısını kullanarak bir sorgu çalıştırdığında, Spark sürücü işlemi kilitlenirse veya zorla yeniden başlatılırsa ya da küme zorla sonlandırılırsa veya yeniden başlatılırsa geçici nesneler bırakılmayabilir.
Bu nesnelerin tanımlanmasını ve el ile silinmesini kolaylaştırmak için Azure Synapse bağlayıcısı, Azure Synapse örneğinde oluşturulan tüm ara geçici nesnelerin adlarını şu biçimde bir etiketle önekler: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>
.
Aşağıdaki gibi sorguları kullanarak sızdırılan nesneleri düzenli aralıklarla aramanızı öneririz:
SELECT * FROM sys.database_scoped_credentials WHERE name LIKE 'tmp_databricks_%'
SELECT * FROM sys.external_data_sources WHERE name LIKE 'tmp_databricks_%'
SELECT * FROM sys.external_file_formats WHERE name LIKE 'tmp_databricks_%'
SELECT * FROM sys.external_tables WHERE name LIKE 'tmp_databricks_%'
Akış denetim noktası tablo yönetimi
Azure Synapse bağlayıcısı , yeni akış sorgusu başlatıldığında oluşturulan akış denetim noktası tablosunu silmez .
Bu davranış, DBFS üzerinde ile checkpointLocation
tutarlıdır. Bu nedenle, gelecekte çalıştırılmayan veya zaten denetim noktası konumu kaldırılmış olan sorgular için DBFS'deki denetim noktası konumlarını kaldırırken denetim noktası tablolarını düzenli aralıklarla silmenizi öneririz.
Varsayılan olarak, tüm denetim noktası tablolarında adı <prefix>_<query-id>
vardır; burada <prefix>
varsayılan değere databricks_streaming_checkpoint
sahip yapılandırılabilir bir ön ektir ve query_id
karakterlerin kaldırıldığı bir akış sorgusu kimliğidir _
. Eski veya silinmiş akış sorgularının tüm denetim noktası tablolarını bulmak için sorguyu çalıştırın:
SELECT * FROM sys.tables WHERE name LIKE 'databricks_streaming_checkpoint%'
Öneki Spark SQL yapılandırma seçeneğiyle spark.databricks.sqldw.streaming.exactlyOnce.checkpointTableNamePrefix
yapılandırabilirsiniz.
Sık sorulan sorular (SSS)
Azure Synapse bağlayıcısını kullanırken bir hata aldım. Bu hatanın Azure Synapse mi yoksa Azure Databricks mi olduğunu nasıl anlayabilirim?
Hata ayıklamanıza yardımcı olmak için, Azure Synapse bağlayıcısına özgü kod tarafından oluşan özel durumlar, özelliği genişleten SqlDWException
bir özel duruma sarmalanır. Özel durumlar da aşağıdaki ayrımı yapar:
SqlDWConnectorException
Azure Synapse bağlayıcısı tarafından atılan bir hatayı temsil ederSqlDWSideException
bağlı Azure Synapse örneği tarafından atılan bir hatayı temsil eder
Sorgum "Oturum konferansında veya genel Hadoop konfederasyonunda erişim anahtarı bulunamadı" hatasıyla başarısız olduysa ne yapmalıyım?
Bu hata, Azure Synapse bağlayıcısının not defteri oturumu yapılandırmasında veya genel Hadoop yapılandırmasında tempDir
ile belirtilen depolama hesabı için gerekli olan depolama hesabı erişim anahtarını bulamadığını gösterir.
Depolama Hesabı erişimini düzgün yapılandırma örnekleri için bkz. Kullanım (Batch). Azure Synapse bağlayıcısı kullanılarak bir Spark tablosu oluşturulduysa, Spark tablosunu okumak veya bu tabloya yazmak için depolama hesabı erişim kimlik bilgilerini sağlamanız gerekir.
tempDir
ile belirtilen Blob depolama kapsayıcısına erişmek için Paylaşılan Erişim İmzası (SAS) kullanabilir miyim?
Azure Synapse, Blob depolamaya erişmek için SAS kullanmayı desteklemez. Bu nedenle Azure Synapse bağlayıcısı tarafından tempDir
belirtilen Blob depolama kapsayıcısına erişmek için SAS'yi desteklemez.
Seçeneğiyle Azure Synapse bağlayıcısını dbTable
kullanarak bir Spark tablosu oluşturdum, bu Spark tablosuna bazı veriler yazdım ve sonra bu Spark tablosunu bıraktım. Azure Synapse tarafında oluşturulan tablo bırakılacak mı?
Hayır Azure Synapse bir dış veri kaynağı olarak kabul edilir. Adlı Azure Synapse tablosu Spark tablosu dbTable
bırakıldığında bırakılmaz.
Azure Synapse ortamına DataFrame yazarken neden sadece .saveAsTable(tableName)
yerine .option("dbTable", tableName).save()
kullanmam gerekiyor?
Bunun nedeni şu ayrımı net bir şekilde ifade etmek istememizdir: .option("dbTable", tableName)
veritabanı (Azure Synapse) tablosuna, .saveAsTable(tableName)
Spark tablosuna ise başvurur. Hatta ikisini birleştirebilirsiniz: df.write. ... .option("dbTable", tableNameDW).saveAsTable(tableNameSpark)
Azure Synapse'te adlı tableNameDW
bir tablo ve Spark'ta tableNameSpark
Azure Synapse tablosu tarafından desteklenen bir dış tablo oluşturur.
Uyarı
ile .saveAsTable()
arasında .save()
aşağıdaki farklara dikkat edin:
- için
df.write. ... .option("dbTable", tableNameDW).mode(writeMode).save()
,writeMode
Azure Synapse tablosunda beklendiği gibi hareket eder. - için
df.write. ... .option("dbTable", tableNameDW).mode(writeMode).saveAsTable(tableNameSpark)
SparkwriteMode
tablosu üzerinde hareket eder, ancaktableNameDW
Azure Synapse'te zaten varsa sessizce üzerine yazılır .
Bu davranış, başka bir veri kaynağına yazmaktan farklı değildir. Spark DataFrameWriter API'sinin yalnızca bir uyarıdır.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin