Konektor Databricks SQL untuk Python
Konektor SQL Databricks untuk Python adalah pustaka Python yang memungkinkan Anda menggunakan kode Python untuk menjalankan perintah SQL pada kluster Azure Databricks dan gudang Databricks SQL. Konektor SQL Databricks untuk Python lebih mudah disiapkan dan digunakan daripada pustaka Python serupa seperti pyodbc. Pustaka ini mengikuti PEP 249 – Spesifikasi API Database Python v2.0.
Catatan
Konektor SQL Databricks untuk Python juga mendukung dialek SQLAlchemy untuk Azure Databricks, tetapi harus diinstal untuk menggunakan fitur-fitur ini. Lihat Menggunakan SQLAlchemy dengan Azure Databricks.
Persyaratan
- Mesin pengembangan yang menjalankan Python >=3.8 dan <=3.11.
- Databricks merekomendasikan agar Anda menggunakan lingkungan virtual Python, seperti yang disediakan oleh venv yang disertakan dengan Python. Lingkungan virtual membantu memastikan bahwa Anda menggunakan versi Python yang benar dan Konektor SQL Databricks untuk Python bersama-sama. Menyiapkan dan menggunakan lingkungan virtual berada di luar cakupan artikel ini. Untuk informasi selengkapnya, lihat Membuat lingkungan virtual.
- Kluster atau Gudang SQL yang sudah ada.
Mulai
Instal Konektor SQL Databricks untuk Python. PyArrow adalah dependensi opsional dari Databricks SQL Connector untuk Python dan tidak diinstal secara default. Jika Anda tidak menginstal PyArrow, fitur seperti CloudFetch dan fungsionalitas Apache Arrow lainnya tidak tersedia, yang dapat memengaruhi performa untuk volume data yang besar.
- Untuk menginstal konektor ramping, gunakan
pip install databricks-sql-connector
. - Untuk menginstal konektor lengkap, termasuk PyArrow, gunakan
pip install databricks-sql-connector[pyarrow]
.
- Untuk menginstal konektor ramping, gunakan
Kumpulkan informasi berikut ini untuk kluster atau gudang SQL yang ingin digunakan:
Kluster
- Nama host dari server kluster. Anda bisa mendapatkan nama ini dari nilai Nama Host Server di tab Opsi Tingkat Lanjut > JDBC/ODBC kluster Anda.
- Jalur HTTP klaster. Anda bisa mendapatkan jalur ini dari nilai Jalur HTTP di tab Opsi Tingkat Lanjut > JDBC/ODBC kluster Anda.
Gudang SQL
- Nama host server gudang SQL. Anda dapat memperoleh nama ini dari nilai Nama Host Server pada tab Detail Sambungan untuk gudang SQL Anda.
- Jalur HTTP dari SQL warehouse. Anda dapat memperoleh jalur ini dari nilai Jalur HTTP pada tab Detail Sambungan gudang SQL Anda.
Autentikasi
Konektor SQL Databricks untuk Python mendukung jenis autentikasi Azure Databricks berikut:
- Autentikasi token akses pribadi Databricks
- Autentikasi token Microsoft Entra ID
- Autentikasi mesin-ke-mesin (M2M) OAuth
- Autentikasi pengguna ke komputer (U2M) OAuth
Konektor SQL Databricks untuk Python belum mendukung jenis autentikasi Azure Databricks berikut:
- Autentikasi identitas Azure yang dikelola
- Autentikasi principal layanan MS Entra
- Autentikasi Azure CLI
Autentikasi token akses pribadi Databricks
Untuk menggunakan Konektor SQL Databricks untuk Python dengan autentikasi token akses pribadi Azure Databricks, Anda harus terlebih dahulu membuat token akses pribadi Azure Databricks. Untuk melakukannya, ikuti langkah-langkah dalam token akses pribadi Azure Databricks untuk pengguna ruang kerja.
Untuk mengautentikasi Konektor SQL Databricks untuk Python, gunakan cuplikan kode berikut. Cuplikan ini mengasumsikan bahwa Anda telah mengatur variabel lingkungan berikut:
-
DATABRICKS_SERVER_HOSTNAME
atur ke nilai Nama Host Server untuk kluster atau gudang SQL Anda. -
DATABRICKS_HTTP_PATH
, atur ke Jalur HTTP untuk kluster atau gudang SQL Anda. -
DATABRICKS_TOKEN
, atur ke token akses pribadi Azure Databricks.
Untuk mengatur variabel lingkungan, lihat dokumentasi sistem operasi Anda.
from databricks import sql
import os
with sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN")) as connection:
# ...
Autentikasi mesin-ke-mesin (M2M) OAuth
Konektor SQL Databricks untuk Python versi 2.7.0 ke atas mendukung autentikasi komputer-ke-mesin (M2M) OAuth. Anda juga harus menginstal Databricks SDK untuk Python 0.18.0 atau lebih tinggi (misalnya dengan menjalankan pip install databricks-sdk
atau python -m pip install databricks-sdk
).
Untuk menggunakan Konektor SQL Databricks untuk Python dengan autentikasi M2M OAuth, Anda harus melakukan hal berikut:
Buat perwakilan layanan Azure Databricks di ruang kerja Azure Databricks Anda, dan buat rahasia OAuth untuk perwakilan layanan tersebut.
Untuk membuat perwakilan layanan dan rahasia OAuth-nya, lihat Mengotorisasi akses tanpa pengawasan ke sumber daya Azure Databricks dengan perwakilan layanan menggunakan OAuth. Catat nilai UUID atau ID Aplikasi perwakilan layanan, dan nilai Rahasia untuk rahasia OAuth perwakilan layanan.
Berikan akses perwakilan layanan tersebut ke kluster atau gudang Anda.
Untuk memberikan akses perwakilan layanan ke kluster atau gudang Anda, lihat Izin komputasi atau Mengelola gudang SQL.
Untuk mengautentikasi Konektor SQL Databricks untuk Python, gunakan cuplikan kode berikut. Cuplikan ini mengasumsikan bahwa Anda telah mengatur variabel lingkungan berikut:
-
DATABRICKS_SERVER_HOSTNAME
atur ke Nama Host Server untuk kluster atau gudang data SQL Anda. -
DATABRICKS_HTTP_PATH
, tetapkan ke nilai Jalur HTTP untuk kluster atau gudang SQL Anda. -
DATABRICKS_CLIENT_ID
, atur ke nilai UUID atau ID Aplikasi dari prinsipal layanan. -
DATABRICKS_CLIENT_SECRET
, atur ke nilai Rahasia untuk rahasia OAuth perwakilan layanan.
Untuk mengatur variabel lingkungan, lihat dokumentasi sistem operasi Anda.
from databricks.sdk.core import Config, oauth_service_principal
from databricks import sql
import os
server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME")
def credential_provider():
config = Config(
host = f"https://{server_hostname}",
client_id = os.getenv("DATABRICKS_CLIENT_ID"),
client_secret = os.getenv("DATABRICKS_CLIENT_SECRET"))
return oauth_service_principal(config)
with sql.connect(server_hostname = server_hostname,
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
credentials_provider = credential_provider) as connection:
# ...
Autentikasi token ID Microsoft Entra
Untuk menggunakan Konektor SQL Databricks untuk Python dengan autentikasi token ID Microsoft Entra, Anda harus menyediakan Konektor SQL Databricks untuk Python dengan token ID Microsoft Entra. Untuk membuat token akses ID Microsoft Entra, lakukan hal berikut:
- Untuk pengguna Azure Databricks, Anda dapat menggunakan Azure CLI. Lihat Mendapatkan token ID Microsoft Entra untuk pengguna dengan menggunakan Azure CLI.
- Untuk perwakilan layanan ID Microsoft Entra, lihat Mendapatkan token akses ID Microsoft Entra dengan Azure CLI. Untuk membuat perwakilan layanan yang dikelola oleh ID Microsoft Entra, lihat Mengelola perwakilan layanan.
Token ID Microsoft Entra memiliki masa pakai default sekitar 1 jam. Untuk membuat token ID Microsoft Entra baru, ulangi proses ini.
Untuk mengautentikasi Konektor SQL Databricks untuk Python, gunakan cuplikan kode berikut. Cuplikan ini mengasumsikan bahwa Anda telah mengatur variabel lingkungan berikut:
- Atur
DATABRICKS_SERVER_HOSTNAME
ke Nama Host Server untuk kluster atau gudang SQL Anda. - Atur
DATABRICKS_HTTP_PATH
ke nilai Jalur HTTP untuk kluster atau gudang SQL Anda. - Atur
DATABRICKS_TOKEN
menjadi token ID Microsoft Entra.
Untuk mengatur variabel lingkungan, lihat dokumentasi sistem operasi Anda.
from databricks import sql
import os
with sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN")) as connection:
# ...
Autentikasi pengguna ke komputer (U2M) OAuth
Konektor SQL Databricks untuk Python versi 2.7.0 ke atas mendukung autentikasi pengguna-ke-mesin (U2M) OAuth. Anda juga harus menginstal Databricks SDK untuk Python 0.19.0 atau lebih tinggi (misalnya dengan menjalankan pip install databricks-sdk
atau python -m pip install databricks-sdk
).
Untuk mengautentikasi Konektor SQL Databricks untuk Python dengan autentikasi OAuth U2M, gunakan cuplikan kode berikut. Autentikasi OAuth U2M menggunakan proses masuk dan persetujuan real-time oleh manusia untuk mengesahkan akun pengguna target Azure Databricks. Cuplikan ini mengasumsikan bahwa Anda telah mengatur variabel lingkungan berikut:
- Atur
ke Nama Host Server untuk kluster atau SQL warehouse Anda. - Atur
DATABRICKS_HTTP_PATH
ke nilai HTTP Path untuk kluster atau gudang SQL Anda.
Untuk mengatur variabel lingkungan, lihat dokumentasi sistem operasi Anda.
from databricks import sql
import os
with sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
auth_type = "databricks-oauth") as connection:
# ...
Contoh
Contoh kode berikut menunjukkan cara menggunakan Konektor SQL Databricks untuk Python guna mengkueri dan menyisipkan data, mengkueri metadata, mengelola kursor dan koneksi, serta mengonfigurasi pengelogan.
Catatan
Contoh kode berikut menunjukkan cara menggunakan token akses pribadi Azure Databricks untuk autentikasi. Untuk menggunakan jenis autentikasi Azure Databricks lain yang tersedia, lihat Autentikasi.
Contoh kode ini mengambil nilai variabel koneksi server_hostname
, http_path
, dan access_token
dari variabel lingkungan ini:
-
DATABRICKS_SERVER_HOSTNAME
, yang merepresentasikan nilai Nama Host Server dari persyaratan. -
DATABRICKS_HTTP_PATH
, yang merepresentasikan nilai Jalur HTTP dari persyaratan. -
DATABRICKS_TOKEN
, yang merepresentasikan token akses Anda dari persyaratan.
Anda dapat menggunakan pendekatan lain untuk mengambil nilai variabel koneksi ini. Menggunakan variabel lingkungan hanyalah satu dari sekian banyak pendekatan.
- Atur Agen Pengguna
- Kueri data
- Sisipkan data
- Metadata kueri
- Mengelola kursor dan koneksi
- Menangani file pada volume Katalog Unity
- Mengonfigurasi pengelogan
Atur User-Agent
Contoh kode berikut menunjukkan cara mengatur product_name
aplikasi User-Agent untuk pelacakan penggunaan.
from databricks import sql
import os
with sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN"),
_user_agent_entry = "product_name") as connection:
with connection.cursor() as cursor:
cursor.execute("SELECT 1 + 1")
result = cursor.fetchall()
for row in result:
print(row)
Mengkueri data
Contoh kode berikut ini menunjukkan cara untuk memanggil Konektor SQL Databricks untuk Python guna menjalankan perintah SQL dasar pada kluster atau gudang SQL. Perintah ini mengembalikan dua baris pertama dari tabel trips
dalam skema nyctaxi
dari katalog samples
.
from databricks import sql
import os
with sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN")) as connection:
with connection.cursor() as cursor:
cursor.execute("SELECT * FROM samples.nyctaxi.trips LIMIT 2")
result = cursor.fetchall()
for row in result:
print(row)
Menyisipkan data
Contoh berikut menunjukkan cara menyisipkan data dalam jumlah kecil (ribuan baris):
from databricks import sql
import os
with sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN")) as connection:
with connection.cursor() as cursor:
cursor.execute("CREATE TABLE IF NOT EXISTS squares (x int, x_squared int)")
squares = [(i, i * i) for i in range(100)]
values = ",".join([f"({x}, {y})" for (x, y) in squares])
cursor.execute(f"INSERT INTO squares VALUES {values}")
cursor.execute("SELECT * FROM squares LIMIT 10")
result = cursor.fetchall()
for row in result:
print(row)
Untuk data dalam jumlah besar, Anda harus terlebih dahulu mengunggah data ke penyimpanan cloud lalu menjalankan perintah COPY INTO.
Metadata kueri
Ada metode khusus untuk mengambil metadata. Contoh berikut mengambil metadata tentang kolom dalam tabel sampel:
from databricks import sql
import os
with sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN")) as connection:
with connection.cursor() as cursor:
cursor.columns(schema_name="default", table_name="squares")
print(cursor.fetchall())
Mengelola kursor dan koneksi
Ini adalah praktik terbaik untuk menutup koneksi dan kursor apa pun yang tidak lagi digunakan. Tindakan ini akan membebaskan sumber daya pada kluster Azure Databricks serta gudang SQL Databricks.
Anda dapat menggunakan manajer konteks (sintaks with
yang digunakan dalam contoh sebelumnya) untuk mengelola sumber daya, atau secara eksplisit memanggil close
:
from databricks import sql
import os
connection = sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN"))
cursor = connection.cursor()
cursor.execute("SELECT * from range(10)")
print(cursor.fetchall())
cursor.close()
connection.close()
Mengelola file dalam volume Katalog Unity
Konektor SQL Databricks memungkinkan Anda menulis file lokal ke volume Unity Catalog, mengunduh file dari volume, dan menghapus file dari volume, seperti yang ditunjukkan dalam contoh berikut:
from databricks import sql
import os
# For writing local files to volumes and downloading files from volumes,
# you must set the staging_allows_local_path argument to the path to the
# local folder that contains the files to be written or downloaded.
# For deleting files in volumes, you must also specify the
# staging_allows_local_path argument, but its value is ignored,
# so in that case its value can be set for example to an empty string.
with sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN"),
staging_allowed_local_path = "/tmp/") as connection:
with connection.cursor() as cursor:
# Write a local file to the specified path in a volume.
# Specify OVERWRITE to overwrite any existing file in that path.
cursor.execute(
"PUT '/temp/my-data.csv' INTO '/Volumes/main/default/my-volume/my-data.csv' OVERWRITE"
)
# Download a file from the specified path in a volume.
cursor.execute(
"GET '/Volumes/main/default/my-volume/my-data.csv' TO '/tmp/my-downloaded-data.csv'"
)
# Delete a file from the specified path in a volume.
cursor.execute(
"REMOVE '/Volumes/main/default/my-volume/my-data.csv'"
)
Mengonfigurasi pengelogan
Konektor SQL Databricks menggunakan modul pengelogan standar Python. Anda dapat mengonfigurasi tingkat pengelogan yang mirip dengan berikut ini:
from databricks import sql
import os, logging
logging.getLogger("databricks.sql").setLevel(logging.DEBUG)
logging.basicConfig(filename = "results.log",
level = logging.DEBUG)
connection = sql.connect(server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN"))
cursor = connection.cursor()
cursor.execute("SELECT * from range(10)")
result = cursor.fetchall()
for row in result:
logging.debug(row)
cursor.close()
connection.close()
Pengujian
Untuk menguji kode Anda, gunakan kerangka kerja pengujian Python seperti pytest. Untuk menguji kode Anda dalam kondisi simulasi tanpa memanggil titik akhir REST API Azure Databricks atau mengubah status akun atau ruang kerja Azure Databricks, Anda dapat menggunakan pustaka tiruan Python seperti unittest.mock.
Misalnya, diberikan file berikut bernama helpers.py
yang berisi fungsi get_connection_personal_access_token
yang menggunakan token akses pribadi Azure Databricks untuk mengembalikan koneksi ke Azure Databricks workspace, dan fungsi select_nyctaxi_trips
yang memanfaatkan koneksi tersebut untuk mengambil sejumlah baris data yang ditentukan dari tabel trips
dalam skema nyctaxi
dari katalog samples
.
# helpers.py
from databricks import sql
from databricks.sql.client import Connection, List, Row, Cursor
def get_connection_personal_access_token(
server_hostname: str,
http_path: str,
access_token: str
) -> Connection:
return sql.connect(
server_hostname = server_hostname,
http_path = http_path,
access_token = access_token
)
def select_nyctaxi_trips(
connection: Connection,
num_rows: int
) -> List[Row]:
cursor: Cursor = connection.cursor()
cursor.execute(f"SELECT * FROM samples.nyctaxi.trips LIMIT {num_rows}")
result: List[Row] = cursor.fetchall()
return result
Dan diberikan file berikut bernama main.py
yang memanggil fungsi get_connection_personal_access_token
dan select_nyctaxi_trips
.
# main.py
from databricks.sql.client import Connection, List, Row
import os
from helpers import get_connection_personal_access_token, select_nyctaxi_trips
connection: Connection = get_connection_personal_access_token(
server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME"),
http_path = os.getenv("DATABRICKS_HTTP_PATH"),
access_token = os.getenv("DATABRICKS_TOKEN")
)
rows: List[Row] = select_nyctaxi_trips(
connection = connection,
num_rows = 2
)
for row in rows:
print(row)
File berikut bernama test_helpers.py
menguji apakah select_nyctaxi_trips
fungsi mengembalikan respons yang diharapkan. Daripada membuat koneksi nyata ke ruang kerja target, pengujian ini meniru objek Connection
. Pengujian ini juga meniru beberapa data yang sesuai dengan skema dan nilai yang ada dalam data nyata. Pengujian mengembalikan data yang di-mock melalui koneksi yang di-mock, lalu memeriksa apakah salah satu nilai dari baris data yang di-mock cocok dengan nilai yang diharapkan.
# test_helpers.py
import pytest
from databricks.sql.client import Connection, List, Row
from datetime import datetime
from helpers import select_nyctaxi_trips
from unittest.mock import create_autospec
@pytest.fixture
def mock_data() -> List[Row]:
return [
Row(
tpep_pickup_datetime = datetime(2016, 2, 14, 16, 52, 13),
tpep_dropoff_datetime = datetime(2016, 2, 14, 17, 16, 4),
trip_distance = 4.94,
fare_amount = 19.0,
pickup_zip = 10282,
dropoff_zip = 10171
),
Row(
tpep_pickup_datetime = datetime(2016, 2, 4, 18, 44, 19),
tpep_dropoff_datetime = datetime(2016, 2, 4, 18, 46),
trip_distance = 0.28,
fare_amount = 3.5,
pickup_zip = 10110,
dropoff_zip = 10110
)
]
def test_select_nyctaxi_trips(mock_data: List[Row]):
# Create a mock Connection.
mock_connection = create_autospec(Connection)
# Set the mock Connection's cursor().fetchall() to the mock data.
mock_connection.cursor().fetchall.return_value = mock_data
# Call the real function with the mock Connection.
response: List[Row] = select_nyctaxi_trips(
connection = mock_connection,
num_rows = 2)
# Check the value of one of the mocked data row's columns.
assert response[1].fare_amount == 3.5
select_nyctaxi_trips
Karena fungsi berisi SELECT
pernyataan dan oleh karena itu tidak mengubah status trips
tabel, tiruan tidak benar-benar diperlukan dalam contoh ini. Namun, tiruan memungkinkan Anda menjalankan pengujian dengan cepat tanpa menunggu koneksi aktual dibuat dengan ruang kerja. Selain itu, mocking memungkinkan Anda menjalankan tes yang disimulasikan beberapa kali untuk fungsi yang mungkin mengubah status tabel, seperti INSERT INTO
, UPDATE
, dan DELETE FROM
.
Referensi API
Paket
databricks-sql-connector
Penggunaan: pip install databricks-sql-connector
Lihat juga databricks-sql-connector di Indeks Paket Python (PyPI).
Modul
databricks.sql
Penggunaan: from databricks import sql
Kelas
Kelas yang dipilih meliputi yang berikut ini:
Kelas |
---|
Connection Sesi pada sumber daya komputasi Azure Databricks. |
Cursor Mekanisme untuk menelusuri rekaman data. |
Row Baris data dalam hasil kueri SQL. |
Connection
kelas
Untuk membuat Connection
objek, panggil databricks.sql.connect
metode dengan parameter berikut:
Parameter |
---|
server_hostname Jenis: str Nama host server kluster atau gudang SQL. Untuk mendapatkan nama host server, lihat petunjuknya di bagian sebelumnya di artikel ini. Parameter ini diperlukan. Contoh: adb-1234567890123456.7.azuredatabricks.net |
http_path Jenis: str Jalur HTTP kluster atau gudang SQL. Untuk mendapatkan jalur HTTP, lihat petunjuknya di bagian sebelumnya di artikel ini. Parameter ini diperlukan. Contoh: sql/protocolv1/o/1234567890123456/1234-567890-test123 untuk kluster./sql/1.0/warehouses/a1b234c567d8e9fa untuk gudang SQL. |
access_token , auth_type Jenis: str Informasi tentang pengaturan autentikasi Azure Databricks. Untuk detailnya, lihat Autentikasi. |
session_configuration Jenis: dict[str, Any] Kamus konfigurasi parameter sesi Spark. Mengatur konfigurasi sama dengan menggunakan perintah SQL SET key=val . Jalankan perintah SQL SET -v untuk mendapatkan daftar lengkap konfigurasi yang tersedia.Bawaan ke None .Parameter ini bersifat opsional. Contoh: {"spark.sql.variable.substitute": True} |
http_headers Jenis: List[Tuple[str, str]]] Pasangan tambahan (kunci, nilai) yang akan diatur di header HTTP pada setiap permintaan RPC yang dibuat klien. Penggunaan umum tidak akan mengatur header HTTP tambahan. Setelan bawaan ke None .Parameter ini bersifat opsional. Sejak versi 2.0 |
catalog Jenis: str Katalog awal yang digunakan untuk koneksi. Secara default akan menggunakan None (dalam hal ini katalog bawaan, biasanya hive_metastore , akan digunakan).Parameter ini bersifat opsional. Sejak versi 2.0 |
schema Jenis: str Skema awal yang digunakan untuk koneksi. Diatur ke None (dalam hal ini, skema bawaan default akan digunakan).Parameter ini bersifat opsional. Sejak versi 2.0 |
use_cloud_fetch Jenis: bool True untuk mengirim permintaan pengambilan langsung ke penyimpanan objek cloud untuk mengunduh potongan data.
False (default) untuk mengirim permintaan pengambilan langsung ke Azure Databricks.Jika use_cloud_fetch diatur ke True tetapi akses jaringan diblokir, maka permintaan pengambilan akan gagal.Sejak versi 2.8 |
Metode yang dipilih Connection
meliputi yang berikut ini:
Metode |
---|
close Menutup sambungan ke database dan merilis semua sumber daya terkait di server. Setiap panggilan tambahan ke sambungan ini akan menampilkan Error .Tidak ada parameter. Tidak ada nilai yang dikembalikan. |
cursor Mengembalikan objek baru Cursor yang memungkinkan traversal atas rekaman dalam database.Tidak ada parameter. |
Cursor
kelas
Untuk membuat objek Cursor
, panggil metode cursor
dari kelas Connection
.
Atribut yang dipilih Cursor
meliputi yang berikut ini:
Atribut |
---|
arraysize Digunakan dengan fetchmany metode , menentukan ukuran buffer internal, yang juga berapa banyak baris yang benar-benar diambil dari server sekaligus. Nilai defaultnya adalah 10000 . Untuk hasil yang sempit (hasil di mana setiap baris tidak berisi banyak data), Anda harus meningkatkan nilai ini untuk performa yang lebih baik.Akses baca-tulis. |
description Terdiri dari list Python tuple objek. Masing-masing objek tuple ini berisi 7 nilai, dengan 2 item pertama dari setiap objek tuple yang berisikan informasi yang menggambarkan kolom hasil tunggal sebagai berikut:
Sisa 5 item dari setiap 7 item objek tuple tidak diimplementasikan, dan nilainya tidak ditentukan. Mereka biasanya akan dikembalikan sebagai 4None nilai diikuti oleh satu True nilai.Akses baca saja. |
Metode yang dipilih Cursor
meliputi yang berikut ini:
Metode |
---|
cancel Menghentikan pelaksanaan kueri atau perintah basis data apa pun yang telah dimulai oleh kursor. Untuk merilis sumber daya terkait di server, panggil close metode setelah memanggil metode cancel .Tidak ada parameter. Tidak ada nilai yang dikembalikan. |
close Menutup kursor dan merilis sumber daya terkait di server. Tindakan menutup kursor yang sudah tertutup dapat menampilkan kesalahan. Tidak ada parameter. Tidak ada nilai yang dikembalikan. |
execute Menyiapkan lalu menjalankan kueri atau perintah database. Tidak ada nilai yang dikembalikan. Parameter: operation Jenis: str Kueri atau perintah untuk menyiapkan lalu menjalankan. Parameter ini diperlukan. Contoh tanpa parameter parameters :cursor.execute( 'SELECT * FROM samples.nyctaxi.trips WHERE pickup_zip="10019" LIMIT 2' ) Contoh dengan parameter parameters :cursor.execute( 'SELECT * FROM samples.nyctaxi.trips WHERE zip=%(pickup_zip)s LIMIT 2', { 'pickup_zip': '10019' } ) parameters Jenis: kamus Urutan parameter yang akan digunakan dengan parameter operation .Parameter ini bersifat opsional. Default adalah None . |
executemany Menyiapkan dan kemudian menjalankan kueri atau perintah database dengan menggunakan semua urutan parameter dalam argumen seq_of_parameters . Hanya hasil akhir saja yang akan dipertahankan.Tidak ada nilai yang dikembalikan. Parameter: operation Jenis: str Kueri atau perintah yang disiapkan lalu kemudian dijalankan. Parameter ini diperlukan. seq_of_parameters Jenis: list dari dict Urutan beberapa himpunan nilai parameter yang akan digunakan dengan parameter operation .Parameter ini diperlukan. |
catalogs Jalankan kueri metadata tentang katalog. Hasil yang sebenarnya kemudian harus diambil dengan menggunakan fetchmany atau fetchall .Bidang yang penting dalam tataan hasil meliputi:
Tidak ada parameter. Tidak ada nilai yang dikembalikan. Sejak versi 1.0 |
schemas Jalankan kueri metadata tentang skema. Hasil yang sebenarnya kemudian harus diambil dengan menggunakan fetchmany atau fetchall .Bidang yang penting dalam tataan hasil meliputi:
Tidak ada nilai yang dikembalikan. Sejak versi 1.0 Parameter: catalog_name Jenis: str Nama katalog yang akan diambil informasinya. Karakter % diinterpretasikan sebagai pengganti.Parameter ini bersifat opsional. schema_name Jenis: str Nama skema yang akan diambil informasinya. Karakter % diinterpretasikan sebagai karakter kartubebas.Parameter ini bersifat opsional. |
tables Jalankan kueri metadata tentang tabel dan tampilan. Hasil yang sebenarnya kemudian harus diambil dengan menggunakan fetchmany atau fetchall .Bidang yang penting dalam tataan hasil meliputi:
Tidak ada nilai yang dikembalikan. Sejak versi 1.0 Parameter catalog_name Jenis: str Nama katalog yang akan diambil informasinya. Karakter % diinterpretasikan sebagai karakter pengganti.Parameter ini bersifat opsional. schema_name Jenis: str Nama skema yang akan diambil informasinya. Karakter % diartikan sebagai karakter pengganti.Parameter ini bersifat opsional. table_name Jenis: str Nama tabel yang akan diambil informasinya. Karakter % diinterpretasikan sebagai kartu bebas.Parameter ini bersifat opsional. table_types Jenis: List[str] Daftar jenis tabel yang cocok, misalnya TABLE atau VIEW .Parameter ini bersifat opsional. |
columns Jalankan kueri metadata tentang kolom. Hasil yang sebenarnya kemudian harus diambil dengan menggunakan fetchmany atau fetchall .Bidang yang penting dalam tataan hasil meliputi:
Tidak ada nilai yang dikembalikan. Sejak versi 1.0 Parameter: catalog_name Jenis: str Nama katalog yang akan diambil informasinya. Karakter % diinterpretasikan sebagai karakter pengganti.Parameter ini bersifat opsional. schema_name Jenis: str Nama skema yang akan diambil informasinya. Karakter % dianggap sebagai wildcard.Parameter ini bersifat opsional. table_name Jenis: str Nama tabel yang akan diambil informasinya. Karakter % diinterpretasikan sebagai kartu bebas.Parameter ini bersifat opsional. column_name Jenis: str Nama kolom yang akan diambil informasinya. Karakter % diinterpretasikan sebagai pengganti.Parameter ini bersifat opsional. |
fetchall Mendapatkan semua (atau seluruh sisa) baris kueri. Tidak ada parameter. Mengembalikan semua baris (atau semua yang tersisa) dari hasil kueri sebagai Python list Row Objek.Jika panggilan sebelumnya ke execute metode tidak mengembalikan data apa pun atau execute panggilan belum dilakukan, maka akan melemparkan Error . |
fetchmany Mendapatkan baris kueri berikutnya. Mengembalikan hingga size (atau atribut arraysize jika size tidak ditentukan) dari baris berikutnya dari sebuah kueri berupa objek Row Python.Jika ada lebih sedikit dari size baris yang tersisa untuk diambil, semua baris yang tersisa akan dikembalikan.Melemparkan pengecualian Error jika panggilan ke metode execute sebelumnya tidak mengembalikan data apa pun, atau jika belum ada panggilan ke execute yang dilakukan.Parameter: size Jenis: int Jumlah baris berikutnya yang akan didapatkan. Parameter ini bersifat opsional. Jika tidak ditentukan, nilai atribut arraysize digunakan.Contoh: cursor.fetchmany(10) |
fetchone Mendapatkan baris berikutnya dari himpunan data. Tidak ada parameter. Mengembalikan baris berikutnya dari himpunan data sebagai urutan tunggal dalam bentuk Python tuple objek, atau mengembalikan None jika tidak ada lagi data yang tersedia.Jika panggilan sebelumnya ke metode execute tidak mengembalikan data apa pun atau belum ada panggilan execute yang dilakukan, maka akan melemparkan Error . |
fetchall_arrow Mendapatkan semua (atau seluruh sisa) baris kueri, sebagai objek Table PyArrow. Kueri yang mengembalikan data dalam jumlah yang sangat besar harus digunakan fetchmany_arrow sebagai gantinya untuk mengurangi konsumsi memori.Tidak ada parameter. Mengembalikan semua (atau semua sisa) baris kueri sebagai tabel PyArrow. Error melemparkan pengecualian jika panggilan sebelumnya ke metode execute tidak mengembalikan data atau belum ada panggilan execute yang dilakukan.Sejak versi 2.0 |
fetchmany_arrow Memperoleh baris-baris berikutnya dari kueri sebagai objek PyArrow Table .Mengembalikan hingga size argumen (atau arraysize atribut jika size tidak ditentukan) dari baris kueri berikutnya sebagai Python PyArrowTable benda.Melemparkan Error jika panggilan sebelumnya ke metode execute tidak mengembalikan data apa pun atau belum ada panggilan execute yang dilakukan.Sejak versi 2.0 Parameter: size Jenis: int Jumlah baris berikutnya yang akan didapatkan. Parameter ini bersifat opsional. Jika tidak ditentukan, nilai atribut arraysize digunakan.Contoh: cursor.fetchmany_arrow(10) |
Row
kelas
Kelas baris adalah struktur data seperti tuple yang mewakili baris hasil individual.
Jika baris berisi kolom bernama "my_column"
, Anda dapat mengakses bidang "my_column"
row
melalui row.my_column
. Anda juga dapat menggunakan indeks numerik untuk mengakses bidang, misalnya row[0]
.
Jika nama kolom tidak diizinkan sebagai nama metode atribut (misalnya, nama dimulai dengan digit), Anda dapat mengakses bidang sebagai row["1_my_column"]
.
Sejak versi 1.0
Metode yang dipilih Row
meliputi:
| asDict
Mengembalikan bentuk kamus dari baris, yang diindeks berdasarkan nama bidang. Jika ada nama bidang duplikat, salah satu bidang duplikat (hanya satu saja) akan ditampilkan dalam kamus. Bidang duplikat mana yang dikembalikan tidak ditentukan.
Tidak ada parameter.
Mengembalikan dict
bidang. |
Konversi tipe atau jenis
Tabel berikut memetakan jenis data SQL Apache Spark ke jenis data Python yang setara.
Jenis data SQL Apache Spark | Jenis data Python |
---|---|
array |
numpy.ndarray |
bigint |
int |
binary |
bytearray |
boolean |
bool |
date |
datetime.date |
decimal |
decimal.Decimal |
double |
float |
int |
int |
map |
str |
null |
NoneType |
smallint |
int |
string |
str |
struct |
str |
timestamp |
datetime.datetime |
tinyint |
int |
Pemecahan Masalah
pesan tokenAuthWrapperInvalidAccessToken: Invalid access token
Masalah: Saat Anda menjalankan kode Anda, muncul pesan yang mirip dengan Error during request to server: tokenAuthWrapperInvalidAccessToken: Invalid access token
.
Kemungkinan penyebab: Nilai yang diteruskan ke access_token
bukanlah token akses pribadi Azure Databricks yang valid.
Saran perbaikan: Periksa apakah nilai yang diteruskan ke access_token
sudah benar dan coba lagi.
gaierror(8, 'nodename nor servname provided, or not known')
pesan
Masalah: Saat Anda menjalankan kode Anda, muncul pesan yang mirip dengan Error during request to server: gaierror(8, 'nodename nor servname provided, or not known')
.
Kemungkinan penyebab: Nilai yang diteruskan ke server_hostname
bukanlah nama host yang benar.
Saran perbaikan: Periksa apakah nilai yang diteruskan ke server_hostname
sudah benar dan coba lagi.
Untuk informasi selengkapnya tentang menemukan hostname server, lihat Mendapatkan detail koneksi untuk sumber daya komputasi Azure Databricks.
pesan IpAclError
Masalah: Saat menjalankan kode, Anda akan melihat pesan Error during request to server: IpAclValidation
saat mencoba menggunakan konektor di buku catatan Azure Databricks.
Kemungkinan penyebab: Anda mungkin telah mengaktifkan daftar IP yang diizinkan (IP allow listing) untuk ruang kerja Azure Databricks. Dengan daftar IP yang diizinkan, sambungan dari kluster Spark kembali ke lapisan kendali tidak diizinkan secara default.
Perbaikan yang disarankan: Minta administrator Anda untuk menambahkan subnet bidang komputasi ke daftar izin IP.
Sumber Daya Tambahan:
Untuk informasi selengkapnya, lihat:
- Konektor SQL Databricks untuk repositori Python di GitHub
- Jenis data
-
Jenis Bawaan (untuk
bool
,bytearray
,float
,int
, danstr
) di situs web Python -
tanggalwaktu (untuk
datetime.date
dandatatime.datetime
) di situs web Python -
desimal (untuk
decimal.Decimal
) di situs web Python -
Konstanta Bawaan (untuk
NoneType
) di situs web Python