Źródła danych platformy Spark

Interfejs API źródła danych Spark umożliwia odczytywanie danych z zewnętrznych baz danych i zapisywanie ich do nich bezpośrednio z poziomu platformy Azure Databricks. Używaj go tylko wtedy, gdy potrzebujesz pełnej elastyczności silnika Spark, chcesz wykonywać natywne zapytania bezpośrednio w źródle lub potrzebujesz dostępu do zapisu w systemach zewnętrznych. Ogólnie Azure Databricks zaleca nadzorowany dostęp tylko do odczytu z automatycznym delegowaniem zapytań Spark lub SQL. Zobacz Co to jest federacja zapytań?.

Interfejs API źródła danych platformy Spark ma określone zachowania dotyczące łączności, wykonywania zapytań i wykrywania schematu.

  • Podstawowe obciążenie i wszystkie kolejne przekształcenia platformy Spark są uruchamiane w klastrze Azure Databricks Spark.
  • W przypadku korzystania z query tej opcji określona instrukcja SQL jest uruchamiana całkowicie w zewnętrznym źródle danych. Spark pobiera wyniki bez wykonywania przenoszenia przekształceń w treści zapytania.
  • Połączenie wymaga jednego z następujących elementów: łącznika dołączonego do Azure Databricks, sterownika JDBC dostarczonego przez użytkownika lub niestandardowego źródła danych PySpark.
  • Platforma Spark automatycznie odczytuje schemat z tabeli zewnętrznej bazy danych i mapuje jej typy na typy Spark SQL.

Korzystanie z dołączonego łącznika

Środowisko Databricks Runtime zawiera zoptymalizowane łączniki dla typowych źródeł danych. Aby uzyskać pełną listę, zobacz Obsługiwane łączniki dołączone .

Dołączone konektory używają host i port jako oddzielnych opcji zamiast pełnego ciągu JDBC URL.

Odczytaj dane przy użyciu zapytania pass-through

Użycie opcji gwarantuje, że logika query filtrowania i sprzężenia jest wykonywana w źródłowej bazie danych, zanim dane dotrą do platformy Spark. W przypadku zarządzanego dostępu do odczytu z automatycznym przekazywaniem zapytań do źródła i delegowaniem uprawnień w Unity Catalog za pośrednictwem widoków należy zamiast tego rozważyć zapytania zdalne.

df = (spark.read
  .format("sqlserver")
  .option("host", "<your-sql-server-instance>.database.windows.net")
  .option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
  .option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
  .option("database", "<database-name>")
  .option("query", "SELECT id, name FROM users WHERE active = 1")
  .load())

Zapisywanie danych

Określ tryb zapisu za pomocą .mode() polecenia , aby kontrolować sposób zapisywania danych. Służy append do dodawania wierszy do istniejącej tabeli lub overwrite zastępowania jej zawartości.

(df.write
  .format("sqlserver")
  .mode("overwrite")
  .option("host", "<your-sql-server-instance>.database.windows.net")
  .option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
  .option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
  .option("database", "<database-name>")
  .option("dbtable", "<table-name>")
  .save())

Korzystanie z połączenia JDBC UC

Jeśli łącznik przeznaczony dla danego źródła nie jest dostarczany lub jeśli chcesz użyć określonej wersji sterownika JDBC, użyj połączenia JDBC usługi Unity Catalog. Umożliwia to scentralizowanie zarządzania poświadczeniami i korzystanie z własnego sterownika JDBC.

Połączenie JDBC z Unity Catalog oferuje kilka zalet w porównaniu z korzystaniem z dołączonego konektora lub bezpośrednio ze sterownika JDBC. Za pomocą połączenia JDBC z usługą Unity Catalog można:

  • Bring your own JDBC driver JAR for any database that supports JDBC (Przynieś własny sterownik JDBC dla dowolnej bazy danych obsługującej JDBC).
  • Utwórz połączenie raz i użyj go ponownie w klastrach bezserwerowych, standardowych i dedykowanych.
  • Użyj obiektu połączenia Unity Catalog, aby uzyskać nadzorowany dostęp do źródła danych.
  • Ukryj dane uwierzytelniające połączenia przed użytkownikiem wykonującym zapytanie.
  • Odczytywać z zewnętrznych baz danych i zapisywać do nich za pomocą interfejsu API źródeł danych Spark.

Aby użyć połączenia JDBC usługi Unity Catalog, określ databricks.connection w opcjach Spark:

df = (spark.read
  .format("jdbc")
  .option("databricks.connection", "<connection-name>")
  .option("query", "SELECT * FROM external_table")
  .load())

Aby uzyskać instrukcje dotyczące konfiguracji, zobacz Połączenie JDBC.

Używanie łącznika niestandardowego w dedykowanych klastrach

W dedykowanych (klasycznych) klastrach można zainstalować łączniki źródła danych platformy Spark innych firm lub sterowniki JDBC, które nie są dołączone do środowiska Databricks Runtime.

Użyj tego podejścia, gdy:

  • Potrzebujesz łącznika spark innej firmy dla systemów, takich jak MongoDB, Cassandra, Couchbase lub Elasticsearch.
  • Potrzebna jest określona wersja sterownika, która nie jest dołączona do środowiska uruchomieniowego.
  • Chcesz zainstalować sterownik JDBC bezpośrednio w klastrze bez konfigurowania połączenia z Unity Catalog.

