Bagikan melalui


Mengkueri data di Azure Synapse Analytics

Anda dapat mengakses Azure Synapse dari Azure Databricks menggunakan konektor Azure Synapse, yang menggunakan COPY pernyataan di Azure Synapse untuk mentransfer data dalam volume besar secara efisien antara kluster Azure Databricks dan instans Azure Synapse menggunakan akun penyimpanan Azure Data Lake Storage Gen2 untuk penahapan sementara.

Catatan

Anda mungkin lebih suka Federasi Lakehouse untuk mengelola kueri pada data Azure Synapse atau Azure Data Warehouse. Lihat Apa itu Federasi Lakehouse.

Azure Synapse Analytics adalah gudang data perusahaan berbasis cloud yang memanfaatkan pemrosesan paralel (MPP) secara besar-besaran untuk menjalankan kueri kompleks dengan cepat di seluruh petabyte data.

Penting

Konektor ini hanya untuk digunakan dengan instans Kumpulan Khusus Synapse dan tidak kompatibel dengan komponen Synapse lainnya.

Catatan

COPY hanya tersedia di instans Azure Data Lake Storage Gen2. Jika Anda mencari detail tentang bekerja dengan Polybase, lihat Koneksi Azure Databricks dan Azure Synapse dengan PolyBase (warisan).

Contoh sintaks untuk Synapse

Anda dapat mengkueri Synapse di Scala, Python, SQL, dan R. Contoh kode berikut menggunakan kunci akun penyimpanan dan meneruskan kredensial penyimpanan dari Azure Databricks ke Synapse.

Catatan

Gunakan string koneksi yang disediakan oleh portal Azure, yang memungkinkan enkripsi Secure Sockets Layer (SSL) untuk semua data yang dikirim antara driver Spark dan instans Azure Synapse melalui koneksi JDBC. Untuk memverifikasi bahwa enkripsi SSL diaktifkan, Anda dapat mencari encrypt=true dalam string koneksi.

Penting

Lokasi eksternal yang ditentukan dalam Katalog Unity tidak didukung sebagai tempDir lokasi.

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

Bagaimana cara kerja autentikasi antara Azure Databricks dan Synapse?

Konektor Azure Synapse menggunakan tiga jenis sambungan jaringan:

  • Driver Spark ke Azure Synapse
  • Kluster Spark ke akun penyimpanan Azure
  • Azure Synapse ke akun penyimpanan Azure

Mengonfigurasi akses ke penyimpanan Azure

Azure Databricks dan Synapse memerlukan akses istimewa ke akun penyimpanan Azure yang akan digunakan untuk penyimpanan data sementara.

Azure Synapse tidak mendukung penggunaan SAS untuk akses akun penyimpanan. Anda dapat mengonfigurasi akses untuk kedua layanan dengan melakukan salah satu hal berikut:

Izin Azure Synapse yang diperlukan

Karena menggunakan COPY di latar belakang, konektor Azure Synapse mengharuskan pengguna koneksi JDBC memiliki izin untuk menjalankan perintah berikut dalam instans Azure Synapse yang terhubung:

Jika tabel tujuan tidak ada di Azure Synapse, izin untuk menjalankan perintah berikut diperlukan selain perintah di atas:

Tabel berikut ini meringkas izin yang diperlukan untuk menulis dengan COPY:

Izin (menyisipkan ke dalam tabel yang sudah ada) Izin (menyisipkan ke dalam tabel baru)
ADMINISTER DATABASE BULK OPERATIONS

INSERT
ADMINISTER DATABASE BULK OPERATIONS

INSERT

CREATE TABLE

ALTER ON SCHEMA :: dbo

Konfigurasi jaringan

