Delen via


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-connectorom de lean-connector te installeren.
    • Als u de volledige connector wilt installeren, inclusief PyArrow-, gebruikt u pip install databricks-sql-connector[pyarrow].
  • Verzamel de volgende informatie voor het cluster of SQL Warehouse dat u wilt gebruiken:

    groepering

    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:

De Databricks SQL Connector voor Python biedt nog geen ondersteuning voor de volgende Azure Databricks-verificatietypen:

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_HOSTNAMEingesteld 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:

  1. 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.

  2. 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:

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_hostnamewaarden en http_pathaccess_tokenverbindingsvariabelen 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

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, UPDATEen 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:
  • name: de naam van de kolom.
  • type_code: een tekenreeks die het type kolom aangeeft. Een kolom met een geheel getal heeft bijvoorbeeld een typecode van int.

De overige vijf items van elk 7-itemobject tuple worden niet geïmplementeerd en hun waarden worden niet gedefinieerd. Ze worden meestal geretourneerd als 4
None 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:
  • Veldnaam: TABLE_CAT. Type: str. De naam van de catalogus.

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:
  • Veldnaam: TABLE_SCHEM. Type: str. De naam van het schema.
  • Veldnaam: TABLE_CATALOG. Type: str. De catalogus waartoe het schema behoort.

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:
  • Veldnaam: TABLE_CAT. Type: str. De catalogus waartoe de tabel behoort.
  • Veldnaam: TABLE_SCHEM. Type: str. Het schema waartoe de tabel behoort.
  • Veldnaam: TABLE_NAME. Type: str. De naam van de tabel.
  • Veldnaam: TABLE_TYPE. Type: str. Het soort relatie, bijvoorbeeld VIEW of TABLE (van toepassing op Databricks Runtime 10.4 LTS en hoger, evenals op Databricks SQL; eerdere versies van Databricks Runtime retourneren een lege tekenreeks).

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:
  • Veldnaam: TABLE_CAT. Type: str. De catalogus waartoe de kolom behoort.
  • Veldnaam: TABLE_SCHEM. Type: str. Het schema waartoe de kolom behoort.
  • Veldnaam: TABLE_NAME. Type: str. De naam van de tabel waartoe de kolom behoort.
  • Veldnaam: COLUMN_NAME. Type: str. De naam van de kolom.

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 van
Row 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: