Databricks SQL Connector voor Python
De Databricks SQL Connector voor Python is een Python-bibliotheek waarmee u Python-code kunt gebruiken om SQL-opdrachten uit te voeren op Azure Databricks-clusters en Databricks SQL-warehouses. De Databricks SQL Connector voor Python is eenvoudiger in te stellen en te gebruiken dan vergelijkbare Python-bibliotheken, zoals pyodbc. Deze bibliotheek volgt PEP 249 – Python Database API Specification v2.0.
Notitie
De Databricks SQL Connector voor Python ondersteunt ook de SQLAlchemy dialect voor Azure Databricks, maar deze moet worden geïnstalleerd om deze functies te kunnen gebruiken. Zie SQLAlchemy gebruiken met Azure Databricks.
Vereisten
- Een ontwikkelcomputer met Python >=3.8 en <=3.11.
- Databricks raadt u aan om virtuele Python-omgevingen te gebruiken, zoals die worden geleverd door venv die zijn opgenomen in Python. Virtuele omgevingen helpen ervoor te zorgen dat u de juiste versies van Python en de Databricks SQL Connector voor Python samen gebruikt. Het instellen en gebruiken van virtuele omgevingen valt buiten het bereik van dit artikel. Zie Virtuele omgevingen maken voor meer informatie.
- Een bestaand cluster of SQL-magazijn.
Aan de slag
Installeer de Databricks SQL Connector voor Python. PyArrow- is een optionele afhankelijkheid van Databricks SQL Connector voor Python en is niet standaard geïnstalleerd. Als u PyArrow niet installeert, zijn functies zoals CloudFetch en andere Apache Arrow-functionaliteit niet beschikbaar. Dit kan van invloed zijn op de prestaties voor grote hoeveelheden gegevens.
- Gebruik
pip install databricks-sql-connector
om de lean-connector te installeren. - Als u de volledige connector wilt installeren, inclusief PyArrow-, gebruikt u
pip install databricks-sql-connector[pyarrow]
.
- Gebruik
Verzamel de volgende informatie voor het cluster of SQL Warehouse dat u wilt gebruiken:
groepering
- De hostnaam van de server van het cluster. U kunt deze ophalen uit de serverhostnaamwaarde op het tabblad Geavanceerde opties > JDBC/ODBC voor uw cluster.
- Het HTTP-pad van het cluster. U kunt dit verkrijgen uit de waarde van het HTTP Path in het tabblad Geavanceerde opties > JDBC/ODBC voor uw cluster.
SQL Warehouse
- De hostnaam van de server van het SQL-warehouse. U kunt deze ophalen uit de serverhostnaamwaarde op het tabblad Verbindingsgegevens voor uw SQL-warehouse.
- Het HTTP-pad van het SQL-warehouse. U kunt dit ophalen uit de waarde van het HTTP-pad op het tabblad Verbindingsgegevens voor uw SQL-warehouse.
Verificatie
De Databricks SQL Connector voor Python ondersteunt de volgende Azure Databricks-verificatietypen:
- Verificatie van persoonlijke toegangstokens van Databricks
- Verificatie van Microsoft Entra-id-token
- OAuth-verificatie van machine-naar-machine (M2M)
- OAuth-verificatie van gebruiker naar machine (U2M)
De Databricks SQL Connector voor Python biedt nog geen ondersteuning voor de volgende Azure Databricks-verificatietypen:
- Verificatie van door Azure beheerde identiteiten
- Authenticatie van MS Entra-service-principal
- Azure CLI-authenticatie
Verificatie van persoonlijke toegangstokens van Databricks
Als u de Databricks SQL Connector voor Python wilt gebruiken met persoonlijke toegangstokenverificatie van Azure Databricks, moet u eerst een persoonlijk azure Databricks-toegangstoken maken. Volg hiervoor de stappen in Azure Databricks persoonlijke toegangstokens voor werkruimtegebruikers.
Gebruik het volgende codefragment om de Databricks SQL Connector voor Python te verifiëren. In dit fragment wordt ervan uitgegaan dat u de volgende omgevingsvariabelen hebt ingesteld:
-
DATABRICKS_SERVER_HOSTNAME
ingesteld op de serverhostnaamwaarde voor uw cluster of SQL Warehouse. -
DATABRICKS_HTTP_PATH
, ingesteld op HTTP-padwaarde voor uw cluster of SQL Warehouse. -
DATABRICKS_TOKEN
, ingesteld op het persoonlijke toegangstoken van Azure Databricks.
Als u omgevingsvariabelen wilt instellen, raadpleegt u de documentatie van uw besturingssysteem.
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:
# ...
OAuth-verificatie van machine-naar-machine (M2M)
Databricks SQL Connector voor Python-versies 2.7.0 en hoger ondersteunen OAuth-verificatie van machine-naar-machine (M2M). U moet ook de Databricks SDK voor Python 0.18.0 of hoger installeren (bijvoorbeeld door uit te voeren pip install databricks-sdk
of python -m pip install databricks-sdk
).
Als u de Databricks SQL Connector voor Python wilt gebruiken met OAuth M2M-verificatie, moet u het volgende doen:
Maak een Azure Databricks-service-principal in uw Azure Databricks-werkruimte en maak een OAuth-geheim voor die service-principal.
Zie Autoriseer ongecontroleerde toegang tot Azure Databricks-resources met een service-principal en OAuth om de service-principal en zijn OAuth-geheim te maken. Noteer de UUID- of toepassings-id van de service-principal en de geheime waarde voor het OAuth-geheim van de service-principal.
Geef die service-principal toegang tot uw cluster of magazijn.
Zie Compute-machtigingen of Beheer een SQL-warehouse om de service-principal toegang te geven tot uw cluster of magazijn.
Gebruik het volgende codefragment om de Databricks SQL Connector voor Python te verifiëren. In dit fragment wordt ervan uitgegaan dat u de volgende omgevingsvariabelen hebt ingesteld:
-
DATABRICKS_SERVER_HOSTNAME
ingesteld op de serverhostnaamwaarde voor uw cluster of SQL Warehouse. -
DATABRICKS_HTTP_PATH
, ingesteld op HTTP-padwaarde voor uw cluster of SQL Warehouse. -
DATABRICKS_CLIENT_ID
, ingesteld op de UUID of toepassings-id van de service-principal. -
DATABRICKS_CLIENT_SECRET
, ingesteld op de geheime waarde voor het OAuth-geheim van de service-principal.
Als u omgevingsvariabelen wilt instellen, raadpleegt u de documentatie van uw besturingssysteem.
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:
# ...
Verificatie van Microsoft Entra-id-token
Als u de Databricks SQL Connector voor Python wilt gebruiken met Microsoft Entra ID-tokenverificatie, moet u de Databricks SQL Connector voor Python opgeven met het Microsoft Entra ID-token. Ga als volgt te werk om een Microsoft Entra ID-toegangstoken te maken:
- Voor een Azure Databricks-gebruiker kunt u de Azure CLI gebruiken. Zie Microsoft Entra ID-tokens ophalen voor gebruikers met behulp van de Azure CLI.
- Zie Een Microsoft Entra ID-toegangstoken ophalen met de Azure CLI voor een Microsoft Entra ID service-principal. Zie Service-principals beheren om een service-principal te maken die wordt beheerd door Microsoft Entra ID.
Microsoft Entra ID-tokens hebben een standaardlevensduur van ongeveer 1 uur. Herhaal dit proces om een nieuw Microsoft Entra ID-token te maken.
Gebruik het volgende codefragment om de Databricks SQL Connector voor Python te verifiëren. In dit fragment wordt ervan uitgegaan dat u de volgende omgevingsvariabelen hebt ingesteld:
- Stel
DATABRICKS_SERVER_HOSTNAME
in op de Serverhostnaam voor uw cluster of SQL Warehouse. - Stel
DATABRICKS_HTTP_PATH
in op de waarde voor HTTP-pad voor uw cluster of SQL-warehouse. - Stel
DATABRICKS_TOKEN
in op het Microsoft Entra ID-token.
Als u omgevingsvariabelen wilt instellen, raadpleegt u de documentatie van uw besturingssysteem.
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:
# ...
OAuth-verificatie van gebruiker naar machine (U2M)
Databricks SQL Connector voor Python-versies 2.7.0 en hoger bieden ondersteuning voor OAuth-gebruikers-naar-machine-verificatie (U2M). U moet ook de Databricks SDK voor Python 0.19.0 of hoger installeren (bijvoorbeeld door uit te voeren pip install databricks-sdk
of python -m pip install databricks-sdk
).
Gebruik het volgende codefragment om de Databricks SQL Connector voor Python te verifiëren met OAuth U2M-verificatie. OAuth U2M-verificatie maakt gebruik van realtime menselijke aanmelding en toestemming om het Azure Databricks-doelgebruikersaccount te verifiëren. In dit fragment wordt ervan uitgegaan dat u de volgende omgevingsvariabelen hebt ingesteld:
- Stel
DATABRICKS_SERVER_HOSTNAME
in op de waarde Server Hostname voor uw cluster of SQL-warehouse. - Stel
DATABRICKS_HTTP_PATH
in op de HTTP-pad waarde voor uw cluster of SQL Warehouse.
Als u omgevingsvariabelen wilt instellen, raadpleegt u de documentatie van uw besturingssysteem.
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:
# ...
Voorbeelden
In de volgende codevoorbeelden ziet u hoe u de Databricks SQL Connector voor Python gebruikt om gegevens op te vragen en in te voegen, metagegevens op te vragen, cursors en verbindingen te beheren en logboekregistratie te configureren.
Notitie
In de volgende codevoorbeelden ziet u hoe u een persoonlijk toegangstoken van Azure Databricks gebruikt voor verificatie. Als u in plaats daarvan andere beschikbare Azure Databricks-verificatietypen wilt gebruiken, raadpleegt u Verificatie.
In dit codevoorbeeld worden de server_hostname
waarden en http_path
access_token
verbindingsvariabelen opgehaald uit deze omgevingsvariabelen:
-
DATABRICKS_SERVER_HOSTNAME
, die de serverhostnaamwaarde van de vereisten vertegenwoordigt. -
DATABRICKS_HTTP_PATH
, die de HTTP-padwaarde van de vereisten vertegenwoordigt. -
DATABRICKS_TOKEN
, dat uw toegangstoken aangeeft op basis van de vereisten.
U kunt andere methoden gebruiken om deze verbindingsvariabelewaarden op te halen. Het gebruik van omgevingsvariabelen is slechts één benadering tussen veel.
- User-Agent instellen
- Gegevens opvragen
- Gegevens invoegen
- Querymetagegevens
- Cursors en verbindingen beheren
- Bestanden beheren in Unity Catalog-volumes
- Logboekregistratie configureren
User-Agent instellen
In het volgende codevoorbeeld ziet u hoe u de User-Agent-toepassing instelt product_name
voor het bijhouden van gebruik.
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)
Gegevens opvragen
In het volgende codevoorbeeld ziet u hoe u de Databricks SQL Connector voor Python aanroept om een eenvoudige SQL-opdracht uit te voeren op een cluster of SQL Warehouse. Met deze opdracht worden de eerste twee rijen uit de trips
tabel in het nyctaxi
schema van de samples
catalogus geretourneerd.
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)
Gegevens invoegen
In het volgende voorbeeld ziet u hoe u kleine hoeveelheden gegevens invoegt (duizenden rijen):
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)
Voor grote hoeveelheden gegevens moet u eerst de gegevens uploaden naar cloudopslag en vervolgens de opdracht COPY INTO uitvoeren.
Metagegevens opvragen
Er zijn speciale methoden voor het ophalen van metagegevens. In het volgende voorbeeld worden metagegevens opgehaald over kolommen in een voorbeeldtabel:
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())
Cursors en verbindingen beheren
Het is een best practice om verbindingen en cursors te sluiten die niet meer in gebruik zijn. Hiermee worden resources op Azure Databricks-clusters en Databricks SQL-warehouses vrijgemaakt.
U kunt een contextbeheer (de with
syntaxis die in eerdere voorbeelden wordt gebruikt) gebruiken om de resources te beheren of expliciet aanroepen 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()
Bestanden beheren in Unity Catalog-volumes
Met de Databricks SQL Connector kunt u lokale bestanden schrijven naar Unity Catalog-volumes, bestanden downloaden van volumes en bestanden verwijderen uit volumes, zoals wordt weergegeven in het volgende voorbeeld:
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'"
)
Logboekregistratie configureren
De Databricks SQL Connector maakt gebruik van de standaardmodule voor logboekregistratie van Python. U kunt het logboekregistratieniveau configureren dat vergelijkbaar is met het volgende:
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()
Testen
Als u uw code wilt testen, gebruikt u Python-testframeworks zoals pytest. Als u uw code wilt testen onder gesimuleerde omstandigheden zonder Azure Databricks REST API-eindpunten aan te roepen of de status van uw Azure Databricks-accounts of -werkruimten te wijzigen, kunt u Python-mockbibliotheken zoals unittest.mock gebruiken.
Gegeven het volgende bestand met de naam helpers.py
dat een get_connection_personal_access_token
-functie bevat die gebruikmaakt van een persoonlijk toegangstoken van Azure Databricks om een verbinding met een Azure Databricks-werkruimte te retourneren, en een select_nyctaxi_trips
-functie die de verbinding gebruikt om het opgegeven aantal gegevensrijen uit de trips
-tabel in het schema van de nyctaxi
-catalogus van samples
op te halen:
# 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
En gezien het volgende bestand met de naam main.py
die de get_connection_personal_access_token
en select_nyctaxi_trips
functies aanroept:
# 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)
Het volgende bestand met de naam test_helpers.py
test of de select_nyctaxi_trips
functie het verwachte antwoord retourneert. In plaats van een echte verbinding met de doelwerkruimte te maken, wordt met deze test een Connection
object gesimuleerd. Met de test worden ook enkele gegevens gesimuleerd die voldoen aan het schema en de waarden die zich in de echte gegevens bevinden. De test retourneert de gesimuleerde gegevens via de gesimuleerde verbinding en controleert vervolgens of een van de gesimuleerde gegevensrijen overeenkomt met de verwachte waarde.
# 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
Omdat de select_nyctaxi_trips
functie een SELECT
instructie bevat en daarom de status van de trips
tabel niet wijzigt, is mocking niet absoluut vereist in dit voorbeeld. Met mocking kunt u uw tests echter snel uitvoeren zonder te wachten tot er een werkelijke verbinding met de werkruimte is gemaakt. Met mocking kunt u ook meerdere keren gesimuleerde tests uitvoeren voor functies die de status van een tabel kunnen wijzigen, zoals INSERT INTO
, UPDATE
en DELETE FROM
.
API-verwijzing
Pakket
databricks-sql-connector
Gebruik: pip install databricks-sql-connector
Zie ook databricks-sql-connector in de Python Package Index (PyPI).
Module
databricks.sql
Gebruik: from databricks import sql
Klassen
Geselecteerde klassen omvatten het volgende:
Klassen |
---|
Connection Een sessie op een Azure Databricks-rekenresource. |
Cursor Een mechanisme voor het doorkruisen van gegevensrecords. |
Row Een rij met gegevens in een SQL-queryresultaat. |
Connection
klas
Als u een Connection
object wilt maken, roept u de databricks.sql.connect
methode aan met de volgende parameters:
Parameters |
---|
server_hostname Type: str De serverhostnaam voor het cluster of SQL Warehouse. Zie de instructies eerder in dit artikel om de hostnaam van de server op te halen. Deze parameter is vereist. Voorbeeld: adb-1234567890123456.7.azuredatabricks.net |
http_path Type: str Het HTTP-pad van het cluster of SQL Warehouse. Raadpleeg de eerdere instructies in dit artikel om het HTTP-pad op te halen. Deze parameter is vereist. Voorbeeld: sql/protocolv1/o/1234567890123456/1234-567890-test123 voor een cluster./sql/1.0/warehouses/a1b234c567d8e9fa voor een SQL Warehouse. |
access_token , auth_type Type: str Informatie over azure Databricks-verificatie-instellingen. Zie Verificatie voor meer informatie. |
session_configuration Type: dict[str, Any] Een woordenlijst met spark-sessieconfiguratieparameters. Het instellen van een configuratie is gelijk aan het gebruik van de SET key=val SQL-opdracht. Voer de SQL-opdracht SET -v uit om een volledige lijst met beschikbare configuraties op te halen.Standaard ingesteld op None .Deze parameter is optioneel. Voorbeeld: {"spark.sql.variable.substitute": True} |
http_headers Typ: List[Tuple[str, str]]] Aanvullende paren (sleutel, waarde) die moeten worden ingesteld in HTTP-headers op elke RPC-aanvraag die de client doet. Normaal gesproken worden er geen extra HTTP-headers ingesteld. Standaard ingesteld op None .Deze parameter is optioneel. Sinds versie 2.0 |
catalog Type: str De eerste catalogus die moet worden gebruikt voor de verbinding. Standaard is None (waarbij in dat geval de standaardcatalogus, meestal hive_metastore , wordt gebruikt).Deze parameter is optioneel. Sinds versie 2.0 |
schema Type: str Het eerste schema dat moet worden gebruikt voor de verbinding. Wordt standaard ingesteld op None (in dat geval wordt het standaardschema default gebruikt).Deze parameter is optioneel. Sinds versie 2.0 |
use_cloud_fetch Typ: bool True om ophaalaanvragen rechtstreeks naar het cloudobjectarchief te verzenden om segmenten met gegevens te downloaden.
False (de standaardinstelling) om aanvragen voor ophalen rechtstreeks naar Azure Databricks te verzenden.Als use_cloud_fetch is ingesteld op True , maar netwerktoegang wordt geblokkeerd, zullen de ophaalaanvragen mislukken.Sinds versie 2.8 |
Geselecteerde Connection
methoden omvatten het volgende:
Methoden |
---|
close Hiermee sluit u de verbinding met de database en worden alle gekoppelde resources op de server vrijgegeven. Eventuele extra aanroepen naar deze verbinding leiden tot een Error .Geen parameters. Geen retourwaarde. |
cursor Geeft een nieuw Cursor object terug dat navigatie door de records in een database mogelijk maakt.Geen parameters. |
Cursor
klas
Als u een Cursor
object wilt maken, roept u de methode van Connection
de cursor
klasse aan.
Geselecteerde Cursor
kenmerken omvatten het volgende:
Kenmerken |
---|
arraysize Wordt gebruikt met de fetchmany methode, geeft de interne buffergrootte op, wat ook het aantal rijen dat daadwerkelijk van de server tegelijk wordt opgehaald. De standaardwaarde is 10000 . Voor smalle resultaten (resultaten waarin elke rij niet veel gegevens bevat), moet u deze waarde verhogen voor betere prestaties.Lees-schrijftoegang. |
description Bevat een Python list met tuple objecten. Elk van deze tuple objecten bevat 7 waarden, waarbij de eerste twee items van elk tuple object informatie over één resultaatkolom als volgt beschrijft:
De overige vijf items van elk 7-itemobject tuple worden niet geïmplementeerd en hun waarden worden niet gedefinieerd. Ze worden meestal geretourneerd als 4None waarden gevolgd door één True waarde.Alleen-lezentoegang. |
Geselecteerde Cursor
methoden omvatten het volgende:
Methoden |
---|
cancel Onderbreekt het uitvoeren van een databasequery of opdracht die door de cursor is gestart. Als u de gekoppelde resources op de server wilt vrijgeven, roept u de close methode na het aanroepen van de cancel methode.Geen parameters. Geen retourwaarde. |
close Hiermee sluit u de cursor en worden de bijbehorende resources op de server vrijgegeven. Als u een al gesloten cursor sluit, kan er een fout optreden. Geen parameters. Geen retourwaarde. |
execute Bereidt een databasequery of opdracht voor en voert deze vervolgens uit. Geen retourwaarde. Parameters: operation Typ: str De query of opdracht om voor te bereiden en vervolgens uit te voeren. Deze parameter is vereist. Voorbeeld zonder de parameters parameter:cursor.execute( 'SELECT * FROM samples.nyctaxi.trips WHERE pickup_zip="10019" LIMIT 2' ) Voorbeeld met de parameters parameter:cursor.execute( 'SELECT * FROM samples.nyctaxi.trips WHERE zip=%(pickup_zip)s LIMIT 2', { 'pickup_zip': '10019' } ) parameters Type: woordenlijst Een reeks parameters die moeten worden gebruikt met de operation parameter.Deze parameter is optioneel. De standaardwaarde is None . |
executemany Bereidt en voert vervolgens een databasequery of opdracht uit met behulp van alle parameterreeksen in het seq_of_parameters argument. Alleen de uiteindelijke resultatenset wordt bewaard.Geen retourwaarde. Parameters: operation Type: str De query of opdracht om voor te bereiden en vervolgens uit te voeren. Deze parameter is vereist. seq_of_parameters Type: list van dict Een reeks van veel parameterwaarden die gebruikt moeten worden met de operation parameter.Deze parameter is vereist. |
catalogs Voer een metagegevensquery uit over de catalogi. De werkelijke resultaten moeten vervolgens worden opgehaald met fetchmany of fetchall .Belangrijke velden in de resultatenset zijn onder andere:
Geen parameters. Geen retourwaarde. Sinds versie 1.0 |
schemas Voer een metagegevensquery uit over de schema's. De werkelijke resultaten moeten vervolgens worden opgehaald met behulp van fetchmany of fetchall .Belangrijke velden in de resultatenset zijn onder andere:
Geen retourwaarde. Sinds versie 1.0 Parameters: catalog_name Type: str Een catalogusnaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. schema_name Type: str Een schemanaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. |
tables Voer een metagegevensquery uit over tabellen en weergaven. De werkelijke resultaten moeten vervolgens worden opgehaald met fetchmany of fetchall .Belangrijke velden in de resultatenset zijn onder andere:
Geen retourwaarde. Sinds versie 1.0 Parameters catalog_name Type: str Een catalogusnaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. schema_name Type: str Een schemanaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. table_name Type: str Een tabelnaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. table_types Typ: List[str] Een lijst met tabeltypen die overeenkomen, bijvoorbeeld TABLE of VIEW .Deze parameter is optioneel. |
columns Voer een metagegevensquery uit over de kolommen. De werkelijke resultaten moeten vervolgens worden opgehaald met fetchmany of fetchall .Belangrijke velden in de resultatenset zijn onder andere:
Geen retourwaarde. Sinds versie 1.0 Parameters: catalog_name Typ: str Een catalogusnaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. schema_name Type: str Een schemanaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. table_name Type: str Een tabelnaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. column_name Typ: str Een kolomnaam voor het ophalen van informatie over. Het % teken wordt geïnterpreteerd als een jokerteken.Deze parameter is optioneel. |
fetchall Hiermee haalt u alle (of alle resterende) rijen van een query op. Geen parameters. Retourneert alle (of alle resterende) rijen van de query als python list vanRow Objecten.Genereert een Error als de vorige aanroep naar de execute methode geen gegevens heeft geretourneerd of er nog geen execute aanroep is gedaan. |
fetchmany Hiermee haalt u de volgende rijen van een query op. Retourneert maximaal size (of het arraysize kenmerk als size niet is opgegeven) van de volgende rijen van een query als een Python list met Row objecten.Als er minder rijen size over zijn om op te halen, worden alle resterende rijen geretourneerd.Genereert een Error als de vorige aanroep naar de execute methode geen gegevens heeft geretourneerd of er nog geen execute aanroep is gedaan.Parameters: size Type: int Het aantal volgende rijen dat moet worden opgehaald. Deze parameter is optioneel. Als dit niet is opgegeven, wordt de waarde van het arraysize kenmerk gebruikt.Voorbeeld: cursor.fetchmany(10) |
fetchone Hiermee haalt u de volgende rij van de gegevensset op. Geen parameters. Retourneert de volgende rij van de gegevensset als één reeks als python tuple object of retourneert None als er geen gegevens meer beschikbaar zijn.Genereert een Error als de vorige aanroep naar de execute methode geen gegevens heeft geretourneerd of er nog geen execute aanroep is gedaan. |
fetchall_arrow Hiermee worden alle (of alle resterende) rijen van een query opgehaald als een PyArrow-object Table . Query's die zeer grote hoeveelheden gegevens retourneren, moeten in plaats daarvan worden gebruikt fetchmany_arrow om het geheugenverbruik te verminderen.Geen parameters. Retourneert alle (of alle resterende) rijen van de query als een PyArrow-tabel. Genereert een Error als de vorige aanroep naar de execute methode geen gegevens heeft geretourneerd of er nog geen execute aanroep is gedaan.Sinds versie 2.0 |
fetchmany_arrow Hiermee haalt u de volgende rijen van een query op als een PyArrow-object Table .Retourneert tot het size -argument (of het arraysize -kenmerk als size niet is opgegeven) van de volgende rijen van een query als een Python PyArrow.Table object.Genereert een Error als de vorige aanroep naar de execute methode geen gegevens heeft geretourneerd of er nog geen execute aanroep is gedaan.Sinds versie 2.0 Parameters: size Typ: int Het aantal volgende rijen om op te halen. Deze parameter is optioneel. Als dit niet is opgegeven, wordt de waarde van het arraysize kenmerk gebruikt.Voorbeeld: cursor.fetchmany_arrow(10) |
Row
klas
De regelklasse is een tuple-achtige gegevensstructuur die een individuele resultaatrij vertegenwoordigt.
Als de rij een kolom met de naam "my_column"
bevat, kunt u het "my_column"
veld row
openen via row.my_column
. U kunt ook numerieke indicies gebruiken om bijvoorbeeld row[0]
toegang te krijgen tot velden.
Als de kolomnaam niet is toegestaan als de naam van een kenmerkmethode (bijvoorbeeld begint met een cijfer), hebt u toegang tot het veld als row["1_my_column"]
.
Sinds versie 1.0
Geselecteerde Row
methoden zijn onder andere:
| asDict
Retourneert een woordenlijstweergave van de rij, die wordt geïndexeerd op veldnamen. Als er dubbele veldnamen zijn, wordt een van de dubbele velden (maar slechts één) geretourneerd in de woordenlijst. Welk duplicaatveld wordt geretourneerd, is niet gedefinieerd.
Geen parameters.
Retourneert een dict
van velden. |
Typeconversies
De volgende tabel wijst Apache Spark SQL-gegevenstypen toe aan hun Python-gegevenstype-equivalenten.
Apache Spark SQL-gegevenstype | Python-gegevenstype |
---|---|
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 |
Probleemoplossing
tokenAuthWrapperInvalidAccessToken: Invalid access token
Bericht
Probleem: wanneer u uw code uitvoert, ziet u een bericht dat lijkt op Error during request to server: tokenAuthWrapperInvalidAccessToken: Invalid access token
.
Mogelijke oorzaak: De waarde die aan access_token
is overgedragen, is geen geldig persoonlijk toegangstoken van Azure Databricks.
Aanbevolen oplossing: controleer of de waarde die is access_token
doorgegeven juist is en probeer het opnieuw.
gaierror(8, 'nodename nor servname provided, or not known')
Bericht
Probleem: wanneer u uw code uitvoert, ziet u een bericht dat lijkt op Error during request to server: gaierror(8, 'nodename nor servname provided, or not known')
.
Mogelijke oorzaak: de doorgegeven server_hostname
waarde is niet de juiste hostnaam.
Aanbevolen oplossing: controleer of de waarde die is server_hostname
doorgegeven juist is en probeer het opnieuw.
Zie Verbindingsgegevens ophalen voor een Azure Databricks-rekenresource voor meer informatie over het vinden van de hostnaam van de server.
IpAclError
Bericht
Probleem: wanneer u uw code uitvoert, ziet u het bericht Error during request to server: IpAclValidation
wanneer u de connector probeert te gebruiken in een Azure Databricks-notebook.
Mogelijke oorzaak: er is mogelijk ip-acceptatie ingeschakeld voor de Azure Databricks-werkruimte. Bij gebruik van IP-allowlisting zijn verbindingen van Spark-clusters terug naar het controlevlak niet standaard toegestaan.
Aanbevolen oplossing: vraag de beheerder om het subnet van het rekenvlak toe te voegen aan de acceptatielijst voor IP-adressen.
Aanvullende bronnen
Zie voor meer informatie:
- De Databricks SQL Connector voor Python-repository op GitHub
- Datatypen
-
Ingebouwde typen (voor
bool
,bytearray
,float
, enint
str
) op de Python-website -
datum/tijd (voor
datetime.date
endatatime.datetime
) op de Python-website -
decimaal (voor
decimal.Decimal
) op de Python-website -
Ingebouwde constanten (voor
NoneType
) op de Python-website