Jika Anda mengonfigurasi firewall di Azure Synapse, Anda harus mengonfigurasi pengaturan jaringan untuk memungkinkan Azure Databricks mencapai Azure Synapse. Pertama, pastikan ruang kerja Azure Databricks Anda disebarkan di jaringan virtual Anda sendiri setelah Menyebarkan Azure Databricks di jaringan virtual Azure Anda (injeksi VNet). Anda kemudian dapat mengonfigurasi aturan firewall IP di Azure Synpase untuk mengizinkan koneksi dari subnet Anda ke akun Synapse Anda. Lihat Aturan firewall IP Azure Synapse Analytics.

Mengonfigurasi koneksi dari Azure Databricks ke Synapse dengan OAuth 2.0 dengan perwakilan layanan

Anda dapat mengautentikasi ke Azure Synapse Analytics menggunakan perwakilan layanan dengan akses ke akun penyimpanan yang mendasarinya. Untuk informasi selengkapnya tentang menggunakan kredensial perwakilan layanan untuk mengakses akun penyimpanan Azure, lihat Koneksi ke Azure Data Lake Storage Gen2 dan Blob Storage. Anda harus mengatur enableServicePrincipalAuth opsi ke true dalam konfigurasi koneksi referensi opsi konektor Azure Databricks Synapse untuk memungkinkan konektor mengautentikasi dengan perwakilan layanan.

Anda dapat secara opsional menggunakan berbagai perwakilan layanan untuk sambungan Azure Synapse Analytics. Contoh berikut mengonfigurasi kredensial perwakilan layanan untuk akun penyimpanan dan kredensial perwakilan layanan opsional untuk 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>")

Mode penyimpanan yang didukung untuk penulisan batch

Konektor Azure Synapse mendukung mode penyimpanan ErrorIfExists, Ignore, Append, dan Overwrite dengan mode defaultnya adalah ErrorIfExists. Untuk informasi selengkapnya tentang mode penyimpanan yang didukung di Apache Spark, lihat Dokumentasi SQL Spark tentang Mode Penyimpanan.

Referensi opsi konektor Azure Databricks Synapse

Yang OPTIONS disediakan di Spark SQL mendukung pengaturan berikut:

Parameter Wajib Default Catatan
dbTable Ya, kecuali query ditentukan Tidak ada default Tabel untuk dibuat atau dibaca di Azure Synapse. Parameter ini diperlukan ketika menyimpan data kembali ke Azure Synapse.

Anda juga dapat menggunakan {SCHEMA NAME}.{TABLE NAME} untuk mengakses tabel dalam skema tertentu. Jika nama skema tidak disediakan, skema default yang dikaitkan dengan pengguna JDBC digunakan.

Varian dbtable yang sebelumnya didukung tidak digunakan lagi dan akan diabaikan dalam rilis mendatang. Gunakan nama “camel case” sebagai gantinya.
query Ya, kecuali dbTable ditentukan Tidak ada default Kueri untuk dibaca di Azure Synapse.

Untuk tabel yang dirujuk dalam kueri, Anda juga dapat menggunakan {SCHEMA NAME}.{TABLE NAME} untuk mengakses tabel dalam skema tertentu. Jika nama skema tidak disediakan, skema default yang dikaitkan dengan pengguna JDBC digunakan.
user No Tidak ada default Nama pengguna Azure Synapse. Harus digunakan bersamaan dengan opsi password. Hanya dapat digunakan jika pengguna dan kata sandi tidak diteruskan di URL. Meneruskan keduanya akan mengakibatkan kesalahan.
password No Tidak ada default Kata sandi Azure Synapse. Harus digunakan bersamaan dengan opsi user. Hanya dapat digunakan jika pengguna dan kata sandi tidak diteruskan di URL. Meneruskan keduanya akan mengakibatkan kesalahan.
url Ya Tidak ada default URL JDBC dengan sqlserver diatur sebagai subprotokol. Disarankan untuk menggunakan string koneksi yang disediakan oleh portal Azure. Pengaturan
encrypt=true sangat disarankan, karena memungkinkan enkripsi SSL sambungan JDBC. Jika user dan password diatur secara terpisah, Anda tidak perlu menyertakannya ke dalam URL.
jdbcDriver No Ditentukan oleh subprotokol URL JDBC Nama kelas driver JDBC yang digunakan. Kelas ini harus berada pada jalur kelas. Dalam kebanyakan kasus, seharusnya tidak perlu menentukan opsi ini, karena nama kelas driver yang sesuai seharusnya secara otomatis ditentukan oleh subprotokol URL JDBC.

