بيانات الاستعلام في Azure Synapse Analytics

يمكنك الوصول إلى Azure Synapse من Azure Databricks باستخدام موصل Azure Synapse، والذي يستخدم COPY العبارة في Azure Synapse لنقل كميات كبيرة من البيانات بكفاءة بين مجموعة Azure Databricks ومثيل Azure Synapse باستخدام حساب تخزين Azure Data Lake Storage Gen2 للتقسيم المرحلي المؤقت.

إشعار

قد تفضل Lakehouse Federation لإدارة الاستعلامات على بيانات Azure Synapse أو Azure Data Warehouse. انظر ما هو اتحاد ليكهاوس.

Azure Synapse Analytics هو مستودع بيانات مؤسسة مستند إلى السحابة يستفيد من المعالجة المتوازية على نطاق واسع (MPP) لتشغيل الاستعلامات المعقدة بسرعة عبر بيتابايت من البيانات.

هام

هذا الموصل مخصص للاستخدام مع مثيلات Synapse Dedicated Pool فقط وهو غير متوافق مع مكونات Synapse الأخرى.

إشعار

COPY يتوفر فقط على مثيلات Azure Data Lake Storage Gen2. إذا كنت تبحث عن تفاصيل حول العمل مع Polybase، فشاهد الاتصال Azure Databricks وAzure Synapse مع PolyBase (قديم).

مثال على بناء الجملة ل Synapse

يمكنك الاستعلام عن Synapse في Scala وPython وSQL وR. تستخدم أمثلة التعليمات البرمجية التالية مفاتيح حساب التخزين وإعادة توجيه بيانات اعتماد التخزين من Azure Databricks إلى Synapse.

إشعار

استخدم سلسلة الاتصال التي يوفرها مدخل Microsoft Azure، والتي تمكن تشفير طبقة مآخذ التوصيل الآمنة (SSL) لجميع البيانات المرسلة بين برنامج تشغيل Spark ومثيل Azure Synapse من خلال اتصال JDBC. للتحقق من تمكين تشفير SSL، يمكنك البحث encrypt=true عن في سلسلة الاتصال.

هام

المواقع الخارجية المحددة في كتالوج Unity غير مدعومة كمواقع tempDir .

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 وSynapse؟

يستخدم موصل Azure Synapse ثلاثة أنواع من اتصالات الشبكة:

  • برنامج تشغيل Spark إلى Azure Synapse
  • نظام مجموعة Spark إلى حساب تخزين Azure
  • Azure Synapse إلى حساب تخزين Azure

تكوين الوصول إلى تخزين Azure

يحتاج كل من Azure Databricks وSynapse إلى وصول متميز إلى حساب تخزين Azure لاستخدامه لتخزين البيانات المؤقت.

لا يدعم Azure Synapse استخدام SAS للوصول إلى حساب التخزين. يمكنك تكوين الوصول لكلتا الخدمتين عن طريق القيام بأحد الإجراءات التالية:

أذونات Azure Synapse المطلوبة

لأنه يستخدم COPY في الخلفية، يتطلب موصل Azure Synapse أن يكون لدى مستخدم اتصال JDBC إذن لتشغيل الأوامر التالية في مثيل Azure Synapse المتصل:

إذا لم يكن الجدول الوجهة موجودا في Azure Synapse، يلزم الحصول على إذن لتشغيل الأمر التالي بالإضافة إلى الأمر أعلاه:

يلخص الجدول التالي الأذونات المطلوبة للكتابات باستخدام COPY:

الأذونات (إدراج في جدول موجود) الأذونات (إدراج في جدول جديد)
إدارة العمليات المجمعة لقاعدة البيانات

إدراج
إدارة العمليات المجمعة لقاعدة البيانات

إدراج

إنشاء جدول

ALTER ON SCHEMA :: dbo

تكوينات الشبكات