Instalowanie łącznika lub sterownika

Zainstaluj bibliotekę w swoim klastrze przez Compute>swój klaster>Biblioteki>Zainstaluj nową. Możesz bezpośrednio używać współrzędnych Mavena bez pobierania ani przesyłania jakichkolwiek plików JAR. Uruchom ponownie klaster, aby zmiany w bibliotece zaczęły obowiązywać.

Odczyt danych

Po zainstalowaniu łącznika użyj nazwy formatu łącznika i jego wymaganych opcji połączenia, aby odczytać dane.

df = (spark.read
  .format("mongodb")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .load())

Zapisywanie danych

Użyj tej samej nazwy formatu i opcji połączenia, aby zapisać dane z powrotem do źródła.

(df.write
  .format("mongodb")
  .mode("overwrite")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .save())

Considerations

Podczas korzystania z łączników niestandardowych w dedykowanych klastrach należy pamiętać o następujących kwestiach.

  • Sterownik lub łącznik jest dostępny tylko w klastrze, w którym jest zainstalowany.
  • Niestandardowe zewnętrzne pliki JAR platformy Spark nie są obsługiwane w klastrach Databricks SQL, bezserwerowych ani w klastrach ze standardowym trybem dostępu. W przypadku tych typów zasobów obliczeniowych należy używać wbudowanych łączników lub połączeń JDBC usługi Unity Catalog.

Niestandardowe źródła danych PySpark

Interfejs API Python DataSource umożliwia tworzenie niestandardowych łączników danych w całości w Python bez bibliotek opartych na protokole JARs lub JVM. Użyj tej opcji, gdy musisz nawiązać połączenie z interfejsami API REST, aplikacjami SaaS lub dowolnym systemem bez interfejsu JDBC lub kiedy chcesz programowo wygenerować syntetyczne dane. Interfejs API obsługuje wsadowy i strumieniowy odczyt oraz zapis.

Uwaga / Notatka

Niestandardowe źródła danych PySpark wymagają środowiska Databricks Runtime 15.4 LTS lub nowszego.

Aby uzyskać informacje na temat konfiguracji, przykładów i interfejsu API, zobacz Niestandardowe źródła danych PySpark.

Porównanie strategii integracji

W poniższej tabeli porównaliśmy interfejs API źródła danych platformy Spark z usługą Lakehouse Federation i Lakeflow Connect, aby ułatwić wybór odpowiedniego podejścia do przypadku użycia.

Feature API źródła danych Spark Federacja Lakehouse Lakeflow Connect
Podstawowy przypadek użycia Złożone procesy ETL, niestandardowa logika Spark, zapytania pass-through Zapytania ad hoc, raportowanie analizy biznesowej Zautomatyzowane importowanie na dużą skalę
Przenoszenie danych Załadowano do pamięci Spark (tymczasowej) Załadowano do pamięci Spark (tymczasowo) Skopiowano do Delta Lake (trwale)
Wykonywanie zapytania Ręczne opuszczanie za pomocą natywnej opcji query Automatyczne wypychanie filtrów spark i SQL, sprzężeń i agregacji Nie dotyczy (pełna replikacja tabeli)
Governance Połączenie Unity Catalog (JDBC) lub zakresy wpisów tajnych Unity Catalog (katalog federacyjny) Unity Catalog (zarządzany potok)
Najlepsze dla Zaawansowani użytkownicy potrzebujący pełnej elastyczności Spark Minimalizacja przenoszenia danych przy zachowaniu ładu Produkcyjne potoki CDC i pozyskiwania danych

Obsługiwane łączniki połączone

Następujące źródła danych są połączone w środowisku Databricks Runtime i mogą być wywoływane bezpośrednio za pośrednictwem platformy Spark. Operacje odczytu i zapisu są obsługiwane w dedykowanych i standardowych klastrach.

Uwaga / Notatka

Operacje zapisu w obliczeniach bezserwerowych są obsługiwane w przypadku baz danych PostgreSQL, SQL Server, MySQL, Snowflake i Redshift. Zobacz Opcje zapisu bezserwerowego dla dołączonych łączników dla obsługiwanych opcji łącznika.

Źródło danych spark.format() nazwa
PostgreSQL "postgresql"
SQL Server "sqlserver"
Bazy danych MySQL i MariaDB "mysql"
Snowflake "snowflake"
Amazon Redshift "redshift"
Google BigQuery - usługa analizy danych "bigquery"
Azure Synapse "SQLDW"
HTTP "http"

Ograniczenia

Następujące ograniczenia mają zastosowanie w przypadku korzystania z interfejsu API źródła danych platformy Spark w Azure Databricks.

  • Opcje platformy Spark dla powiązanych źródeł danych są ograniczone do query, dbtablei małego zestawu opcji specyficznych dla łącznika.
  • Niestandardowe biblioteki JAR platformy Spark innych firm można instalować tylko w dedykowanych klastrach. W przypadku klastrów bezserwerowych lub standardowych należy używać wbudowanych łączników lub połączeń JDBC usługi Unity Catalog.
  • Niestandardowe źródła danych PySpark wymagają środowiska Databricks Runtime 15.4 LTS lub nowszego.