Gunakan Konektor Apache Spark untuk SQL Server dan Azure SQL

Penting

Add-on Kluster Big Data Microsoft SQL Server 2019 akan dihentikan. Dukungan untuk Kluster Big Data SQL Server 2019 akan berakhir pada 28 Februari 2025. Semua pengguna SQL Server 2019 yang ada dengan Jaminan Perangkat Lunak akan didukung penuh pada platform dan perangkat lunak akan terus dipertahankan melalui pembaruan kumulatif SQL Server hingga saat itu. Untuk informasi selengkapnya, lihat posting blog pengumuman dan opsi Big data di platform Microsoft SQL Server.

Konektor Apache Spark untuk SQL Server dan Azure SQL adalah konektor berperforma tinggi yang memungkinkan Anda menggunakan data transaksional dalam analitik big data dan mempertahankan hasil untuk kueri atau pelaporan ad hoc. Konektor memungkinkan Anda menggunakan database SQL, lokal, atau di cloud, sebagai sumber data input atau sink data output untuk pekerjaan Spark. Konektor menggunakan API penulisan massal SQL Server. Setiap parameter tulis massal dapat diteruskan sebagai parameter opsional oleh pengguna dan diteruskan apa adanya oleh konektor ke API yang mendasar. Untuk informasi selengkapnya tentang operasi penulisan massal, lihat Menggunakan salinan massal dengan driver JDBC.

Konektor disertakan secara default dalam SQL Server Kluster Big Data.

Pelajari selengkapnya tentang konektor di repositori sumber terbuka. Misalnya, lihat sampel.

Menulis ke Tabel SQL baru

Perhatian

Dalam overwrite mode, konektor terlebih dahulu menghilangkan tabel jika sudah ada dalam database secara default. Gunakan opsi ini dengan hati-hati untuk menghindari kehilangan data yang tidak terduga.

Saat menggunakan mode overwrite jika Anda tidak menggunakan opsi truncate, pada pembuatan ulang tabel, indeks akan hilang. Misalnya, tabel penyimpan kolom menjadi timbunan. Jika Anda ingin mempertahankan pengindeksan yang ada, tentukan juga opsi truncate dengan nilai true. Misalnya .option("truncate",true)

server_name = "jdbc:sqlserver://{SERVER_ADDR}"
database_name = "database_name"
url = server_name + ";" + "databaseName=" + database_name + ";"

table_name = "table_name"
username = "username"
password = "password123!#" # Please specify password here

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("overwrite") \
    .option("url", url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .save()
except ValueError as error :
    print("Connector write failed", error)

Tambahkan ke Tabel SQL

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("append") \
    .option("url", url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .save()
except ValueError as error :
    print("Connector write failed", error)

Tentukan tingkat isolasi

Konektor ini secara default menggunakan tingkat isolasi READ_COMMITTED saat melakukan penyisipan massal ke dalam database. Jika Anda ingin mengambil alih ini ke tingkat isolasi lain, silakan gunakan opsi seperti yang mssqlIsolationLevel ditunjukkan di bawah ini.

    .option("mssqlIsolationLevel", "READ_UNCOMMITTED") \

Baca dari Tabel SQL

jdbcDF = spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", url) \
        .option("dbtable", table_name) \
        .option("user", username) \
        .option("password", password).load()

Mode Non-Direktori Aktif

Dalam keamanan mode non-Direktori Aktif, setiap pengguna memiliki nama pengguna dan kata sandi yang perlu disediakan sebagai parameter selama instansiasi konektor untuk melakukan baca dan/atau tulis.

Contoh instansiasi konektor untuk mode non-Direktori Aktif ada di bawah ini. Sebelum Anda menjalankan skrip, ganti ? dengan nilai untuk akun Anda.

# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark" 

url = "jdbc:sqlserver://master-p-svc;databaseName=?;"
writer = df.write \ 
   .format(connector_type)\ 
   .mode("overwrite") 
   .option("url", url) \ 
   .option("user", ?) \ 
   .option("password",?) 
writer.save() 

Mode Active Directory

Dalam keamanan mode Direktori Aktif, setelah pengguna membuat file tab kunci, pengguna perlu memberikan principal parameter dan keytab sebagai selama instansiasi konektor.

Dalam mode ini, driver memuat file keytab ke masing-masing kontainer pelaksana. Kemudian, pelaksana menggunakan nama utama dan keytab untuk menghasilkan token yang digunakan untuk membuat konektor JDBC untuk baca/tulis.

Contoh instansiasi konektor untuk mode Direktori Aktif ada di bawah ini. Sebelum Anda menjalankan skrip, ganti ? dengan nilai untuk akun Anda.

# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark"

url = "jdbc:sqlserver://master-p-svc;databaseName=?;integratedSecurity=true;authenticationScheme=JavaKerberos;" 
writer = df.write \ 
   .format(connector_type)\ 
   .mode("overwrite") 
   .option("url", url) \ 
   .option("principal", ?) \ 
   .option("keytab", ?)   

writer.save() 

Langkah berikutnya

Untuk informasi selengkapnya tentang kluster big data, lihat Cara menyebarkan SQL Server Kluster Big Data di Kubernetes

Memiliki rekomendasi umpan balik atau fitur untuk SQL Server Kluster Big Data? Tinggalkan catatan di SQL Server Kluster Big Data Umpan Balik.