Varian jdbc_driver yang sebelumnya didukung tidak digunakan lagi dan akan diabaikan dalam rilis mendatang. Gunakan nama “camel case” sebagai gantinya.
tempDir Ya Tidak ada default URI abfss. Sebaiknya Anda menggunakan kontainer penyimpanan Blob terdedikasi untuk Azure Synapse.

Varian tempdir yang sebelumnya didukung tidak digunakan lagi dan akan diabaikan dalam rilis mendatang. Gunakan nama “camel case” sebagai gantinya.

Anda tidak dapat menggunakan lokasi Eksternal yang ditentukan dalam Katalog Unity sebagai tempDir lokasi.
tempCompression No SNAPPY Algoritma kompresi yang akan digunakan untuk menyandikan/memecahkan kode sementara oleh Spark maupun Azure Synapse. Nilai yang didukung saat ini adalah: UNCOMPRESSED, SNAPPY, dan GZIP.
forwardSparkAzureStorageCredentials No salah Jika true, pustaka secara otomatis menemukan kredensial kunci akses akun penyimpanan yang digunakan Spark untuk terhubung ke kontainer penyimpanan Blob dan meneruskan kredensial tersebut ke Azure Synapse melalui JDBC. Kredensial ini dikirimkan sebagai bagian dari kueri JDBC. Oleh karena itu sangat disarankan agar Anda mengaktifkan enkripsi SSL dari koneksi JDBC ketika menggunakan opsi ini.

Saat mengonfigurasi autentikasi penyimpanan, Anda harus mengatur tepat salah satu dari useAzureMSI dan forwardSparkAzureStorageCredentials ke true. Atau, Anda dapat mengatur enableServicePrincipalAuth ke true dan menggunakan perwakilan layanan untuk JDBC dan autentikasi penyimpanan. Opsi forwardSparkAzureStorageCredentials ini tidak mendukung autentikasi ke penyimpanan menggunakan identitas layanan terkelola atau perwakilan layanan. Hanya kunci akses akun penyimpanan yang didukung.

Varian forward_spark_azure_storage_credentials yang sebelumnya didukung tidak digunakan lagi dan akan diabaikan dalam rilis mendatang. Gunakan nama “camel case” sebagai gantinya.
useAzureMSI No salah Jika true, pustaka akan menentukan IDENTITY = 'Managed Service Identity' dan tanpa SECRET untuk kredensial tercakup database yang dibuatnya.

Saat mengonfigurasi autentikasi penyimpanan, Anda harus mengatur tepat salah satu dari useAzureMSI dan forwardSparkAzureStorageCredentials ke true. Atau, Anda dapat mengatur enableServicePrincipalAuth ke true dan menggunakan perwakilan layanan untuk JDBC dan autentikasi penyimpanan.
enableServicePrincipalAuth No salah Jika true, pustaka akan menggunakan kredensial perwakilan layanan yang disediakan untuk tersambung ke akun penyimpanan Azure dan Azure Synapse Analytics melalui JDBC.

Jika atau forward_spark_azure_storage_credentialsuseAzureMSI diatur ke true, opsi tersebut akan lebih diutamakan daripada perwakilan layanan dalam autentikasi penyimpanan.
tableOptions No CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN String yang digunakan untuk menentukan opsi tabel ketika membuat tabel Azure Synapse yang diatur melalui dbTable. String ini diteruskan secara harfiah ke klausul WITH dari pernyataan SQL CREATE TABLE yang diterbitkan terhadap Azure Synapse.

