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


Adatok lekérdezése

Az adatok lekérdezése az Azure Databricksben szinte minden adatvezérelt feladat végrehajtásának alapvető lépése. A használt nyelvtől vagy eszköztől függetlenül a számítási feladatok először egy tábla vagy más adatforrás lekérdezésének meghatározásával kezdődnek, majd műveleteket hajtanak végre az adatok alapján történő elemzéshez. Ez a cikk ismerteti a lekérdezések különböző Azure Databricks-termékajánlatok közötti futtatásának alapfogalmait és eljárásait, valamint a használati esethez adaptálható kód példákat tartalmaz.

Az adatok interaktív lekérdezése a következő módon történik:

  • Jegyzetfüzetek
  • SQL-szerkesztő
  • Fájlszerkesztő
  • Irányítópultok

Lekérdezéseket a Delta Live Tables-folyamatok vagy munkafolyamatok részeként is futtathat.

Az Azure Databricks streamelési lekérdezéseinek áttekintéséért tekintse meg a streamelési adatok lekérdezését ismertető témakört.

Milyen adatokat kérdezhet le az Azure Databricks használatával?

Az Azure Databricks támogatja az adatok több formátumban és nagyvállalati rendszerben történő lekérdezését. Az Azure Databricks használatával lekérdezett adatok két széles kategóriába sorolhatók: a Databricks lakehouse-ban lévő adatokra és a külső adatokra.

Milyen adatok vannak egy Databricks lakehouse-ban?

A Databricks Adatintelligencia-platform alapértelmezés szerint egy Databricks lakehouse-ban tárolja az összes adatot.

Ez azt jelenti, hogy amikor egy alapszintű CREATE TABLE utasítást futtat egy új tábla létrehozásához, létrehozott egy lakehouse-táblát. A Lakehouse-adatok a következő tulajdonságokkal rendelkeznek:

  • Delta Lake formátumban tárolva.
  • Felhőalapú objektumtárolóban tárolva.
  • A Unity Catalog szabályozza.

Az Azure Databricks legtöbb lakehouse-adata felügyelt táblákként van regisztrálva a Unity Katalógusban. A felügyelt táblák a legegyszerűbb szintaxist biztosítják, és ugyanúgy viselkednek, mint a legtöbb relációs adatbázis-kezelő rendszer többi táblája. A felügyelt táblák a legtöbb használati esetben ajánlottak, és minden olyan felhasználó számára megfelelőek, akik nem szeretnének aggódni az adattárolás implementálási részletei miatt.

A nem felügyelt vagy külső tábla egy megadott táblával LOCATION regisztrált tábla. A külső kifejezés félrevezető lehet, mivel a külső Delta-táblák még mindig tóparti adatok. A nem felügyelt táblákat előnyben részesíthetik azok a felhasználók, akik közvetlenül férnek hozzá más Delta-olvasó ügyfelek tábláihoz. A táblaszemantika különbségeinek áttekintéséért lásd : Mi az a tábla?.

Egyes örökölt számítási feladatok kizárólag fájlútvonalakon keresztül kezelhetik a Delta Lake-adatokat, és egyáltalán nem regisztrálhatnak táblákat. Ezek az adatok továbbra is a lakehouse-adatok, de nehezebb felderíteni, mert nincsenek regisztrálva a Unity Catalogban.

Feljegyzés

Előfordulhat, hogy a munkaterület rendszergazdája nem frissítette az adatszabályozást a Unity Catalog használatára. A Databricks lakehouse számos előnye továbbra is elérhető a Unity Catalog nélkül, de a cikkben vagy az Azure Databricks dokumentációjában felsorolt funkciók nem támogatottak.

Milyen adatok tekinthetők külsőnek?

