Share via


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

COPYyalnı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:

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. sparkSparkSession, 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 forwardSparkAzureStorageCredentialstrue. 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 trueayarlamanı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.enabledfalseAzure 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ı

Azure Synapse bağlayıcısı , , ve kayıt modlarını destekler ErrorIfExistsve Overwrite varsayılan mod olarak olurErrorIfExists. AppendIgnore 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:

İ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 querybaş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 dbTableayarlanan 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 COPYtoplu 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. Ayar
encrypt=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 forwardSparkAzureStorageCredentialsenableServicePrincipalAuthbirinin (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 forwardSparkAzureStorageCredentialsenableServicePrincipalAuthbirinin (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 forwardSparkAzureStorageCredentialsenableServicePrincipalAuthbirinin (tam olarak) olarak useAzureMSI ayarlanması gerekirtrue.
tableOptions Hayır CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN aracılığıyla dbTableayarlanan 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 0ayarlandığı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, postActionsve maxStrLength 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. veya useAzureMSIgibi forwardSparkAzureStorageCredentials bir depolama kimlik doğrulaması türünü kullanırken externalDataSource diğer depolama kimlik doğrulama türlerini belirtmemelisiniz.
  • checkpointLocation ve numStreamingTempDirsToKeep 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.pushdownfalsedevre 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 tempDirdepolamaz, 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 FORMATve EXTERNAL TABLE arkası gibi DATABASE SCOPED CREDENTIALgeç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.checkpointTableNamePrefixyapı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 eder
  • SqlDWSideException 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 tempDirbelirtilen 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)Spark writeMode tablosu üzerinde hareket eder, ancak tableNameDWAzure 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.