Varian table_options yang sebelumnya didukung tidak digunakan lagi dan akan diabaikan dalam rilis mendatang. Gunakan nama “camel case” sebagai gantinya.
preActions No Tanpa default (string kosong) Daftar perintah ; SQL yang terpisah untuk dijalankan di Azure Synapse sebelum menulis data ke instans Azure Synapse. Perintah SQL ini harus menjadi perintah valid yang diterima oleh Azure Synapse.

Jika salah satu dari perintah ini gagal, ia diperlakukan sebagai kesalahan dan operasi tulis tidak dijalankan.
postActions No Tanpa default (string kosong) Daftar perintah ; SQL yang terpisah untuk dijalankan di Azure Synapse setelah konektor berhasil menulis data ke instans Azure Synapse. Perintah SQL ini harus menjadi perintah valid yang diterima oleh Azure Synapse.

Jika salah satu perintah ini gagal, ia diperlakukan sebagai kesalahan dan Anda akan mendapatkan pengecualian setelah data berhasil ditulis ke instans Azure Synapse.
maxStrLength No 256 StringType di Spark dipetakan ke jenis NVARCHAR(maxStrLength) di Azure Synapse. Anda dapat menggunakan maxStrLength untuk mengatur panjang string untuk semua kolom jenis NVARCHAR(maxStrLength) yang ada dalam tabel bernama
dbTable di Azure Synapse.

Varian maxstrlength yang sebelumnya didukung tidak digunakan lagi dan akan diabaikan dalam rilis mendatang. Gunakan nama “camel case” sebagai gantinya.
applicationName No Databricks-User-Query Tag sambungan untuk setiap kueri. Jika tidak ditentukan atau nilainya adalah string kosong, nilai default tag ditambahkan URL JDBC. Nilai default mencegah alat Azure DB Monitoring menerbitkan peringatan injeksi SQL palsu terhadap kueri.
maxbinlength No Tidak ada default Mengontrol panjang kolom dari kolom BinaryType. Parameter ini diterjemahkan sebagai VARBINARY(maxbinlength).
identityInsert No salah Pengaturan ke true mengaktifkan mode IDENTITY_INSERT, yang menyisipkan nilai yang disediakan DataFrame di kolom identitas tabel Azure Synapse.

Lihat Menyisipkan nilai secara eksplisit ke dalam kolom IDENTITY.
externalDataSource No Tidak ada default Sumber data eksternal yang telah disediakan sebelumnya untuk membaca data dari Azure Synapse. Sumber data eksternal hanya dapat digunakan dengan PolyBase dan menghapus persyaratan izin CONTROL karena konektor tidak perlu membuat kredensial tercakup dan sumber data eksternal untuk memuat data.

Untuk contoh penggunaan dan daftar izin yang diperlukan ketika menggunakan sumber data eksternal, lihat Izin Azure Synapse yang diperlukan untuk PolyBase dengan opsi sumber data eksternal.
maxErrors No 0 Jumlah maksimum baris yang dapat ditolak selama baca dan tulis sebelum operasi pemuatan dibatalkan. Baris yang ditolak akan diabaikan. Misalnya, jika dua dari sepuluh rekaman memiliki kesalahan, hanya delapan rekaman yang akan diproses.

Lihat dokumentasi REJECT_VALUE dalam dokumentasi BUAT TABEL EKSTERNAL dan MAXERRORS di COPY.
inferTimestampNTZType No salah Jika true, nilai jenis Azure Synapse TIMESTAMP ditafsirkan sebagai TimestampNTZType (tanda waktu tanpa zona waktu) selama pembacaan. Jika tidak, semua tanda waktu ditafsirkan terlepas TimestampType dari jenis dalam tabel Azure Synapse yang mendasar.