إذا قمت بتكوين جدار حماية على Azure Synapse، يجب تكوين إعدادات الشبكة للسماح ل Azure Databricks بالوصول إلى Azure Synapse. أولا، تأكد من نشر مساحة عمل Azure Databricks في شبكتك الظاهرية الخاصة بعد نشر Azure Databricks في شبكة Azure الظاهرية (حقن الشبكة الظاهرية). يمكنك بعد ذلك تكوين قواعد جدار حماية IP على Azure Synpase للسماح بالاتصالات من الشبكات الفرعية إلى حساب Synapse الخاص بك. راجع قواعد جدار حماية IP لتحليلات Azure Synapse.

تكوين الاتصال من Azure Databricks إلى Synapse مع OAuth 2.0 باستخدام كيان الخدمة

يمكنك المصادقة على Azure Synapse Analytics باستخدام كيان خدمة مع الوصول إلى حساب التخزين الأساسي. لمزيد من المعلومات حول استخدام بيانات الاعتماد الأساسية للخدمة للوصول إلى حساب تخزين Azure، راجع الاتصال إلى Azure Data Lake Storage Gen2 وBlob Storage. يجب تعيين enableServicePrincipalAuth الخيار إلى true في تكوين الاتصال مرجع خيارات موصل Azure Databricks Synapse لتمكين الموصل من المصادقة مع كيان الخدمة.

يمكنك اختياريا استخدام كيان خدمة مختلف لاتصال Azure Synapse Analytics. يقوم المثال التالي بتكوين بيانات اعتماد كيان الخدمة لحساب التخزين وبيانات اعتماد كيان الخدمة الاختيارية ل Synapse:

Ini

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

أوضاع الحفظ المدعومة لكتابات الدفعات

يدعم ErrorIfExistsموصل Azure Synapse أوضاع الحفظ AppendIgnoreو Overwrite مع الوضع الافتراضي هو ErrorIfExists. لمزيد من المعلومات حول أوضاع الحفظ المدعومة في Apache Spark، راجع وثائق Spark SQL حول حفظ الأوضاع.

مرجع خيارات موصل Azure Databricks Synapse

OPTIONS يدعم المتوفر في Spark SQL الإعدادات التالية:

المعلمة‬ المطلوب افتراضي ملاحظات
dbTable نعم، ما لم query يتم تحديد لا يوجد تقصير الجدول المراد إنشاؤه أو القراءة منه في Azure Synapse. هذه المعلمة مطلوبة عند حفظ البيانات مرة أخرى إلى Azure Synapse.

يمكنك أيضا استخدام {SCHEMA NAME}.{TABLE NAME} للوصول إلى جدول في مخطط معين. إذا لم يتم توفير اسم المخطط، يتم استخدام المخطط الافتراضي المقترن بمستخدم JDBC.

يتم إهمال المتغير المدعوم dbtable مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك.
query نعم، ما لم dbTable يتم تحديد لا يوجد تقصير الاستعلام المراد القراءة منه في Azure Synapse.

بالنسبة للجداول المشار إليها في الاستعلام، يمكنك أيضا استخدام {SCHEMA NAME}.{TABLE NAME} للوصول إلى جدول في مخطط معين. إذا لم يتم توفير اسم المخطط، يتم استخدام المخطط الافتراضي المقترن بمستخدم JDBC.
user لا لا يوجد تقصير اسم مستخدم Azure Synapse. يجب استخدام جنبا إلى جنب مع password الخيار . يمكن استخدامها فقط إذا لم يتم تمرير المستخدم وكلمة المرور في عنوان URL. سيؤدي تمرير كليهما إلى حدوث خطأ.
password لا لا يوجد تقصير كلمة مرور Azure Synapse. يجب استخدام جنبا إلى جنب مع user الخيار . يمكن استخدامها فقط إذا لم يتم تمرير المستخدم وكلمة المرور في عنوان URL. سيؤدي تمرير كليهما إلى حدوث خطأ.
url ‏‏نعم‬ لا يوجد تقصير عنوان URL ل JDBC مع sqlserver تعيين كمprotocol فرعي. يوصى باستخدام سلسلة الاتصال التي يوفرها مدخل Microsoft Azure. الإعدادات
encrypt=true يوصى بشدة، لأنه يمكن تشفير SSL لاتصال JDBC. إذا user تم تعيين و password بشكل منفصل، فلن تحتاج إلى تضمينها في عنوان URL.
jdbcDriver لا يتم تحديده بواسطة البروتوكول الفرعي ل JDBC URL اسم فئة برنامج تشغيل JDBC المراد استخدامه. يجب أن تكون هذه الفئة على مسار الفئة. في معظم الحالات، يجب ألا يكون من الضروري تحديد هذا الخيار، حيث يجب تحديد اسم فئة برنامج التشغيل المناسب تلقائيا بواسطة البروتوكول الفرعي ل JDBC URL.

