بيانات الاستعلام في 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 للوصول إلى حساب التخزين. يمكنك تكوين الوصول لكلتا الخدمتين عن طريق القيام بأحد الإجراءات التالية:
- استخدم مفتاح الحساب والبيانات السرية لحساب التخزين وقم بتعيين
forwardSparkAzureStorageCredentials
إلىtrue
. راجع تعيين خصائص Spark لتكوين بيانات اعتماد Azure للوصول إلى تخزين Azure. - استخدم Azure Data Lake Storage Gen2 مع مصادقة OAuth 2.0 وضبط
enableServicePrincipalAuth
علىtrue
. راجع تكوين الاتصال من Azure Databricks إلى Synapse مع OAuth 2.0 باستخدام كيان الخدمة. - قم بتكوين مثيل Azure Synapse للحصول على هوية خدمة مدارة وتعيين
useAzureMSI
إلىtrue
.
أذونات 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 أوضاع الحفظ Append
Ignore
و 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_credentials useAzureMSI إلى 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 | إعداد لتمكين true IDENTITY_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 CREDENTIAL
EXTERNAL DATA SOURCE
EXTERNAL FILE FORMAT
EXTERNAL 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_%'