Megosztás a következőn keresztül:


Databricks SQL-összekötő Pythonhoz

A Databricks SQL Connector for Python egy Python-kódtár, amely lehetővé teszi, hogy Python-kód használatával SQL-parancsokat futtasson az Azure Databricks-fürtökön és a Databricks SQL-tárolókon. A Pythonhoz készült Databricks SQL-összekötőt egyszerűbb beállítani és használni, mint a hasonló Python-kódtárakat, például a pyodbc-t. Ez a kódtár a PEP 249 – Python Database API Specification 2.0-s verziót követi.

Feljegyzés

A Pythonhoz készült Databricks SQL-összekötő támogatja az Azure Databricks SQLAlchemy dialektusát is, de a funkciók használatához telepíteni kell. Lásd: Az SQLAlchemy használata az Azure Databricksben.

Követelmények

  • Python >=3.8 és <=3.11 rendszerű fejlesztőgép.
  • A Databricks azt javasolja, hogy pythonos virtuális környezeteket használjon, például a Python részét képező venv által biztosítottakat. A virtuális környezetek segítségével biztosítható, hogy a Python és a Databricks SQL Connector for Python megfelelő verzióit használja együtt. A virtuális környezetek beállítása és használata a jelen cikk hatókörén kívül esik. További információ: Virtuális környezetek létrehozása.
  • Meglévő fürt vagy SQL adattárház.

Első lépések

  • Telepítse a Pythonhoz készült Databricks SQL-összekötőt. PyArrow a Pythonhoz készült Databricks SQL-összekötő opcionális függősége, és alapértelmezés szerint nincs telepítve. Ha nem telepíti a PyArrow-t, az olyan funkciók, mint a CloudFetch és más Apache Arrow-funkciók nem érhetők el, ami befolyásolhatja a nagy mennyiségű adat teljesítményét.

    • A lean csatlakozó telepítéséhez használja a pip install databricks-sql-connector.
    • A teljes csatlakozó telepítéséhez, beleértve a PyArrow-t, használja a pip install databricks-sql-connector[pyarrow]-t.
  • Gyűjtse össze a használni kívánt fürtre vagy SQL Warehouse-ra vonatkozó alábbi információkat:

    Klászter

    • A fürt szerver hosztneve. Ezt a szerver hosztnév értéket a fürtje Speciális beállítások JDBC/ODBC lapján találja meg.
    • A fürt HTTP-útvonala. A fürt Speciális beállítások fülén a JDBC/ODBC opcióknál található HTTP elérési út értékkel szerezheti be.

    SQL Warehouse

Hitelesítés

A Pythonhoz készült Databricks SQL-összekötő a következő Azure Databricks-hitelesítési típusokat támogatja:

A Pythonhoz készült Databricks SQL-összekötő még nem támogatja a következő Azure Databricks-hitelesítési típusokat:

Databricks személyes hozzáférési jogkivonat hitelesítése

Ha a Databricks SQL Connector for Pythont azure Databricks személyes hozzáférési jogkivonat-hitelesítéssel szeretné használni, először létre kell hoznia egy Azure Databricks személyes hozzáférési jogkivonatot. Ehhez kövesse az Azure Databricks személyes hozzáférési jogkivonatai a munkaterület felhasználói számára útmutatásait.

A Pythonhoz készült Databricks SQL-összekötő hitelesítéséhez használja az alábbi kódrészletet. Ez a kódrészlet feltételezi, hogy a következő környezeti változókat állította be:

  • DATABRICKS_SERVER_HOSTNAMEállítsa be a fürt vagy az SQL Warehouse kiszolgálói hosztnév értékére.
  • DATABRICKS_HTTP_PATH, állítsa be a HTTP-elérési út értékét a klaszteréhez vagy az SQL raktárához.
  • DATABRICKS_TOKEN beállítása az Azure Databricks személyes hozzáférési tokenre.

A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.

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 gép-gép közötti (M2M) hitelesítés

A Databricks SQL Connector for Python 2.7.0-s és újabb verziói támogatják az OAuth machine-to-machine (M2M) hitelesítést. A Databricks SDK for Python 0.18.0 vagy újabb verzióját is telepítenie kell (például a pip install databricks-sdk vagy a python -m pip install databricks-sdk futtatásával).

