Spark 데이터 원본 API를 사용하면 Azure Databricks 외부 데이터베이스에서 직접 읽고 쓸 수 있습니다. Spark 엔진의 완전한 유연성이 필요하거나, 원본에서 네이티브 쿼리를 실행하거나, 외부 시스템에 대한 쓰기 액세스가 필요한 경우에만 사용합니다. 일반적으로 Azure Databricks 자동 Spark 또는 SQL 쿼리 푸시다운을 사용하여 관리되는 읽기 전용 액세스를 권장합니다. 쿼리 페더레이션이란?을 참조하세요.
Spark 데이터 원본 API에는 연결, 쿼리 실행 및 스키마 검색에 대한 특정 동작이 있습니다.
- 기본 워크로드 및 후속 Spark 변환은 Azure Databricks Spark 클러스터에서 실행됩니다.
- 이
query옵션을 사용하는 경우 지정된 SQL 문은 전적으로 외부 데이터 원본에서 실행됩니다. Spark는 쿼리 문자열에서 변환 푸시다운을 수행하지 않고 결과를 가져옵니다. - 연결하려면 Azure Databricks 번들 커넥터, 사용자가 제공한 JDBC 드라이버 또는 PySpark 사용자 지정 데이터 원본이 필요합니다.
- Spark는 외부 데이터베이스 테이블에서 스키마를 자동으로 읽고 해당 형식을 Spark SQL 형식에 매핑합니다.
번들 커넥터 사용
Databricks 런타임에는 공통 데이터 원본에 최적화된 커넥터가 포함되어 있습니다. 전체 목록은 지원되는 번들 커넥터 를 참조하세요.
번들 커넥터는 전체 JDBC URL 문자열 대신 별도의 옵션으로 사용합니다 hostport .
통과 쿼리를 사용하여 데이터 읽기
이 query 옵션을 사용하면 데이터가 Spark에 도달하기 전에 원본 데이터베이스에서 필터 및 조인 논리가 실행됩니다. 자동 쿼리 푸시다운 및 뷰를 통한 Unity 카탈로그 권한 위임을 사용하는 관리되는 읽기 액세스의 경우 원격 쿼리를 대신 고려합니다.
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())
데이터 쓰기
데이터를 쓰는 방법을 제어하는 쓰기 모드 .mode() 를 지정합니다. 기존 테이블에 행을 추가하거나 append 내용을 바꾸는 데 사용합니다overwrite.
(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())
JDBC UC 연결 사용
원본별 커넥터가 번들로 묶이지 않거나 특정 JDBC 드라이버 버전을 사용하려는 경우 JDBC Unity 카탈로그 연결을 사용합니다. 이렇게 하면 자격 증명 관리를 중앙 집중화하고 고유한 JDBC 드라이버를 가져올 수 있습니다.
JDBC Unity 카탈로그 연결은 번들 커넥터 또는 원시 JDBC 드라이버를 직접 사용하는 경우보다 몇 가지 이점을 제공합니다. JDBC Unity 카탈로그 연결을 사용하여 다음을 수행할 수 있습니다.
- JDBC를 지원하는 모든 데이터베이스에 대해 고유한 JDBC 드라이버 JAR을 가져옵니다.
- 연결을 한 번 만들고 서버리스, 표준 및 전용 클러스터에서 다시 사용합니다.
- Unity 카탈로그 연결 개체를 사용하여 데이터 원본에 대한 제어된 액세스를 활용합니다.
- 쿼리 사용자로부터 연결 자격 증명을 숨깁니다.
- Spark 데이터 원본 API를 통해 외부 데이터베이스에서 읽고 씁니다.
JDBC Unity 카탈로그 연결을 사용하려면 Spark 옵션에 databricks.connection를 지정합니다.
df = (spark.read
.format("jdbc")
.option("databricks.connection", "<connection-name>")
.option("query", "SELECT * FROM external_table")
.load())
설치 지침은 JDBC 연결을 참조하세요.
전용 클러스터에서 사용자 지정 커넥터 사용
전용(클래식) 클러스터에서 Databricks 런타임과 함께 번들로 묶이지 않는 타사 Spark 데이터 원본 커넥터 또는 JDBC 드라이버를 설치할 수 있습니다.
다음과 같은 경우에 이 방법을 사용합니다.
- MongoDB, Cassandra, Couchbase 또는 Elasticsearch와 같은 시스템에 타사 Spark 커넥터가 필요합니다.
- 런타임에 번들로 묶이지 않는 특정 드라이버 버전이 필요합니다.
- Unity 카탈로그 연결을 설정하지 않고 클러스터에 직접 JDBC 드라이버를 설치하려고 합니다.
커넥터 또는 드라이버 설치
컴퓨팅>클러스터>라이브러리>새로 설치를 통해 클러스터에 라이브러리를 설치합니다. JAR을 다운로드하거나 업로드하지 않고 Maven 좌표를 직접 사용할 수 있습니다. 라이브러리가 적용되도록 클러스터를 다시 시작합니다.
데이터 읽기
커넥터가 설치되면 커넥터의 형식 이름과 필요한 연결 옵션을 사용하여 데이터를 읽습니다.
df = (spark.read
.format("mongodb")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.load())
데이터 쓰기
동일한 형식 이름 및 연결 옵션을 사용하여 원본에 데이터를 다시 씁니다.
(df.write
.format("mongodb")
.mode("overwrite")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.save())
고려 사항
전용 클러스터에서 사용자 지정 커넥터를 사용하는 경우 다음 사항에 유의하세요.
- 드라이버 또는 커넥터는 설치된 클러스터에서만 사용할 수 있습니다.
- 사용자 지정 타사 Spark JAR은 Databricks SQL, 서버리스 또는 표준 액세스 모드 클러스터에서 지원되지 않습니다. 이러한 컴퓨팅 형식의 경우 번들 커넥터 또는 JDBC Unity 카탈로그 연결을 사용합니다.
PySpark 사용자 지정 데이터 원본
Python DataSource API를 사용하면 JAR 또는 JVM 기반 라이브러리 없이 완전히 Python 사용자 지정 데이터 커넥터를 빌드할 수 있습니다. JDBC 인터페이스가 없는 REST API, SaaS 애플리케이션 또는 시스템에 연결해야 하거나 가상 데이터를 프로그래밍 방식으로 생성하려는 경우에 사용합니다. API는 일괄 처리 및 스트리밍 읽기 및 쓰기를 모두 지원합니다.
메모
PySpark 사용자 지정 데이터 원본에는 Databricks Runtime 15.4 LTS 이상이 필요합니다.
설정, 예제 및 API 참조는 PySpark 사용자 지정 데이터 원본을 참조하세요.
통합 전략 비교
다음 표에서는 Spark 데이터 원본 API를 Lakehouse 페더레이션 및 Lakeflow Connect와 비교하여 사용 사례에 적합한 방법을 선택하는 데 도움이 됩니다.
| 특징 | Spark 데이터 원본 API | 레이크하우스 연합 | Lakeflow Connect |
|---|---|---|---|
| 기본 사용 사례 | 복잡한 ETL, 사용자 지정 Spark 로직, 패스스루 쿼리 | 임시 쿼리, BI 보고 | 대규모의 자동화된 수집 |
| 데이터 이동 | Spark 메모리에 로드됨(임시) | Spark 메모리에 로드됨(임시) | Delta Lake에 복사됨(영구) |
| 쿼리 실행 | 네이티브 query 옵션을 사용한 수동 푸시다운 |
Spark 및 SQL 필터, 조인 및 집계의 자동 푸시다운 | 해당 없음(전체 테이블 복제) |
| Governance | Unity 카탈로그 연결(JDBC) 또는 비밀 범위 | Unity 카탈로그(페더레이션 카탈로그) | Unity 카탈로그(관리되는 파이프라인) |
| 적합한 대상 | Spark를 완전히 유연하게 활용해야 하는 고급 사용자 | 거버넌스를 유지하면서 데이터 이동 최소화 | 프로덕션 CDC 및 수집 파이프라인 |
지원되는 번들 커넥터
다음 데이터 원본은 Databricks 런타임에 번들로 제공되며 Spark를 통해 직접 호출할 수 있습니다. 읽기 및 쓰기는 전용 및 표준 클러스터에서 지원됩니다.
메모
서버리스 컴퓨팅에 대한 쓰기는 PostgreSQL, SQL Server, MySQL, Snowflake 및 Redshift에서 지원됩니다. 지원되는 커넥터 옵션은 번들 커넥터용 서버리스 쓰기 옵션을 참조하세요.
| 데이터 원본 |
spark.format() 이름 |
|---|---|
| PostgreSQL | "postgresql" |
| SQL Server | "sqlserver" |
| MySQL 및 MariaDB | "mysql" |
| Snowflake | "snowflake" |
| Amazon Redshift | "redshift" |
| 구글 빅쿼리 | "bigquery" |
| Azure Synapse | "SQLDW" |
| HTTP | "http" |
Limitations
Azure Databricks Spark 데이터 원본 API를 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.
- 번들된 데이터 원본에 대한 Spark 옵션은 커넥터별 옵션의 작은 집합으로 제한
querydbtable됩니다. - 사용자 지정 타사 Spark JAR은 전용 클러스터에만 설치할 수 있습니다. 서버리스 또는 표준 클러스터의 경우 번들 커넥터 또는 JDBC Unity 카탈로그 연결을 사용합니다.
- PySpark 사용자 지정 데이터 원본에는 Databricks Runtime 15.4 LTS 이상이 필요합니다.