Unity 카탈로그에서 자동 로더 사용

자동 로더는 Unity 카탈로그로 구성된 외부 위치에서 데이터를 안전하게 수집할 수 있습니다. Unity 카탈로그를 사용하여 스토리지를 안전하게 연결하는 방법에 대한 자세한 내용은 Unity 카탈로그를 사용하여 클라우드 개체 스토리지에 연결을 참조하세요. Auto Loader는 증분 처리를 위해 구조적 스트리밍을 사용합니다. 권장 사항과 제한 사항에 대해서는 "Unity Catalog를 사용한 Structured Streaming"의 을 참조하십시오.

참고

Databricks Runtime 11.3 LTS 이상에서는 표준 또는 전용 액세스 모드(이전의 공유 및 단일 사용자 액세스 모드)에서 자동 로더를 사용할 수 있습니다.

디렉터리 목록 모드는 기본적으로 지원됩니다.

Unity 카탈로그의 자동 로더 리소스 위치 지정

Unity 카탈로그 보안 모델은 워크로드에서 참조되는 모든 스토리지 위치가 Unity 카탈로그에서 관리된다고 가정합니다. Databricks는 항상 Unity 카탈로그에서 관리하는 스토리지 위치에 검사점 및 스키마 진화 정보를 저장하는 것이 좋습니다. Unity 카탈로그에서는 테이블 디렉터리 아래에 검사점 또는 스키마 유추 및 진화 파일을 중첩할 수 없습니다.

Unity 카탈로그를 사용하여 클라우드 스토리지에서 데이터 수집

다음 예제에서는 실행 중인 사용자에게 READ FILES 외부 위치에 대한 권한, 대상 테이블에 대한 소유자 권한 및 다음 구성 및 부여가 있다고 가정합니다.

참고

Azure Data Lake Storage는 Unity 카탈로그에서 지원하는 유일한 Azure 스토리지 유형입니다.

스토리지 위치 보조금
abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data READ FILES
abfss://dev-bucket@<storage-account>.dfs.core.windows.net READ FILES WRITE FILES CREATE TABLE

자동 로더를 사용하여 Unity 카탈로그 관리형 테이블에 로드

다음 예제에서는 자동 로더를 사용하여 Unity 카탈로그 관리 테이블에 데이터를 수집하는 방법을 보여 줍니다.

Python

checkpoint_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/_checkpoint/dev_table"

(spark.readStream
  .format("cloudFiles")
  .option("cloudFiles.format", "json")
  .option("cloudFiles.schemaLocation", checkpoint_path)
  .load("abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .trigger(availableNow=True)
  .toTable("dev_catalog.dev_database.dev_table"))

SQL

CREATE OR REFRESH STREAMING TABLE dev_catalog.dev_database.dev_table
AS SELECT * FROM STREAM read_files(
  'abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data',
  format => 'json'
);

Lakeflow Spark 선언적 파이프라인 내의 CREATE STREAMING TABLE 문에서 사용하는 read_files 경우 검사점 및 스키마 위치가 자동으로 관리됩니다.

자동 로더를 사용하여 Unity 카탈로그 외부 테이블에 로드

특정 스토리지 위치에 데이터를 유지하려면 관리되는 테이블 대신 Unity 카탈로그 외부 테이블을 사용합니다. 예를 들어 외부 테이블을 사용하여 비 Databricks 클라이언트와 데이터를 공유하거나 기존 데이터를 등록합니다. 외부 테이블을 사용하면 스토리지 경로를 설정합니다. 외부 테이블 작업을 참조하세요.

Unity 카탈로그 외부 테이블과 함께 자동 로더를 사용하려면 먼저 테이블을 CREATE TABLE ... LOCATION등록한 다음 이름으로 스트리밍합니다. 테이블 위치는 권한이 있는 CREATE EXTERNAL TABLE외부 위치 내에 있어야 합니다. 검사점 위치도 Unity 카탈로그 관리 외부 위치에 있어야 합니다. 테이블 데이터와 별도의 경로를 사용합니다.

checkpoint_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/_checkpoint/dev_table"
table_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/external/dev_table"

# One-time: register the external table in UC.
spark.sql(f"""
  CREATE TABLE IF NOT EXISTS dev_catalog.dev_database.dev_table
  USING DELTA
  LOCATION '{table_path}'
""")

(spark.readStream
  .format("cloudFiles")
  .option("cloudFiles.format", "json")
  .option("cloudFiles.schemaLocation", checkpoint_path)
  .load("abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .trigger(availableNow=True)
  .toTable("dev_catalog.dev_database.dev_table"))