A Databricks SQL Connector for Python OAuth M2M-hitelesítéssel való használatához a következőket kell tennie:

  1. Hozzon létre egy Azure Databricks-szolgáltatásnevet az Azure Databricks-munkaterületen, és hozzon létre egy OAuth-titkos kulcsot a szolgáltatásnévhez.

    A szolgáltatásnév és az OAuth-titkos kód létrehozásához lásd: Felügyelet nélküli hozzáférés engedélyezése az Azure Databricks-erőforrásokhoz egy szolgáltatásnévvel az OAuthhasználatával. Jegyezze fel a szolgáltatásnév UUID - vagy alkalmazásazonosító-értékét , valamint a szolgáltatásnév OAuth-titkos kódjának titkos értékét.

  2. Adjon hozzáférést a szolgáltatásnévnek a fürthöz vagy a raktárhoz.

    Ha a szolgáltatásazonosítónak szeretne hozzáférést adni a klaszteréhez vagy raktárához, tekintse meg a Számítási engedélyek vagy SQL-raktár kezelése című részt.

A Pythonhoz készült Databricks SQL-összekötő hitelesítéséhez használja az alábbi kódrészletet. Ez a kódrészlet feltételezi, hogy a következő környezeti változókat állította be:

  • DATABRICKS_SERVER_HOSTNAME elemet a fürt vagy az SQL Warehouse kiszolgálói állomásnév értékére állítja.
  • DATABRICKS_HTTP_PATH, állítsa be a HTTP-elérési út értékét a fürthöz vagy SQL-raktárhoz.
  • DATABRICKS_CLIENT_ID, állítsa be a szolgáltatásfő UUID-jára vagy alkalmazásazonosítójának értékére.
  • DATABRICKS_CLIENT_SECRET, állítsa be a szolgáltatásfelelős OAuth titkos kódjának 'Secret' értékét.

A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.

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

Microsoft Entra azonosító token hitelesítése

Ha a Databricks SQL Connector for Pythont Microsoft Entra ID-jogkivonat-hitelesítéssel szeretné használni, meg kell adnia a Databricks SQL Connector for Pythonnak a Microsoft Entra ID tokent. Microsoft Entra ID hozzáférési jogkivonat létrehozásához tegye a következőket:

A Microsoft Entra ID-jogkivonatok alapértelmezett élettartama körülbelül 1 óra. Új Microsoft Entra ID-jogkivonat létrehozásához ismételje meg ezt a folyamatot.

A Pythonhoz készült Databricks SQL-összekötő hitelesítéséhez használja az alábbi kódrészletet. Ez a kódrészlet feltételezi, hogy a következő környezeti változókat állította be:

  • Állítsa be DATABRICKS_SERVER_HOSTNAME a fürt vagy az SQL Warehouse szervernév értékét.
  • Állítsa be DATABRICKS_HTTP_PATH a fürt vagy az SQL Warehouse HTTP-elérési útvonalának értékét.
  • Állítsa be DATABRICKS_TOKEN a Microsoft Entra ID tokent.

A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.

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 felhasználó-gép (U2M) hitelesítés

A Databricks SQL Connector for Python 2.7.0-s és újabb verziói támogatják az OAuth felhasználó–gép (U2M) hitelesítést. Telepítenie kell a Databricks SDK for Python 0.19.0-s vagy újabb verzióját (például a pip install databricks-sdk vagy python -m pip install databricks-sdk futtatásával).

A Databricks SQL Connector for Python OAuth U2M-hitelesítéssel való hitelesítéséhez használja az alábbi kódrészletet. Az OAuth U2M-hitelesítés valós idejű emberi bejelentkezést és hozzájárulást használ a cél Azure Databricks-felhasználói fiók hitelesítéséhez. Ez a kódrészlet feltételezi, hogy a következő környezeti változókat állította be:

  • Állítsa be DATABRICKS_SERVER_HOSTNAME a fürt vagy az SQL Warehouse kiszolgálói állomásnév értékét.
  • Állítsa be DATABRICKS_HTTP_PATH a fürt vagy az SQL Warehouse HTTP-elérési útvonalának értékét.

A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.

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

Példák

Az alábbi példakódok bemutatják, hogyan használható a Databricks SQL Connector for Python az adatok lekérdezésére és beszúrására, a metaadatok lekérdezésére, a kurzorok és kapcsolatok kezelésére, valamint a naplózás konfigurálására.