A Databricks lakehouse-ban nem található adatok külső adatoknak tekinthetők. Néhány példa a külső adatokra:

  • A Lakehouse Federation-ben regisztrált külföldi táblák.
  • A Parquet által támogatott Hive metaadattár táblái.
  • A Unity Catalog JSON által támogatott külső táblái.
  • Felhőobjektum-tárolóban tárolt CSV-adatok.
  • Streamelési adatok olvasása a Kafkából.

Az Azure Databricks számos adatforráshoz támogatja a kapcsolatok konfigurálását. Lásd az adatforrások Csatlakozás.

Bár a Unity Catalog használatával szabályozhatja és definiálhatja a táblákat a különböző formátumokban és külső rendszerekben tárolt adatokhoz, a Delta Lake követelmény ahhoz, hogy a lakehouse-ban figyelembe lehessen venni az adatokat.

A Delta Lake az Azure Databricks összes tranzakciós garanciáját biztosítja, amelyek elengedhetetlenek az adatintegritás és a konzisztencia fenntartásához. Ha többet szeretne megtudni az Azure Databricks-adatokra vonatkozó tranzakciós garanciákról, és hogy miért fontosak, tekintse meg az Azure Databricks acid-garanciáit.

A legtöbb Azure Databricks-felhasználó a lakehouse-adatok és a külső adatok kombinációját kérdezi le. A külső adatokkal való Csatlakozás mindig az adatbetöltés és az adatokat a lakehouse-ba behozó ETL-folyamatok első lépése. Az adatok betöltéséről további információt a Databricks lakehouse-ba történő adatbetöltéssel kapcsolatban talál.

Táblák lekérdezése név szerint

A táblaként regisztrált összes adat esetében a Databricks a táblanév használatával történő lekérdezést javasolja.

Unity Catalog használata esetén a táblák egy háromrétegű névteret használnak a következő formátumban: <catalog-name>.<schema-name>.<table-name>.

A Unity Catalog nélkül a táblaazonosítók a formátumot <schema-name>.<table-name>használják.

Feljegyzés

Az Azure Databricks az Sql-szintaxis nagy részét örökli az Apache Sparktól, amely nem tesz különbséget SCHEMA a .DATABASE

A táblanév alapján történő lekérdezés minden Azure Databricks-végrehajtási környezetben és támogatott nyelven támogatott.

SQL

SELECT * FROM catalog_name.schema_name.table_name

Python

spark.read.table("catalog_name.schema_name.table_name")

Adatok lekérdezése elérési út szerint

A strukturált, részben strukturált és strukturálatlan adatokat fájlelérési utak használatával kérdezheti le. Az Azure Databricks legtöbb fájlját felhőobjektum-tárolók biztosítják. Lásd: Fájlok használata az Azure Databricksben.

A Databricks azt javasolja, hogy konfigurálja a felhőobjektum-tárolóhoz való hozzáférést a Unity Catalog használatával, és definiálja a köteteket a közvetlenül lekérdezett objektumtárolási helyekhez. A kötetek emberileg olvasható aliasokat biztosítanak a felhőobjektum-tárolóban lévő helyekhez és fájlokhoz a filepath katalógus- és sémaneveit használva. Lásd: Csatlakozás felhőbeli objektumtárba a Unity Catalog használatával.

Az alábbi példák bemutatják, hogyan használható a Unity Catalog kötetútvonalai JSON-adatok olvasására:

SQL

SELECT * FROM json.`/Volumes/catalog_name/schema_name/volume_name/path/to/data`

Python

spark.read.format("json").load("/Volumes/catalog_name/schema_name/volume_name/path/to/data")

A unitykatalógus-kötetekként konfigurált felhőbeli helyeken közvetlenül URI-k használatával kérdezhet le adatokat. Az adatok URI-kkal való lekérdezéséhez konfigurálnia kell a felhőalapú objektumtárolóhoz való hozzáférést. Lásd: Az Azure Databricks felhőalapú objektumtárolóhoz való hozzáférésének konfigurálása.

