إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
هام
تم إيقاف هذه الوثائق وقد لا يتم تحديثها. لم تعد المنتجات أو الخدمات أو التقنيات المذكورة في هذا المحتوى مدعومة. راجع بيانات الاستعلام في Azure Synapse Analytics.
توصي Databricks باستخدام الوظيفة الافتراضية COPY مع Azure Data Lake Storage Gen2 للاتصالات ب Azure Synapse. تتضمن هذه المقالة وثائق قديمة حول PolyBase وتخزين الكائن الثنائي كبير الحجم.
Azure Synapse Analytics (سابقا SQL Data Warehouse) هو مستودع بيانات مؤسسة مستند إلى السحابة يستفيد من المعالجة المتوازية على نطاق واسع (MPP) لتشغيل الاستعلامات المعقدة بسرعة عبر بيتابايت من البيانات. استخدم Azure كمكون رئيسي لحل البيانات الضخمة. استيراد البيانات الضخمة إلى Azure باستخدام استعلامات PolyBase T-SQL البسيطة، أو عبارة COPY ثم استخدم قوة MPP لتشغيل تحليلات عالية الأداء. أثناء التكامل والتحليل، سيصبح مستودع البيانات الإصدار الوحيد من الحقيقة التي يمكن لعملك الاعتماد عليها للحصول على رؤى.
يمكنك الوصول إلى Azure Synapse من Azure Databricks باستخدام موصل Azure Synapse، وتنفيذ مصدر البيانات ل Apache Spark الذي يستخدم تخزين Azure Blob، و PolyBase أو COPY العبارة في Azure Synapse لنقل كميات كبيرة من البيانات بكفاءة بين مجموعة Azure Databricks ومثيل Azure Synapse.
يصل كل من مجموعة Azure Databricks ومثيل Azure Synapse إلى حاوية تخزين Blob مشتركة لتبادل البيانات بين هذين النظامين. في Azure Databricks، يتم تشغيل وظائف Apache Spark بواسطة موصل Azure Synapse لقراءة البيانات من وكتابة البيانات إلى حاوية تخزين Blob. على جانب Azure Synapse، يتم تشغيل عمليات تحميل البيانات وتفريغها التي يقوم بها PolyBase بواسطة موصل Azure Synapse من خلال JDBC. في Databricks Runtime 7.0 وما فوق، COPY يستخدم بشكل افتراضي لتحميل البيانات في Azure Synapse بواسطة موصل Azure Synapse من خلال JDBC.
إشعار
COPY يتوفر فقط على مثيلات Azure Synapse Gen2، والتي توفر أداء أفضل. إذا كانت قاعدة البيانات لا تزال تستخدم مثيلات Gen1، نوصي بترحيل قاعدة البيانات إلى Gen2.
موصل Azure Synapse أكثر ملاءمة ل ETL من الاستعلامات التفاعلية، لأن كل تنفيذ استعلام يمكن استخراج كميات كبيرة من البيانات إلى تخزين Blob. إذا كنت تخطط لتنفيذ عدة استعلامات مقابل نفس جدول Azure Synapse، نوصي بحفظ البيانات المستخرجة بتنسيق مثل Parquet.
المتطلبات
مفتاح رئيسي لقاعدة بيانات Azure Synapse.
المصادقه
يستخدم موصل Azure Synapse ثلاثة أنواع من اتصالات الشبكة:
- برنامج تشغيل Spark إلى Azure Synapse
- برنامج تشغيل Spark والمنفذون إلى حساب تخزين Azure
- Azure Synapse إلى حساب تخزين Azure
┌─────────┐
┌─────────────────────────>│ 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
تصف الأقسام التالية خيارات تكوين مصادقة كل اتصال.
برنامج تشغيل Spark إلى Azure Synapse
يمكن لبرنامج تشغيل Spark الاتصال ب Azure Synapse باستخدام JDBC باستخدام اسم مستخدم وكلمة مرور أو OAuth 2.0 مع كيان خدمة للمصادقة.
اسم المستخدم وكلمة المرور
نوصي باستخدام سلسلة الاتصال التي يوفرها مدخل Microsoft Azure لكلا نوعي المصادقة، والتي تمكن تشفير طبقة مآخذ التوصيل الآمنة (SSL) لجميع البيانات المرسلة بين برنامج تشغيل Spark ومثيل Azure Synapse من خلال اتصال JDBC. للتحقق من تمكين تشفير SSL، يمكنك البحث encrypt=true عن في سلسلة الاتصال.
للسماح لبرنامج تشغيل Spark بالوصول إلى Azure Synapse، نوصي بتعيين السماح لخدمات وموارد Azure بالوصول إلى مساحة العمل هذه على ON في جزء Networking ضمن Security لمساحة عمل Azure Synapse من خلال مدخل Microsoft Azure. يسمح هذا الإعداد بالاتصالات من جميع عناوين IP Azure وجميع الشبكات الفرعية ل Azure، والتي تسمح لبرامج تشغيل Spark بالوصول إلى مثيل Azure Synapse.
OAuth 2.0 مع كيان الخدمة
يمكنك المصادقة على Azure Synapse Analytics باستخدام كيان خدمة مع الوصول إلى حساب التخزين الأساسي. لمزيد من المعلومات حول استخدام بيانات اعتماد كيان الخدمة للوصول إلى حساب تخزين Azure، راجع الاتصال ب Azure Data Lake Storage Gen2 وBlob Storage. يجب تعيين enableServicePrincipalAuth الخيار إلى true في معلمات تكوين الاتصال لتمكين الموصل من المصادقة مع كيان الخدمة.
يمكنك اختياريا استخدام كيان خدمة مختلف لاتصال 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>")
برنامج تشغيل Spark والمنفذون إلى حساب تخزين Azure
تعمل حاوية تخزين Azure كوسيط لتخزين البيانات المجمعة عند القراءة من أو الكتابة إلى Azure Synapse. يتصل Spark ب ADLS Gen2 أو Blob Storage باستخدام abfss برنامج التشغيل.
تتوفر خيارات المصادقة التالية:
- مفتاح الوصول إلى حساب التخزين والبيانات السرية
- مصادقة OAuth 2.0. لمزيد من المعلومات حول OAuth 2.0 وكيانات الخدمة، راجع تخزين الوصول باستخدام كيان الخدمة ومعرف Microsoft Entra (Azure Active Directory).
توضح الأمثلة أدناه هاتين الطريقتين باستخدام نهج مفتاح الوصول إلى حساب التخزين. وينطبق الشيء نفسه على تكوين OAuth 2.0.
تكوين جلسة عمل دفتر الملاحظات (مفضل)
باستخدام هذا الأسلوب، يتم تعيين مفتاح الوصول إلى الحساب في تكوين جلسة العمل المقترنة بدفتر الملاحظات الذي يقوم بتشغيل الأمر. لا يؤثر هذا التكوين على دفاتر الملاحظات الأخرى المرفقة بنفس المجموعة. sparkSparkSession هو الكائن المتوفر في دفتر الملاحظات.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
تكوين Hadoop العمومي
يحدث هذا الأسلوب تكوين Hadoop العمومي المقترن بالعنصر الذي SparkContext تشاركه جميع دفاتر الملاحظات.
Scala
sc.hadoopConfiguration.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
Python
hadoopConfiguration غير مكشوف في جميع إصدارات PySpark. على الرغم من أن الأمر التالي يعتمد على بعض الداخليات Spark، فإنه يجب أن يعمل مع جميع إصدارات PySpark ومن غير المحتمل أن يتعطل أو يتغير في المستقبل:
sc._jsc.hadoopConfiguration().set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
Azure Synapse إلى حساب تخزين Azure
يتصل Azure Synapse أيضا بحساب تخزين أثناء تحميل البيانات المؤقتة وتفريغها.
في حالة إعداد مفتاح حساب وسري لحساب التخزين، يمكنك التعيين forwardSparkAzureStorageCredentials إلى true، وفي هذه الحالة يكتشف موصل Azure Synapse تلقائيا مفتاح الوصول إلى الحساب الذي تم تعيينه في تكوين جلسة دفتر الملاحظات أو تكوين Hadoop العمومي وإعادة توجيه مفتاح الوصول إلى حساب التخزين إلى مثيل Azure Synapse المتصل عن طريق إنشاء بيانات اعتماد مؤقتة محددة النطاق لقاعدة بيانات Azure.
بدلا من ذلك، إذا كنت تستخدم ADLS Gen2 مع مصادقة OAuth 2.0 أو تم تكوين مثيل Azure Synapse للحصول على هوية خدمة مدارة (عادة بالاقتران مع إعداد VNet + Service Endpoints)، يجب تعيين useAzureMSI إلى true. في هذه الحالة، سيحدد IDENTITY = 'Managed Service Identity' الموصل بيانات الاعتماد المحددة في نطاق قاعدة البيانات ولا SECRET.
دعم الدفق
يوفر موصل Azure Synapse دعما فعالا وقابلا للتطوير لكتابة الدفق المنظم ل Azure Synapse الذي يوفر تجربة مستخدم متسقة مع عمليات الكتابة الدفعية، ويستخدم PolyBase أو COPY لنقل البيانات الكبيرة بين مجموعة Azure Databricks ومثيل Azure Synapse. على غرار عمليات الكتابة الدفعية، تم تصميم الدفق بشكل كبير ل ETL، مما يوفر زمن انتقال أعلى قد لا يكون مناسبا لمعالجة البيانات في الوقت الفعلي في بعض الحالات.
دلالات التسامح مع الخطأ
بشكل افتراضي، يوفر Azure Synapse Streaming ضمانا من طرف إلى طرف لمرة واحدة بالضبط لكتابة البيانات في جدول Azure Synapse عن طريق تعقب تقدم الاستعلام بشكل موثوق باستخدام مجموعة من موقع نقطة التحقق في DBFS وجدول نقاط التحقق في Azure Synapse وآلية التأمين لضمان أن الدفق يمكنه التعامل مع أي أنواع من حالات الفشل وإعادة المحاولة وإعادة تشغيل الاستعلام.
اختياريا، يمكنك تحديد دلالات أقل تقييدا مرة واحدة على الأقل ل Azure Synapse Streaming عن طريق تعيين spark.databricks.sqldw.streaming.exactlyOnce.enabled خيار إلى false، وفي هذه الحالة قد يحدث تكرار البيانات في حالة فشل الاتصال المتقطع في Azure Synapse أو إنهاء الاستعلام غير المتوقع.
الاستخدام (الدفعة)
يمكنك استخدام هذا الموصل عبر واجهة برمجة تطبيقات مصدر البيانات في دفاتر ملاحظات Scala وPython وSQL وR.
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>")
الاستخدام (البث)
يمكنك كتابة البيانات باستخدام Structured Streaming في دفاتر ملاحظات Scala وPython.
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()
التكوين
يصف هذا القسم كيفية تكوين دلالات الكتابة للموصل والأذونات المطلوبة ومعلمات التكوين المتنوعة.
في هذا القسم:
- أوضاع الحفظ المدعومة لكتابات الدفعات
- أوضاع الإخراج المدعومة لكتابات الدفق
- كتابة دلالات
- أذونات Azure Synapse المطلوبة ل PolyBase
- أذونات Azure Synapse المطلوبة للبيان
COPY - البارامترات
- دفع الاستعلام لأسفل إلى Azure Synapse
- إدارة البيانات المؤقتة
- إدارة الكائنات المؤقتة
- دفق إدارة جدول نقاط التحقق
أوضاع الحفظ المدعومة لكتابات الدفعات
يدعم ErrorIfExistsموصل Azure Synapse أوضاع الحفظ AppendIgnoreو Overwrite مع الوضع الافتراضي هو ErrorIfExists.
لمزيد من المعلومات حول أوضاع الحفظ المدعومة في Apache Spark، راجع وثائق Spark SQL حول حفظ الأوضاع.
أوضاع الإخراج المدعومة لكتابات الدفق
يدعم Append موصل Azure Synapse أوضاع الإخراج وإلحاقات Complete السجلات والتجميعات.
لمزيد من التفاصيل حول أوضاع الإخراج ومصفوفة التوافق، راجع دليل Structured Streaming.
كتابة دلالات
إشعار
COPY متوفر في Databricks Runtime 7.0 وما فوق.
بالإضافة إلى PolyBase، يدعم موصل Azure Synapse العبارة COPY . COPY توفر العبارة طريقة أكثر ملاءمة لتحميل البيانات في Azure Synapse دون الحاجة إلى إنشاء جدول خارجي، وتتطلب أذونات أقل لتحميل البيانات، وتحسين أداء استيعاب البيانات في Azure Synapse.
بشكل افتراضي، يكتشف الموصل تلقائيا أفضل دلالات الكتابة (COPY عند استهداف مثيل Azure Synapse Gen2، PolyBase خلاف ذلك). يمكنك أيضا تحديد دلالات الكتابة بالتكوين التالي:
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>")
حيث <write-semantics> إما polybase لاستخدام PolyBase، أو copy لاستخدام العبارة COPY .
أذونات Azure Synapse المطلوبة ل PolyBase
عند استخدام PolyBase، يتطلب موصل Azure Synapse من مستخدم اتصال JDBC الحصول على إذن لتشغيل الأوامر التالية في مثيل Azure Synapse المتصل:
- إنشاء بيانات اعتماد على نطاق قاعدة البيانات
- إنشاء مصدر بيانات خارجي
- إنشاء تنسيق ملف خارجي
- إنشاء جدول خارجي
كشرط أساسي للأمر الأول، يتوقع الموصل وجود مفتاح رئيسي لقاعدة البيانات بالفعل لمثيل Azure Synapse المحدد. إذا لم يكن الأمر ذلك، يمكنك إنشاء مفتاح باستخدام الأمر CREATE MASTER KEY .
بالإضافة إلى ذلك، لقراءة جدول Azure Synapse الذي تم تعيينه من خلال dbTable أو الجداول المشار إليها في query، يجب أن يكون لدى مستخدم JDBC إذن للوصول إلى جداول Azure Synapse المطلوبة. لإعادة كتابة البيانات إلى جدول Azure Synapse الذي تم تعيينه من خلال dbTable، يجب أن يكون لدى مستخدم JDBC إذن للكتابة إلى جدول Azure Synapse هذا.
يلخص الجدول التالي الأذونات المطلوبة لجميع العمليات باستخدام PolyBase:
| العملية | الأذونات | الأذونات عند استخدام مصدر بيانات خارجي |
|---|---|---|
| كتابة الدفعة | CONTROL | راجع كتابة الدفعة |
| الكتابة المتدفقة | CONTROL | راجع الكتابة المتدفقة |
| قراءة | CONTROL | راجع القراءة |
أذونات Azure Synapse المطلوبة ل PolyBase مع خيار مصدر البيانات الخارجي
يمكنك استخدام PolyBase مع مصدر بيانات خارجي تم توفيره مسبقا. راجع المعلمة externalDataSource في المعلمات لمزيد من المعلومات.
لاستخدام PolyBase مع مصدر بيانات خارجي تم توفيره مسبقا، يتطلب موصل Azure Synapse من مستخدم اتصال JDBC الحصول على إذن لتشغيل الأوامر التالية في مثيل Azure Synapse المتصل:
لإنشاء مصدر بيانات خارجي، يجب أولا إنشاء بيانات اعتماد محددة النطاق لقاعدة البيانات. تصف الارتباطات التالية كيفية إنشاء بيانات اعتماد محددة النطاق لكيانات الخدمة ومصدر بيانات خارجي لموقع ABFS:
إشعار
يجب أن يشير موقع مصدر البيانات الخارجي إلى حاوية. لن يعمل الموصل إذا كان الموقع دليلا في حاوية.
يلخص الجدول التالي أذونات عمليات الكتابة PolyBase مع خيار مصدر البيانات الخارجي:
| العملية | الأذونات (إدراج في جدول موجود) | الأذونات (إدراج في جدول جديد) |
|---|---|---|
| كتابة الدفعة | إدارة العمليات المجمعة لقاعدة البيانات إدراج إنشاء جدول تغيير أي مخطط تغيير أي مصدر بيانات خارجي تغيير أي تنسيق ملف خارجي |
إدارة العمليات المجمعة لقاعدة البيانات إدراج إنشاء جدول تغيير أي مخطط تغيير أي مصدر بيانات خارجي تغيير أي تنسيق ملف خارجي |
| الكتابة المتدفقة | إدارة العمليات المجمعة لقاعدة البيانات إدراج إنشاء جدول تغيير أي مخطط تغيير أي مصدر بيانات خارجي تغيير أي تنسيق ملف خارجي |
إدارة العمليات المجمعة لقاعدة البيانات إدراج إنشاء جدول تغيير أي مخطط تغيير أي مصدر بيانات خارجي تغيير أي تنسيق ملف خارجي |
يلخص الجدول التالي أذونات عمليات قراءة PolyBase مع خيار مصدر البيانات الخارجي:
| العملية | الأذونات |
|---|---|
| قراءة | إنشاء جدول تغيير أي مخطط تغيير أي مصدر بيانات خارجي تغيير أي تنسيق ملف خارجي |
يمكنك استخدام هذا الموصل للقراءة عبر واجهة برمجة تطبيقات مصدر البيانات في دفاتر الملاحظات Scala وPython وSQL وR.
سكالا
// 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>")
أذونات Azure Synapse المطلوبة للبيان COPY
إشعار
متوفر في Databricks Runtime 7.0 وما فوق.
عند استخدام العبارة COPY ، يتطلب موصل Azure Synapse من مستخدم اتصال JDBC الحصول على إذن لتشغيل الأوامر التالية في مثيل Azure Synapse المتصل:
إذا لم يكن الجدول الوجهة موجودا في Azure Synapse، يلزم الحصول على إذن لتشغيل الأمر التالي بالإضافة إلى الأمر أعلاه:
يلخص الجدول التالي أذونات عمليات الكتابة الدفعية والمتدفقة باستخدام COPY:
| العملية | الأذونات (إدراج في جدول موجود) | الأذونات (إدراج في جدول جديد) |
|---|---|---|
| كتابة الدفعة | إدارة العمليات المجمعة لقاعدة البيانات إدراج |
إدارة العمليات المجمعة لقاعدة البيانات إدراج إنشاء جدول ALTER ON SCHEMA :: dbo |
| الكتابة المتدفقة | إدارة العمليات المجمعة لقاعدة البيانات إدراج |
إدارة العمليات المجمعة لقاعدة البيانات إدراج إنشاء جدول ALTER ON SCHEMA :: dbo |
المعلمات
تدعم خريطة المعلمة أو 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 مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك. |
tempFormat |
لا | PARQUET |
التنسيق الذي يتم حفظ الملفات المؤقتة به إلى مخزن الكائن الثنائي كبير الحجم عند الكتابة إلى Azure Synapse. الإعدادات الافتراضية إلى PARQUET؛ لا يسمح بأي قيم أخرى الآن. |
tempCompression |
لا | SNAPPY |
خوارزمية الضغط التي سيتم استخدامها لترميز/فك ترميز مؤقت بواسطة كل من Spark وAzure Synapse. القيم المدعومة حاليا هي: UNCOMPRESSEDوSNAPPY.GZIP |
forwardSparkAzureStorageCredentials |
لا | true | إذا ، trueتكتشف المكتبة تلقائيا بيانات الاعتماد التي يستخدمها Spark للاتصال بحاوية تخزين Blob وإعادة توجيه بيانات الاعتماد هذه إلى Azure Synapse عبر JDBC. يتم إرسال بيانات الاعتماد هذه كجزء من استعلام JDBC. لذلك يوصى بشدة بتمكين تشفير SSL لاتصال JDBC عند استخدام هذا الخيار.يتطلب الإصدار الحالي من موصل Azure Synapse (بالضبط) واحدا من forwardSparkAzureStorageCredentials، enableServicePrincipalAuthأو useAzureMSI ليتم تعيينه بشكل صريح إلى true.يتم إهمال المتغير المدعوم forward_spark_azure_storage_credentials مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك. |
useAzureMSI |
لا | true | إذا ، trueستحدد IDENTITY = 'Managed Service Identity' المكتبة ولا SECRET لبيانات الاعتماد المحددة في نطاق قاعدة البيانات التي تقوم بإنشائها.يتطلب الإصدار الحالي من موصل Azure Synapse (بالضبط) واحدا من forwardSparkAzureStorageCredentials، enableServicePrincipalAuthأو useAzureMSI ليتم تعيينه بشكل صريح إلى true. |
enableServicePrincipalAuth |
لا | true | إذا ، trueستستخدم المكتبة بيانات اعتماد كيان الخدمة المتوفرة للاتصال بحساب تخزين Azure وتحليلات Azure Synapse عبر JDBC.يتطلب الإصدار الحالي من موصل Azure Synapse (بالضبط) واحدا من forwardSparkAzureStorageCredentials، enableServicePrincipalAuthأو 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 مسبقا وسيتم تجاهله في الإصدارات المستقبلية. استخدم اسم "حالة الجمل" بدلا من ذلك. |
checkpointLocation |
نعم | لا يوجد تقصير | الموقع على DBFS الذي سيتم استخدامه بواسطة Structured Streaming لكتابة بيانات التعريف ومعلومات نقطة التحقق. راجع الاسترداد من حالات الفشل باستخدام نقاط التحقق في دليل برمجة Structured Streaming. |
numStreamingTempDirsToKeep |
لا | 0 | يشير إلى عدد (أحدث) الدلائل المؤقتة التي يجب الاحتفاظ بها للتنظيف الدوري للدفعات الصغيرة في الدفق. عند التعيين إلى 0، يتم تشغيل حذف الدليل مباشرة بعد الالتزام بالدفعة الصغيرة، وإلا يتم الاحتفاظ بعدد أحدث الدفعات الصغيرة وإزالة بقية الدلائل. استخدم -1 لتعطيل التنظيف الدوري. |
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 | يتم إلغاء الحد الأقصى لعدد الصفوف التي يمكن رفضها أثناء عمليات القراءة والكتابة قبل عملية التحميل (إما PolyBase أو COPY). سيتم تجاهل الصفوف المرفوضة. على سبيل المثال، إذا كان اثنان من كل عشرة سجلات يحتويان على أخطاء، فستتم معالجة ثمانية سجلات فقط. راجع وثائق REJECT_VALUE في وثائق CREATE EXTERNAL TABLE وMAXERRORS في COPY. |
إشعار
tableOptionsتكونpreActionsوpostActionsو وmaxStrLengthذات صلة فقط عند كتابة البيانات من Azure Databricks إلى جدول جديد في Azure Synapse.externalDataSourceتكون ذات صلة فقط عند قراءة البيانات من Azure Synapse وكتابة البيانات من Azure Databricks إلى جدول جديد في Azure Synapse باستخدام دلالات PolyBase. يجب عدم تحديد أنواع مصادقة التخزين الأخرى أثناء استخدامexternalDataSourceمثلforwardSparkAzureStorageCredentialsأوuseAzureMSI.checkpointLocationوهيnumStreamingTempDirsToKeepذات صلة فقط بتدفق الكتابات من Azure Databricks إلى جدول جديد في Azure Synapse.- على الرغم من أن جميع أسماء خيارات مصدر البيانات غير حساسة لحالة الأحرف، نوصي بتحديدها في "حالة الجمل" للوضوح.
دفع الاستعلام لأسفل إلى Azure Synapse
ينفذ موصل Azure Synapse مجموعة من قواعد التحسين لدفع عوامل التشغيل التالية لأسفل إلى Azure Synapse:
FilterProjectLimit
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 الملفات المؤقتة التي يقوم بإنشائها في حاوية تخزين Blob.
لذلك نوصي بحذف الملفات المؤقتة بشكل دوري ضمن الموقع الذي يوفره 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_%'
دفق إدارة جدول نقاط التحقق
لا يحذف موصل Azure Synapse جدول نقطة التحقق المتدفقة الذي يتم إنشاؤه عند بدء تشغيل استعلام دفق جديد.
هذا السلوك متناسق مع على checkpointLocation DBFS. لذلك نوصي بحذف جداول نقاط التحقق بشكل دوري في نفس الوقت الذي تتم فيه إزالة مواقع نقاط التحقق على DBFS للاستعلامات التي لن يتم تشغيلها في المستقبل أو التي تمت إزالة موقع نقطة التحقق بالفعل.
بشكل افتراضي، تحتوي جميع جداول نقاط التحقق على الاسم <prefix>_<query-id>، حيث <prefix> تكون بادئة قابلة للتكوين بقيمة databricks_streaming_checkpoint افتراضية وهي query_id معرف استعلام دفق مع _ إزالة الأحرف. للعثور على جميع جداول نقاط التحقق لاستعلامات الدفق القديمة أو المحذوفة، قم بتشغيل الاستعلام:
SELECT * FROM sys.tables WHERE name LIKE 'databricks_streaming_checkpoint%'
يمكنك تكوين البادئة باستخدام خيار spark.databricks.sqldw.streaming.exactlyOnce.checkpointTableNamePrefixتكوين Spark SQL .
الأسئلة الشائعة (FAQ)
تلقيت خطأ أثناء استخدام موصل Azure Synapse. كيف يمكنني معرفة ما إذا كان هذا الخطأ من Azure Synapse أو Azure Databricks؟
لمساعدتك في تصحيح الأخطاء، يتم تضمين أي استثناء يتم طرحه بواسطة التعليمات البرمجية الخاصة بموصل Azure Synapse في استثناء يوسع السمة SqlDWException . كما أن الاستثناءات تميز ما يلي:
SqlDWConnectorExceptionيمثل خطأ طرحه موصل Azure SynapseSqlDWSideExceptionيمثل خطأ طرحه مثيل Azure Synapse المتصل
ماذا يجب أن أفعل إذا فشل الاستعلام الخاص بي مع ظهور الخطأ "لا يوجد مفتاح وصول موجود في تكوين الجلسة أو تكوين Hadoop العمومي"؟
يعني هذا الخطأ أنه تعذر على موصل Azure Synapse العثور على مفتاح الوصول إلى حساب التخزين في تكوين جلسة دفتر الملاحظات أو تكوين Hadoop العمومي لحساب التخزين المحدد في tempDir.
راجع الاستخدام (الدفعة) للحصول على أمثلة حول كيفية تكوين الوصول إلى حساب التخزين بشكل صحيح. إذا تم إنشاء جدول Spark باستخدام موصل Azure Synapse، فلا يزال يتعين عليك توفير بيانات اعتماد الوصول إلى حساب التخزين من أجل القراءة أو الكتابة إلى جدول Spark.
هل يمكنني استخدام توقيع الوصول المشترك (SAS) للوصول إلى حاوية تخزين Blob المحددة بواسطة tempDir؟
لا يدعم Azure Synapse استخدام SAS للوصول إلى تخزين Blob. لذلك لا يدعم موصل Azure Synapse SAS للوصول إلى حاوية تخزين Blob المحددة بواسطة tempDir.
لقد أنشأت جدول Spark باستخدام موصل Azure Synapse مع dbTable الخيار ، وكتبت بعض البيانات إلى جدول Spark هذا، ثم أسقطت جدول Spark هذا. هل سيتم إسقاط الجدول الذي تم إنشاؤه على جانب Azure Synapse؟
لا. يعتبر Azure Synapse مصدر بيانات خارجيا. لا يتم إسقاط جدول Azure Synapse الذي تم تعيين الاسم من خلاله dbTable عند إسقاط جدول Spark.
عند كتابة DataFrame إلى Azure Synapse، لماذا أحتاج إلى القول .option("dbTable", tableName).save() بدلا من مجرد .saveAsTable(tableName)؟
وذلك لأننا نريد أن نوضح التمييز التالي: .option("dbTable", tableName) يشير إلى جدول قاعدة البيانات (أي Azure Synapse)، بينما .saveAsTable(tableName) يشير إلى جدول Spark. في الواقع، يمكنك حتى دمج الاثنين: df.write. ... .option("dbTable", tableNameDW).saveAsTable(tableNameSpark) الذي ينشئ جدولا في Azure Synapse يسمى tableNameDW وجدول خارجي في Spark يسمى tableNameSpark مدعوما بجدول Azure Synapse.
تحذير
احذر من الفرق التالي بين .save() و .saveAsTable():
- بالنسبة إلى
df.write. ... .option("dbTable", tableNameDW).mode(writeMode).save()،writeModeيعمل على جدول Azure Synapse، كما هو متوقع. - بالنسبة إلى
df.write. ... .option("dbTable", tableNameDW).mode(writeMode).saveAsTable(tableNameSpark)،writeModeيعمل على جدول Spark، بينماtableNameDWتتم الكتابة فوقه بصمت إذا كان موجودا بالفعل في Azure Synapse.
لا يختلف هذا السلوك عن الكتابة إلى أي مصدر بيانات آخر. إنه مجرد تحذير من واجهة برمجة تطبيقات Spark DataFrameWriter.