Feljegyzés

Az alábbi példakód bemutatja, hogyan használható az Azure Databricks személyes hozzáférési jogkivonata a hitelesítéshez. Ha ehelyett más elérhető Azure Databricks-hitelesítési típusokat szeretne használni, tekintse meg a Hitelesítés című témakört.

Ezek a példakódok az alábbi környezeti változókból szerzik meg a server_hostname, http_path és access_token kapcsolati változók értékeit.

  • DATABRICKS_SERVER_HOSTNAME, amely a kiszolgáló állomásnevének értékét jelöli a követelményekből.
  • DATABRICKS_HTTP_PATH, amely a követelmények HTTP-elérési útját jelöli.
  • DATABRICKS_TOKEN, amely a hozzáférési jogkivonatot jelöli a követelményekből.

Ezeket a kapcsolatváltozó-értékeket más módszerekkel is beolvashatja. A környezeti változók használata csak egy megközelítés a sok közül.

User-Agent beállítása

Az alábbi példakód bemutatja, hogyan állíthatja be a User-Agent alkalmazás product_name a használatkövetéshez.

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)

Adatok lekérdezése

Az alábbi példakód bemutatja, hogyan hívhatja meg a Databricks SQL Connector for Pythont, hogy egy alapszintű SQL-parancsot futtasson egy fürtön vagy SQL-raktáron. Ez a parancs visszaadja a trips táblázat első két sorát a samples katalógus nyctaxi sémájából.

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)

Adat beszúrása

Az alábbi példa bemutatja, hogyan szúrhat be kis mennyiségű adatot (több ezer sort):

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)

Nagy mennyiségű adat esetén először töltse fel az adatokat a felhőbeli tárolóba, majd hajtsa végre a COPY INTO parancsot.

Metaadatok lekérdezése

Vannak dedikált metódusok a metaadatok lekérésére. Az alábbi példa egy mintatábla oszlopainak metaadatait kéri le:

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

Kurzorok és kapcsolatok kezelése

Ajánlott bezárni a már nem használt kapcsolatokat és kurzorokat. Ez erőforrásokat szabadít fel az Azure Databricks-fürtökön és a Databricks SQL-tárolókon.

Az erőforrások kezeléséhez használhat környezetkezelőt (az with előző példákban használt szintaxist), vagy explicit módon meghívhatja a következőt 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()

Fájlok kezelése Unity Catalog-kötetekben

A Databricks SQL Connector lehetővé teszi helyi fájlok írását Unity Catalog-kötetekbe, fájlokat tölthet le kötetekről, és fájlokat törölhet a kötetekből az alábbi példában látható módon:

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

Naplózás konfigurálása

A Databricks SQL Connector a Python szabványos naplózási modulját használja. A naplózási szintet az alábbiakhoz hasonlóan konfigurálhatja:

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

Tesztelés

A kód teszteléséhez használjon Python-tesztelési keretrendszereket, például a pytestet. Ha szimulált körülmények között szeretné tesztelni a kódot az Azure Databricks REST API-végpontok meghívása vagy az Azure Databricks-fiókok vagy -munkaterületek állapotának módosítása nélkül, használhat Python-mintakódtárakat, például unittest.mockot.

Ha például a következő fájl neve helpers.py egy get_connection_personal_access_token olyan függvényt tartalmaz, amely egy Azure Databricks személyes hozzáférési jogkivonatot használ egy Azure Databricks-munkaterülethez való kapcsolat visszaadásához, és egy select_nyctaxi_trips olyan függvényt, amely a kapcsolatot használja a katalógus sémájában szereplő trips tábla megadott számú adatsorának samples lekéréséheznyctaxi:

# 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

Adott egy main.py nevű fájl, amely meghívja a get_connection_personal_access_token és select_nyctaxi_trips függvényeket:

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

A következő elnevezett test_helpers.py fájl ellenőrzi, hogy a select_nyctaxi_trips függvény a várt választ adja-e vissza. Ahelyett, hogy valódi kapcsolatot hoz létre a cél-munkaterülethez, ez a teszt egy Connection objektumot szimulál. A teszt néhány olyan adatot is szimulál, amely megfelel a valós adatok sémájának és értékeinek. A teszt a szimulált kapcsolaton keresztül adja vissza a szimulált adatokat, majd ellenőrzi, hogy a szimulált adatsorok egyik értéke megegyezik-e a várt értékkel.