يتم إهمال المتغير المدعوم jdbc_driver مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك.
tempDir ‏‏نعم‬ لا يوجد تقصير A abfss URI. نوصي باستخدام حاوية تخزين Blob مخصصة ل Azure Synapse.

يتم إهمال المتغير المدعوم tempdir مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك.

لا يمكنك استخدام موقع خارجي معرف في كتالوج Unity كموقع tempDir .
tempCompression لا SNAPPY خوارزمية الضغط التي سيتم استخدامها لترميز/فك ترميز مؤقت بواسطة كل من Spark وAzure Synapse. القيم المدعومة حاليا هي: UNCOMPRESSEDوSNAPPY.GZIP
forwardSparkAzureStorageCredentials لا true إذا true، تكتشف المكتبة تلقائيا بيانات اعتماد مفتاح الوصول إلى حساب التخزين التي يستخدمها Spark للاتصال بحاوية تخزين Blob وإعادة توجيه بيانات الاعتماد هذه إلى Azure Synapse عبر JDBC. يتم إرسال بيانات الاعتماد هذه كجزء من استعلام JDBC. لذلك يوصى بشدة بتمكين تشفير SSL لاتصال JDBC عند استخدام هذا الخيار.

عند تكوين مصادقة التخزين، يجب عليك تعيين واحد بالضبط من useAzureMSI و forwardSparkAzureStorageCredentials إلى true. بدلا من ذلك، يمكنك تعيين enableServicePrincipalAuth إلى true واستخدام كيان الخدمة لكل من JDBC ومصادقة التخزين. forwardSparkAzureStorageCredentials لا يدعم الخيار المصادقة على التخزين باستخدام هوية خدمة مدارة أو كيان الخدمة. يتم دعم مفتاح الوصول إلى حساب التخزين فقط.

يتم إهمال المتغير المدعوم forward_spark_azure_storage_credentials مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك.
useAzureMSI لا true إذا ، trueستحدد IDENTITY = 'Managed Service Identity' المكتبة ولا SECRET لبيانات الاعتماد المحددة في نطاق قاعدة البيانات التي تقوم بإنشائها.

عند تكوين مصادقة التخزين، يجب عليك تعيين واحد بالضبط من useAzureMSI و forwardSparkAzureStorageCredentials إلى true. بدلا من ذلك، يمكنك تعيين enableServicePrincipalAuth إلى true واستخدام كيان الخدمة لكل من JDBC ومصادقة التخزين.
enableServicePrincipalAuth لا true إذا ، trueستستخدم المكتبة بيانات اعتماد كيان الخدمة المتوفرة للاتصال بحساب تخزين Azure وتحليلات Azure Synapse عبر JDBC.

إذا تم تعيين أو forward_spark_azure_storage_credentialsuseAzureMSI إلى true، فإن هذا الخيار سيكون له الأسبقية على كيان الخدمة في مصادقة التخزين.
tableOptions لا CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN سلسلة تستخدم لتحديد خيارات الجدول عند إنشاء جدول Azure Synapse الذي تم تعيينه من خلال dbTable. يتم تمرير هذه السلسلة حرفيا إلى WITH عبارة CREATE TABLE SQL التي يتم إصدارها مقابل Azure Synapse.