Az alábbi példák bemutatják, hogyan lehet URI-k használatával JSON-adatokat lekérdezni az Azure Data Lake Storage Gen2, GCS és S3 környezetben:

SQL

SELECT * FROM json.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/data`;

SELECT * FROM json.`gs://bucket_name/path/to/data`;

SELECT * FROM json.`s3://bucket_name/path/to/data`;

Python

spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/data")

spark.read.format("json").load("gs://bucket_name/path/to/data")

spark.read.format("json").load("s3://bucket_name/path/to/data")

Adatok lekérdezése SQL-raktárak használatával

Az Azure Databricks SQL-raktárakat használ a számításhoz a következő felületeken:

  • SQL-szerkesztő
  • Databricks SQL-lekérdezések
  • Irányítópultok
  • Örökölt irányítópultok
  • SQL-riasztások

Az SQL Warehouse-t opcionálisan a következő termékekkel használhatja:

  • Databricks-jegyzetfüzetek
  • Databricks-fájlszerkesztő
  • Databricks-munkafolyamatok

Ha sql warehouse-okkal kérdez le adatokat, csak SQL-szintaxist használhat. Más programozási nyelvek és API-k nem támogatottak.

A Unity Cataloghoz engedélyezett munkaterületek esetében az SQL-raktárak mindig a Unity Catalog használatával kezelik az adatforrásokhoz való hozzáférést.

Az SQL Warehouse-céltáblákon futó lekérdezések többsége. A céladatfájlokat tároló lekérdezéseknek a Unity Catalog köteteit kell használniuk a tárolási helyekhez való hozzáférés kezeléséhez.

Az SQL-raktárakon futtatott lekérdezésekben közvetlenül az URI-k használata váratlan hibákhoz vezethet.

Adatok lekérdezése minden célú számítási vagy feladat-számítással

A Databricks-jegyzetfüzetekből, munkafolyamatokból és fájlszerkesztőből futtatott legtöbb lekérdezés a Databricks Runtime-tal konfigurált számítási fürtökön fut. Ezeket a fürtöket konfigurálhatja interaktív futtatásra, vagy üzembe helyezheti őket olyan feladatok számítási feladataiként, amelyek a munkafolyamatokat működtetik. A Databricks azt javasolja, hogy mindig a feladatok számítási feladatait használja nem interaktív számítási feladatokhoz.

Interaktív és nem interaktív számítási feladatok

Sok felhasználó hasznosnak találja a lekérdezési eredmények megtekintését, miközben az átalakítások feldolgozásra kerülnek a fejlesztés során. Az interaktív számítási feladatok áthelyezése a teljes körű számításról a feladatok számítási feladataira, az eredményeket megjelenítő lekérdezések eltávolításával időt takaríthat meg és feldolgozhatja a költségeket.

Az Apache Spark lusta kódvégrehajtást használ, ami azt jelenti, hogy az eredmények kiszámítása csak szükség szerint történik, és az adatforráson végzett több átalakítás vagy lekérdezés egyetlen lekérdezésként optimalizálható, ha nem kényszeríti ki az eredményeket. Ez ellentétben áll a pandasban használt lelkes végrehajtási móddal, amely megköveteli, hogy a számítások feldolgozása sorrendben történik, mielőtt az eredményeket átadja a következő metódusnak.

Ha a cél a megtisztított, átalakított, összesített adatok új adatkészletként való mentése, akkor a futtatás ütemezése előtt el kell távolítania az eredményeket megjelenítő lekérdezéseket a kódból.

A kis műveletek és a kis adathalmazok esetében az idő- és költségmegtakarítás marginális lehet. Nagy műveletek esetén azonban jelentős időt pazarolhat az eredmények kiszámítására és nyomtatására egy olyan jegyzetfüzetben, amelyet nem lehet manuálisan megvizsgálni. Ugyanezek az eredmények valószínűleg lekérdezhetők a mentett kimenetből szinte költség nélkül a tárolásuk után.