# 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

Mivel a select_nyctaxi_trips függvény egy SELECT utasítást tartalmaz, és ezért nem módosítja a trips tábla állapotát, ebben a példában a mockolás nem feltétlenül szükséges. A gúnyolással azonban gyorsan futtathatja a teszteket anélkül, hogy tényleges kapcsolatra kellene várnia a munkaterülettel. A mockolással szimulált teszteket is futtathat többször olyan függvények esetében, amelyek megváltoztathatják egy tábla állapotát, például INSERT INTO, UPDATE, és DELETE FROM.

API-referencia

Csomag

databricks-sql-connector

Használat: pip install databricks-sql-connector

Lásd még a Databricks-sql-connectort a Python-csomagindexben (PyPI).

Modul

databricks.sql

Használat: from databricks import sql

Osztályok

A kiválasztott osztályok a következőket tartalmazzák:

Osztályok
Connection
Munkamenet egy Azure Databricks számítási erőforráson.
Cursor
Az adatrekordok átjárásának mechanizmusa.
Row
Adatsor egy SQL-lekérdezés eredményében.

Connection osztály

Objektum létrehozásához Connection hívja meg a databricks.sql.connect metódust a következő paraméterekkel:

Paraméterek
server_hostname
Típus: str
A fürt vagy az SQL tároló kiszolgálói állomásneve. A kiszolgáló állomásnevének lekéréséhez tekintse meg a cikk korábbi utasításait.
Ez a paraméter kötelező.
Példa: adb-1234567890123456.7.azuredatabricks.net
http_path
Típus: str
A fürt vagy az SQL Warehouse HTTP-elérési útja. A HTTP-elérési út lekéréséhez tekintse meg a cikk korábbi utasításait.
Ez a paraméter kötelező.
Példa:
sql/protocolv1/o/1234567890123456/1234-567890-test123 egy fürthöz.
/sql/1.0/warehouses/a1b234c567d8e9fa SQL-tárolóhoz.
access_token, auth_type
Típus: str
Információk az Azure Databricks hitelesítési beállításairól. További részletekért lásd: Hitelesítés.
session_configuration
Típus: dict[str, Any]
A Spark-munkamenet konfigurációs paramétereinek szótára. A konfiguráció beállítása egyenértékű az SET key=val SQL-parancs használatával. Futtassa az SQL-parancsot SET -v az elérhető konfigurációk teljes listájának lekéréséhez.
Alapértelmezett érték: None.
Ez a paraméter nem kötelező.
Példa: {"spark.sql.variable.substitute": True}
http_headers
Típus: List[Tuple[str, str]]]
További (kulcs, érték) párok beállítása a HTTP-fejlécekben minden RPC-kérelemhez, amelyet az ügyfél tesz. A használat általában nem állít be további HTTP-fejléceket. Alapértelmezett érték: None.
Ez a paraméter nem kötelező.
A 2.0-s verzió óta
catalog
Típus: str
A kapcsolathoz használni kívánt kezdeti katalógus. Alapértelmezés szerint None (ebben az esetben általában az alapértelmezett katalógus hive_metastorelesz használva).
Ez a paraméter nem kötelező.
A 2.0-s verzió óta
schema
Típus: str
A kapcsolathoz használandó kezdeti séma. Alapértelmezett érték None (ebben az esetben az alapértelmezett séma default lesz használva).
Ez a paraméter nem kötelező.
A 2.0-s verzió óta
use_cloud_fetch
Típus: bool
True lekéréses kérések közvetlenül a felhőobjektum-tárolóba való elküldéséhez adattömbök letöltéséhez. False (alapértelmezett) a lekéréses kérelmek közvetlenül az Azure Databricksnek való elküldéséhez.
Ha use_cloud_fetch be van állítva, True de a hálózati hozzáférés le van tiltva, akkor a beolvasási kérelmek sikertelenek lesznek.
A 2.8-as verzió óta

A kiválasztott Connection metódusok a következők:

Metódusok
close
Bezárja az adatbázishoz való kapcsolatot, és felszabadítja az összes társított erőforrást a kiszolgálón. A kapcsolatra irányuló további hívások a következőt Errorfogják eredményezni: .
Nincsenek paraméterek.
Nincs visszatérési érték.
cursor
Egy új Cursor objektumot ad vissza, amely lehetővé teszi az adatbázis rekordjainak bejárását.
Nincsenek paraméterek.

Cursor osztály

Objektum létrehozásához, hívja meg az Connection osztály cursor metódusát.

A kijelölt Cursor attribútumok a következőket tartalmazzák:

Attribútumok
arraysize
A fetchmany metódussal megadja a belső pufferméretet, és ezzel határozza meg, hogy ténylegesen hány sort hív le egyszerre a kiszolgálóról. Az alapértelmezett érték 10000. A szűk eredmények esetében (amikor az egyes sorok nem tartalmaznak sok adatot), a jobb teljesítmény érdekében növelje ezt az értéket.
Olvasási-írási hozzáférés.
description
Python list tartalmaz, amely tuple objektumokat tartalmaz. Mindegyik tuple objektum 7 értéket tartalmaz, és mindegyik tuple objektum első 2 eleme az egyetlen eredményoszlopot leíró információkat tartalmazza az alábbiak szerint:
  • name: Az oszlop neve.
  • type_code: Az oszlop típusát képviselő karakterlánc. Egy egész szám oszlop például a következő típusú kóddal rendelkezik int: .

A 7 elemből tuple álló objektumok fennmaradó 5 eleme nincs implementálva, és az értékek nincsenek definiálva. Általában négyes formában térnek vissza.
None értékek, amelyeket egyetlen True érték követ.
Írásvédett hozzáférés.

A kiválasztott Cursor metódusok a következők:

Metódusok
cancel
Megszakítja a kurzor által indított adatbázis-lekérdezések vagy parancsok futtatását. A szerverhez társított erőforrások felszabadításához hívja meg a
A cancel metódus meghívása után hajtsa végre a close metódust.
Nincsenek paraméterek.
Nincs visszatérési érték.
close
Bezárja a kurzort, és felszabadítja a társított erőforrásokat a kiszolgálón. Egy már bezárt kurzor bezárása hibát jelezhet.
Nincsenek paraméterek.
Nincs visszatérési érték.
execute
Előkészít és futtat egy adatbázis-lekérdezést vagy -parancsot.
Nincs visszatérési érték.
Paraméterek:
operation
Típus: str
A előkészítendő és futtatandó lekérdezés vagy parancs.
Ez a paraméter kötelező.
Példa paraméter parameters nélkül:
cursor.execute(
'SELECT * FROM samples.nyctaxi.trips WHERE pickup_zip="10019" LIMIT 2'
)
Példa a parameters paraméterrel:
cursor.execute(
'SELECT * FROM samples.nyctaxi.trips WHERE zip=%(pickup_zip)s LIMIT 2',
{ 'pickup_zip': '10019' }
)
parameters
Típus: szótár
A operation paraméterrel használandó paraméterek sorozata.
Ez a paraméter nem kötelező. Az alapértelmezett érték None.
executemany
Előkészít és futtat egy adatbázis-lekérdezést vagy parancsot az seq_of_parameters argumentum összes paraméterütemezésével. A rendszer csak a végső eredményhalmazt őrzi meg.
Nincs visszatérési érték.
Paraméterek:
operation
Típus: str
A előkészítendő és futtatandó lekérdezés vagy parancs.
Ez a paraméter kötelező.
seq_of_parameters
Típus: list a dict közül
Számos paraméterérték-készlet sorozata, amelyet a
operation paraméter.
Ez a paraméter kötelező.
catalogs
Metaadat-lekérdezés végrehajtása a katalógusokról. A tényleges eredményeket ezután le kell kérni a következővel fetchmany : vagy fetchall.
Az eredményhalmaz fontos mezői a következők:
  • Mező neve: TABLE_CAT. Típus: str. A katalógus neve.

Nincsenek paraméterek.
Nincs visszatérési érték.
Az 1.0-s verzió óta
schemas
Metaadat-lekérdezés végrehajtása a sémákról. A tényleges eredményeket ezután le kell kérni a következővel fetchmany : vagy fetchall.
Az eredményhalmaz fontos mezői a következők:
  • Mező neve: TABLE_SCHEM. Típus: str. A séma neve.
  • Mező neve: TABLE_CATALOG. Típus: str. A katalógus, amelyhez a séma tartozik.