يتم إهمال المتغير المدعوم table_options مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك.
preActions لا لا يوجد افتراضي (سلسلة فارغة) ; قائمة مفصولة من أوامر SQL ليتم تنفيذها في Azure Synapse قبل كتابة البيانات إلى مثيل Azure Synapse. أوامر SQL هذه مطلوبة لتكون أوامر صالحة مقبولة من قبل Azure Synapse.

إذا فشل أي من هذه الأوامر، يتم التعامل معه كخطأ ولا يتم تنفيذ عملية الكتابة.
postActions لا لا يوجد افتراضي (سلسلة فارغة) ; قائمة مفصولة من أوامر SQL ليتم تنفيذها في Azure Synapse بعد أن يكتب الموصل البيانات بنجاح إلى مثيل Azure Synapse. أوامر SQL هذه مطلوبة لتكون أوامر صالحة مقبولة من قبل Azure Synapse.

إذا فشل أي من هذه الأوامر، يتم التعامل معه كخطأ وستحصل على استثناء بعد كتابة البيانات بنجاح إلى مثيل Azure Synapse.
maxStrLength لا 256 StringType في Spark يتم تعيين إلى NVARCHAR(maxStrLength) النوع في Azure Synapse. يمكنك استخدام maxStrLength لتعيين طول السلسلة لكافة NVARCHAR(maxStrLength) أعمدة النوع الموجودة في الجدول بالاسم
dbTable في Azure Synapse.

يتم إهمال المتغير المدعوم maxstrlength مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك.
applicationName لا Databricks-User-Query علامة الاتصال لكل استعلام. إذا لم يتم تحديدها أو كانت القيمة سلسلة فارغة، تتم إضافة القيمة الافتراضية للعلامة عنوان URL ل JDBC. تمنع القيمة الافتراضية أداة مراقبة Azure DB من رفع تنبيهات حقن SQL زائفة مقابل الاستعلامات.
maxbinlength لا لا يوجد تقصير التحكم في طول عمود الأعمدة BinaryType . تتم ترجمة هذه المعلمة على أنها VARBINARY(maxbinlength).
identityInsert لا true إعداد لتمكين trueIDENTITY_INSERT الوضع، الذي يدرج قيمة DataFrame المقدمة في عمود الهوية لجدول Azure Synapse.

راجع إدراج القيم بشكل صريح في عمود IDENTITY.
externalDataSource لا لا يوجد تقصير مصدر بيانات خارجي تم توفيره مسبقا لقراءة البيانات من Azure Synapse. يمكن استخدام مصدر بيانات خارجي فقط مع PolyBase ويزيل متطلبات إذن CONTROL لأن الموصل لا يحتاج إلى إنشاء بيانات اعتماد محددة النطاق ومصدر بيانات خارجي لتحميل البيانات.

على سبيل المثال الاستخدام وقائمة الأذونات المطلوبة عند استخدام مصدر بيانات خارجي، راجع أذونات Azure Synapse المطلوبة ل PolyBase مع خيار مصدر البيانات الخارجي.
maxErrors لا 0 الحد الأقصى لعدد الصفوف التي يمكن رفضها أثناء عمليات القراءة والكتابة قبل إلغاء عملية التحميل. سيتم تجاهل الصفوف المرفوضة. على سبيل المثال، إذا كان اثنان من كل عشرة سجلات يحتويان على أخطاء، فستتم معالجة ثمانية سجلات فقط.

راجع وثائق REJECT_VALUE في وثائق CREATE EXTERNAL TABLE وMAXERRORS في COPY.
inferTimestampNTZType لا true إذا ، trueيتم تفسير قيم من نوع Azure Synapse TIMESTAMP على أنها TimestampNTZType (طابع زمني بدون منطقة زمنية) أثناء القراءات. وإلا، يتم تفسير جميع الطوابع الزمنية على أنها TimestampType بغض النظر عن النوع في جدول Azure Synapse الأساسي.

إشعار

  • tableOptionsتكون preActionsو postActionsو و maxStrLength ذات صلة فقط عند كتابة البيانات من Azure Databricks إلى جدول جديد في Azure Synapse.
  • على الرغم من أن جميع أسماء خيارات مصدر البيانات غير حساسة لحالة الأحرف، نوصي بتحديدها في "حالة الجمل" للوضوح.

