Azure Synapse Analytics'te veri sorgulama

Azure Synapse bağlayıcısını kullanarak Azure Synapse bağlayıcısından Azure Synapse'e erişebilirsiniz. Bu bağlayıcı, COPY geçici hazırlama için Azure Data Lake Storage 2. Nesil depolama hesabı kullanarak Azure Synapse kümesi ile Azure Synapse örneği arasında büyük hacimli verileri verimli bir şekilde aktarır.

Not

Azure Synapse veya Azure Veri Ambarı verilerinde sorguları yönetmek için Lakehouse Federasyonu'nı tercih edebilirsiniz. Bkz . Lakehouse Federasyonu nedir?

Azure Synapse Analytics , 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.

Önemli

Bu bağlayıcı yalnızca Synapse Ayrılmış Havuz örnekleriyle kullanım içindir ve diğer Synapse bileşenleriyle uyumlu değildir.

Not

COPYyalnızca Azure Data Lake Storage 2. Nesil örneklerde kullanılabilir. Polybase ile çalışma hakkında ayrıntılı bilgi arıyorsanız bkz. PolyBase ile Azure Databricks ve Azure Synapse'i (eski) Bağlan.

Synapse için örnek söz dizimi

Synapse'i Scala, Python, SQL ve R'de sorgulayabilirsiniz. Aşağıdaki kod örnekleri depolama hesabı anahtarlarını kullanır ve Azure Databricks'ten Synapse'e depolama kimlik bilgilerini iletir.

Not

JDBC bağlantısı üzerinden Spark sürücüsü ile Azure Synapse örneği arasında gönderilen tüm veriler için Güvenli Yuva Katmanı (SSL) şifrelemesini etkinleştiren Azure portalı tarafından sağlanan bağlantı dizesi kullanın. SSL şifrelemesinin etkinleştirildiğini doğrulamak için encrypt=true bağlantı dizesi içinde arama yapabilirsiniz.

Önemli

Unity Kataloğu'nda tanımlanan dış konumlar konum olarak tempDir desteklenmez.

Scala


// Set up the 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. The following example applies to Databricks Runtime 11.3 LTS and above.
val df: DataFrame = spark.read
  .format("sqldw")
  .option("host", "hostname")
  .option("port", "port") /* Optional - will use default port 1433 if not specified. */
  .option("user", "username")
  .option("password", "password")
  .option("database", "database-name")
  .option("dbtable", "schema-name.table-name") /* If schemaName not provided, default to "dbo". */
  .option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
  .option("forwardSparkAzureStorageCredentials", "true")
  .load()

// Get some data from an Azure Synapse table. The following example applies to Databricks Runtime 10.4 LTS and below.
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


# Set up the 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. The following example applies to Databricks Runtime 11.3 LTS and above.
df = spark.read
  .format("sqldw")
  .option("host", "hostname")
  .option("port", "port") # Optional - will use default port 1433 if not specified.
  .option("user", "username")
  .option("password", "password")
  .option("database", "database-name")
  .option("dbtable", "schema-name.table-name") # If schemaName not provided, default to "dbo".
  .option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
  .option("forwardSparkAzureStorageCredentials", "true")
  .load()

# Get some data from an Azure Synapse table. The following example applies to Databricks Runtime 10.4 LTS and below.
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


-- Set up the 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. The following example applies to Databricks Runtime 11.3 LTS and above.
CREATE TABLE example_table_in_spark_read
USING sqldw
OPTIONS (
  host '<hostname>',
  port '<port>' /* Optional - will use default port 1433 if not specified. */
  user '<username>',
  password '<password>',
  database '<database-name>'
  dbtable '<schema-name>.<table-name>', /* If schemaName not provided, default to "dbo". */
  forwardSparkAzureStorageCredentials 'true',
  tempDir 'abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>'
);

-- Read data using SQL. The following example applies to Databricks Runtime 10.4 LTS and below.
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)

# Set up the 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>")

Azure Databricks ile Synapse arasında kimlik doğrulaması nasıl çalışır?

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ı
  • Spark kümesi ile Azure depolama hesabına
  • Azure Synapse ile Azure depolama hesabı bağlantısı

Azure depolamaya erişimi yapılandırma

Hem Azure Databricks hem de Synapse,geçici veri depolama için kullanılmak üzere bir Azure depolama hesabına ayrıcalıklı erişime ihtiyaç duyar.

Azure Synapse, depolama hesabı erişimi için SAS'nin kullanılmasını desteklemez. Aşağıdakilerden birini yaparak her iki hizmet için de erişimi yapılandırabilirsiniz:

  • Depolama hesabı için hesap anahtarını ve gizli dizisini kullanın ve olarak trueayarlayınforwardSparkAzureStorageCredentials. Bkz . Azure kimlik bilgilerini Azure depolamaya erişmek üzere yapılandırmak için Spark özelliklerini ayarlama.
  • OAuth 2.0 kimlik doğrulaması ile Azure Data Lake Storage 2. Nesil kullanın ve olarak trueayarlayınenableServicePrincipalAuth. Bkz . Hizmet sorumlusuyla OAuth 2.0 ile Azure Databricks'ten Synapse'e bağlantıyı yapılandırma.
  • Azure Synapse örneğinizi Yönetilen Hizmet Kimliğine sahip olacak şekilde yapılandırın ve olarak trueayarlayınuseAzureMSI.

Gerekli Azure Synapse izinleri

Arka planda kullandığından COPY , 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 COPYyazma işlemleri için gereken izinler özetlemektedir:

İzinler (var olan bir tabloya ekleme) İzinler (yeni bir tabloya ekleme)
VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME

INSERT
VERİTABANI TOPLU İŞLEMLERİNİ YÖNETME

INSERT

CREATE TABLE

ALTER ON SCHEMA :: dbo

Ağ yapılandırmaları

Azure Synapse'te bir güvenlik duvarı yapılandırıyorsanız, Azure Databricks'in Azure Synapse'e erişmesine izin vermek için ağ ayarlarını yapılandırmanız gerekir. İlk olarak, Azure Databricks'i Azure sanal ağınıza dağıtma (VNet ekleme) sonrasında Azure Databricks çalışma alanınızın kendi sanal ağınıza dağıtıldığından emin olun. Ardından Azure Synpase'te IP güvenlik duvarı kurallarını yapılandırarak alt ağlarınızdan Synapse hesabınıza bağlantılara izin vekleyebilirsiniz. Bkz. Azure Synapse Analytics IP güvenlik duvarı kuralları.

Hizmet sorumlusuyla OAuth 2.0 ile Azure Databricks'ten Synapse'e bağlantıyı yapılandırma

Temel alınan depolama hesabına erişimi olan bir hizmet sorumlusu kullanarak Azure Synapse Analytics'de kimlik doğrulaması yapabilirsiniz. Azure depolama hesabına erişmek için hizmet sorumlusu kimlik bilgilerini kullanma hakkında daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil ve Blob Depolama için Bağlan. Bağlayıcının enableServicePrincipalAuth bir hizmet sorumlusuyla kimlik doğrulaması yapmasını sağlamak için azure Databricks Synapse bağlayıcı seçenekleri başvurusu bağlantı yapılandırmasında 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. Aşağıdaki örnekte, depolama hesabı için hizmet sorumlusu kimlik bilgileri ve Synapse için isteğe bağlı hizmet sorumlusu kimlik bilgileri yapılandırılır:

ı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>")

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.

Azure Databricks Synapse bağlayıcısı seçenekleri başvurusu

OPTIONS Spark SQL'de sağlananlar 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.

Unity Kataloğu'nda tanımlanan dış konumu konum olarak tempDir kullanamazsınız.
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ığı depolama hesabı erişim anahtarı 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.

Depolama kimlik doğrulamasını yapılandırırken, tam olarak ve forwardSparkAzureStorageCredentialstruedeğerini useAzureMSI olarak ayarlamanız gerekir. Alternatif olarak, hem JDBC hem de depolama kimlik doğrulaması için hizmet sorumlusunu true ayarlayabilir enableServicePrincipalAuth ve kullanabilirsiniz. seçeneği, forwardSparkAzureStorageCredentials yönetilen hizmet kimliği veya hizmet sorumlusu kullanarak depolama için kimlik doğrulamasını desteklemez. Yalnızca depolama hesabı erişim anahtarı desteklenir.

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'.

Depolama kimlik doğrulamasını yapılandırırken, tam olarak ve forwardSparkAzureStorageCredentialstruedeğerini useAzureMSI olarak ayarlamanız gerekir. Alternatif olarak, hem JDBC hem de depolama kimlik doğrulaması için hizmet sorumlusunu true ayarlayabilir enableServicePrincipalAuth ve kullanabilirsiniz.
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.

forward_spark_azure_storage_credentials veya useAzureMSI olarak ayarlanırsatrue, bu seçenek depolama kimlik doğrulamasında hizmet sorumlusundan önceliklidir.
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.
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 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.
inferTimestampNTZType Hayır yanlış ise true, Azure Synapse TIMESTAMP türünde değerler okumalar sırasında (saat dilimi olmadan zaman damgası) olarak TimestampNTZType yorumlanır. Aksi takdirde tüm zaman damgaları, temel alınan Azure Synapse tablosundaki türe bakılmaksızın olarak TimestampType yorumlanır.

Not

  • tableOptions, preActions, postActionsve maxStrLength yalnızca Azure Databricks'ten Azure Synapse'teki yeni bir tabloya veri yazarken 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ı , Azure depolama kapsayıcısında oluşturduğu geçici dosyaları silmez . Databricks, kullanıcı tarafından sağlanan tempDir konum altında geçici dosyaları düzenli aralıklarla silmenizi önerir.

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 otomatik olarak bırakılı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_%'