Nincs visszatérési érték.
Az 1.0-s verzió óta
Paraméterek:
catalog_name
Típus: str
Katalógusnév, amelyről információt szeretne lekérni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
schema_name
Típus: str
Sémanév, amelyről információt szeretne lekérni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
tables
Metaadat-lekérdezés végrehajtása táblákról és nézetekről. A tényleges eredményeket ezután le kell kérni a következővel fetchmany : vagy fetchall.
Az eredményhalmaz fontos mezői a következők:
  • Mező neve: TABLE_CAT. Típus: str. A katalógus, amelyhez a tábla tartozik.
  • Mező neve: TABLE_SCHEM. Típus: str. Az a séma, amelyhez a tábla tartozik.
  • Mező neve: TABLE_NAME. Típus: str. A tábla neve.
  • Mező neve: TABLE_TYPE. Típus: str. A reláció típusa, például VIEW vagy TABLE (a Databricks Runtime 10.4 LTS és újabb verziókra, valamint a Databricks SQL-re vonatkozik; a Databricks Runtime korábbi verziói üres sztringet adnak vissza).

Nincs visszatérési érték.
Az 1.0-s verzió óta
Paraméterek
catalog_name
Típus: str
Katalógusnév, amelyről információt szeretne lekérni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
schema_name
Típus: str
Sémanév, amelyről információt szeretne lekérni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
table_name
Típus: str
Az a táblanév, amelyről információt szeretne lekérdezni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
table_types
Típus: List[str]
Az egyező táblázattípusok listája, példáulTABLE.VIEW
Ez a paraméter nem kötelező.
columns
Metaadat-lekérdezés végrehajtása az oszlopokról. A tényleges eredményeket ezután le kell kérni a következővel fetchmany : vagy fetchall.
Az eredményhalmaz fontos mezői a következők:
  • Mező neve: TABLE_CAT. Típus: str. Az a katalógus, amelyhez az oszlop tartozik.
  • Mező neve: TABLE_SCHEM. Típus: str. Az a séma, amelyhez az oszlop tartozik.
  • Mező neve: TABLE_NAME. Típus: str. Annak a táblának a neve, amelyhez az oszlop tartozik.
  • Mező neve: COLUMN_NAME. Típus: str. Az oszlop neve.

Nincs visszatérési érték.
Az 1.0-s verzió óta
Paraméterek:
catalog_name
Típus: str
Katalógusnév, amelyről információt szeretne lekérni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
schema_name
Típus: str
Sémanév, amelyről információt szeretne lekérni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
table_name
Típus: str
Egy táblanév, amelyről információt szeretne lekérni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
column_name
Típus: str
Egy oszlopnév, amelyhez információt szeretne lekérni. A % karaktert helyettesítő karakterként értelmezi a rendszer.
Ez a paraméter nem kötelező.
fetchall
Lekéri egy lekérdezés összes (vagy az összes fennmaradó) sorát.
Nincsenek paraméterek.
A lekérdezés összes (vagy az összes fennmaradó) sorát adja vissza Python-értékként list .
Row objektumok.
Kivételt dob, ha az előző execute metódushívás nem adott vissza adatot, vagy ha még nem történt execute hívás.
fetchmany
Lekéri a lekérdezés következő sorait.
A lekérdezés következő sorai közül legfeljebb size (vagy a arraysize attribútum, ha size nincs megadva) eredményét adja vissza Python list-ként, amely Row objektumokat tartalmaz.
Ha a beolvasandó soroknál size kevesebb sor van hátra, a rendszer az összes többi sort visszaadja.
Error dob, ha a execute metódus előző hívása nem adott vissza adatokat, vagy még nem történt execute hívás.
Paraméterek:
size
Típus: int
A következő lekérendő sorok száma.
Ez a paraméter nem kötelező. Ha nincs megadva, a rendszer az arraysize attribútum értékét használja.
Példa: cursor.fetchmany(10)
fetchone
Lekéri az adathalmaz következő sorát.
Nincsenek paraméterek.
Az adathalmaz következő sorát adja vissza egyetlen sorozatként Pythonként
tuple objektumot, vagy visszaadja None , ha nincs több elérhető adat.
Error adatot dob vissza, ha a execute metódus előző hívása nem adott vissza adatokat, vagy még nem történt execute hívás.
fetchall_arrow
PyArrow-objektumként Table lekéri egy lekérdezés összes (vagy az összes fennmaradó) sorát. A nagyon nagy mennyiségű adatot visszaadó lekérdezéseket inkább a memóriahasználat csökkentésére kell használni fetchmany_arrow .
Nincsenek paraméterek.
A lekérdezés összes (vagy az összes fennmaradó) sorát PyArrow-táblaként adja vissza.
Error dob, ha a execute metódus előző hívása nem adott vissza adatokat, vagy még nem történt execute hívás.
A 2.0-s verzió óta
fetchmany_arrow
Lekéri a lekérdezés következő sorait PyArrow-objektumként Table .
Akár a size argumentumig (vagy a arraysize attribútumig, ha size nincs megadva) adja vissza a lekérdezés következő sorait Python PyArrow formátumban.
Table tárgy.
Dob egy Error hibát, ha az előző execute metódushívás nem adott vissza adatokat, vagy még nem történt execute hívás.
A 2.0-s verzió óta
Paraméterek:
size
Típus: int
A lekérendő következő sorok száma.
Ez a paraméter nem kötelező. Ha nincs megadva, a rendszer az arraysize attribútum értékét használja.
Példa: cursor.fetchmany_arrow(10)