دفع الاستعلام لأسفل إلى Azure Synapse

ينفذ موصل Azure Synapse مجموعة من قواعد التحسين لدفع عوامل التشغيل التالية لأسفل إلى Azure Synapse:

  • Filter
  • Project
  • Limit

Project تدعم عوامل التشغيل و Filter التعبيرات التالية:

  • معظم عوامل تشغيل المنطق المنطقية
  • المقارنات
  • العمليات الحسابية الأساسية
  • قوالب رقمية وسلسلة

بالنسبة إلى Limit عامل التشغيل، يتم دعم الدفع لأسفل فقط عندما لا يكون هناك ترتيب محدد. على سبيل المثال:

SELECT TOP(10) * FROM table، ولكن ليس SELECT TOP(10) * FROM table ORDER BY col.

إشعار

لا يدفع موصل Azure Synapse التعبيرات التي تعمل على سلاسل أو تواريخ أو طوابع زمنية.

يتم تمكين دفع الاستعلام الذي تم إنشاؤه باستخدام موصل Azure Synapse بشكل افتراضي. يمكنك تعطيله عن طريق تعيين spark.databricks.sqldw.pushdown إلى false.

إدارة البيانات المؤقتة

لا يحذف موصل Azure Synapse الملفات المؤقتة التي يقوم بإنشائها في حاوية تخزين Azure. توصي Databricks بحذف الملفات المؤقتة بشكل دوري ضمن الموقع الذي يوفره tempDir المستخدم.

لتسهيل تنظيف البيانات، لا يقوم موصل Azure Synapse بتخزين ملفات البيانات مباشرة ضمن tempDir، ولكن بدلا من ذلك يقوم بإنشاء دليل فرعي للنموذج: <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/. يمكنك إعداد مهام دورية (باستخدام ميزة وظائف Azure Databricks أو غير ذلك) لحذف أي دلائل فرعية أقدم من حد معين بشكل متكرر (على سبيل المثال، يومين)، مع افتراض أنه لا يمكن أن تكون هناك مهام Spark تعمل لفترة أطول من هذا الحد.

البديل الأبسط هو إسقاط الحاوية بأكملها بشكل دوري وإنشاء حاوية جديدة بنفس الاسم. يتطلب هذا استخدام حاوية مخصصة للبيانات المؤقتة التي ينتجها موصل Azure Synapse وأن تتمكن من العثور على نافذة زمنية يمكنك فيها ضمان عدم تشغيل أي استعلامات تتضمن الموصل.

إدارة الكائنات المؤقتة

يقوم موصل Azure Synapse بأتمتة نقل البيانات بين مجموعة Azure Databricks ومثيل Azure Synapse. لقراءة البيانات من جدول Azure Synapse أو استعلام أو كتابة البيانات إلى جدول Azure Synapse، ينشئ موصل Azure Synapse كائنات مؤقتة، بما في ذلك DATABASE SCOPED CREDENTIALEXTERNAL DATA SOURCEEXTERNAL FILE FORMATEXTERNAL TABLE و خلف الكواليس. لا تعيش هذه الكائنات إلا طوال مدة مهمة Spark المقابلة ويتم إسقاطها تلقائيا.

عند تشغيل نظام مجموعة استعلام باستخدام موصل Azure Synapse، إذا تعطل برنامج تشغيل Spark أو تمت إعادة تشغيله بقوة، أو إذا تم إنهاء نظام المجموعة بالقوة أو إعادة تشغيله، فقد لا يتم إسقاط الكائنات المؤقتة. لتسهيل تحديد هذه الكائنات وحذفها يدويا، يقوم موصل Azure Synapse ببادئة أسماء كافة الكائنات المؤقتة الوسيطة التي تم إنشاؤها في مثيل Azure Synapse بعلامة النموذج: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>.

نوصي بالبحث بشكل دوري عن الكائنات المسربة باستخدام استعلامات مثل ما يلي:

  • 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_%'