Catatan

  • tableOptions, preActions, postActions, dan maxStrLength hanya relevan ketika menulis data dari Azure Databricks ke tabel baru di Azure Synapse.
  • Meskipun semua nama opsi sumber data tidak peka huruf besar/kecil, sebaiknya Anda menentukannya dalam “camel case” untuk kejelasan.

Pendorongan kueri ke dalam Azure Synapse

Konektor Azure Synapse mengimplementasikan set aturan pengoptimalan untuk mendorong operator berikut ke dalam Azure Synapse:

  • Filter
  • Project
  • Limit

Operator Project dan Filter mendukung ekspresi berikut:

  • Sebagian besar operator logika boolean
  • Perbandingan
  • Operasi aritmetika
  • Bentuk numerik dan string

Untuk operator Limit, pendorongan hanya didukung ketika tidak ada pengurutan yang ditentukan. Misalnya:

SELECT TOP(10) * FROM table, tetapi bukan SELECT TOP(10) * FROM table ORDER BY col.

Catatan

Konektor Azure Synapse tidak mendorong ekspresi yang beroperasi pada string, tanggal, atau stempel waktu.

Pendorongan kueri dibuat dengan konektor Azure Synapse diaktifkan secara default. Anda dapat menonaktifkannya dengan mengatur spark.databricks.sqldw.pushdown ke false.

Pengelolaan data sementara

Konektor Azure Synapse tidak menghapus file sementara yang dibuatnya di kontainer penyimpanan Azure. Databricks merekomendasikan agar Anda secara berkala menghapus file sementara di bawah lokasi yang disediakan tempDir pengguna.

Untuk memfasilitasi pembersihan data, konektor Azure Synapse tidak menyimpan file data langsung di bawah tempDir, melainkan membuat subdirektori formulir: <tempDir>/<yyyy-MM-dd>/<HH-mm-ss-SSS>/<randomUUID>/. Anda dapat mengatur pekerjaan berkala (menggunakan fitur pekerjaan Azure Databricks atau lainnya) untuk berulang kali menghapus subdirektori yang lebih lama dari ambang tertentu (misalnya, 2 hari), dengan asumsi bahwa tidak mungkin ada pekerjaan Spark yang berjalan lebih lama dari ambang tersebut.

Alternatif yang lebih sederhana adalah secara berkala menghilangkan keseluruhan kontainer dan membuat yang baru dengan nama yang sama. Ini mengharuskan Anda menggunakan kontainer terdedikasi untuk data sementara yang dihasilkan oleh konektor Azure Synapse dan Anda dapat menemukan jendela waktu di mana Anda dapat menjamin bahwa tidak ada kueri yang melibatkan konektor yang berjalan.

Pengelolaan objek sementara

Konektor Azure Synapse mengotomatiskan transfer data antara kluster Azure Databricks dan instans Azure Synapse. Untuk membaca data dari tabel Azure Synapse atau kueri atau menulis data ke tabel Azure Synapse, konektor Azure Synapse membuat objek sementara, termasuk DATABASE SCOPED CREDENTIAL, EXTERNAL DATA SOURCE, EXTERNAL FILE FORMAT, dan EXTERNAL TABLE di balik layar. Objek-objek ini hanya hidup selama durasi pekerjaan Spark yang sesuai dan secara otomatis dihilangkan.

Ketika kluster menjalankan kueri menggunakan konektor Azure Synapse, jika proses driver Spark crash atau dimulai ulang secara paksa, atau jika kluster dihentikan atau dimulai ulang secara paksa, objek sementara mungkin tidak dihilangkan. Untuk memfasilitasi identifikasi dan penghapusan manual objek-objek ini, konektor Azure Synapse memberi prefiks pada nama semua objek sementara perantara yang dibuat di instans Azure Synapse dengan tag formulir: tmp_databricks_<yyyy_MM_dd_HH_mm_ss_SSS>_<randomUUID>_<internalObject>.

Sebaiknya anda mencari objek yang bocor secara berkala menggunakan kueri seperti berikut ini:

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