Row osztály

A sorosztály egy tömbszerű adatstruktúra, amely egy egyéni eredménysort ábrázol. Ha a sor tartalmaz egy oszlopot a névvel "my_column", akkor a "my_column" mező row a következőn keresztül row.my_columnérhető el: Numerikus indexekkel is elérheti például row[0]a mezőket. Ha az oszlopnév nem engedélyezett attribútummetódus-névként (például egy számjegygel kezdődik), akkor a mezőt a következőképpen row["1_my_column"]érheti el.

Az 1.0-s verzió óta

A kiválasztott Row metódusok a következők:

| asDict

A sor szótári ábrázolását adja vissza, amelyet mezőnevek indexelnek. Ha ismétlődő mezőnevek vannak, az ismétlődő mezők egyike (de csak egy) lesz visszaadva a szótárban. A visszaadott duplikált mező nincs meghatározva.

Nincsenek paraméterek.

Mezőket dict ad vissza. |

Típuskonverziók

Az alábbi táblázat az Apache Spark SQL-adattípusokat a Python-adattípus megfelelőire képezi le.

Apache Spark SQL-adattípus Python-adattípus
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

Hibaelhárítás

tokenAuthWrapperInvalidAccessToken: Invalid access token üzenet

Probléma: A kód futtatásakor a következőhöz hasonló üzenet jelenik meg Error during request to server: tokenAuthWrapperInvalidAccessToken: Invalid access token.

Lehetséges ok: Az átadott access_token érték nem érvényes Azure Databricks személyes hozzáférési jogkivonat.

Javasolt javítás: Ellenőrizze, hogy az átadott access_token érték helyes-e, majd próbálkozzon újra.

gaierror(8, 'nodename nor servname provided, or not known') üzenet

Probléma: A kód futtatásakor a következőhöz hasonló üzenet jelenik meg Error during request to server: gaierror(8, 'nodename nor servname provided, or not known').

Lehetséges ok: Az átadott server_hostname érték nem a megfelelő állomásnév.

Javasolt javítás: Ellenőrizze, hogy az átadott server_hostname érték helyes-e, majd próbálkozzon újra.

A kiszolgáló állomásnevének megkereséséről további információt az Azure Databricks számítási erőforrás kapcsolati adatainak lekérése című témakörben talál.

IpAclError üzenet

Probléma: A kód futtatásakor megjelenik az üzenet Error during request to server: IpAclValidation , amikor egy Azure Databricks-jegyzetfüzetben próbálja használni az összekötőt.

Lehetséges ok: Lehetséges, hogy engedélyezve van az IP-engedélyezési lista az Azure Databricks-munkaterületen. IP-címek engedélyezési listájának használatával a Spark-fürtökből a vezérlősíkba történő kapcsolatok alapértelmezés szerint nem engedélyezettek.

Javasolt javítás: Kérje meg a rendszergazdát, hogy adja hozzá a számításisík-alhálózatot az IP-engedélyezési listához.

További erőforrások

További információk: