를 사용하는 일반적인 데이터 로드 패턴 COPY INTO
파일 원본에서 Delta Lake로 데이터를 로드하는 데 사용하는 COPY INTO
일반적인 패턴을 알아봅니다.
COPY INTO
를 사용하기 위한 많은 옵션이 있습니다.
COPY INTO
임시 자격 증명을 이러한 패턴과 함께 사용할 수도 있습니다.
모든 옵션에 대한 전체 참조는 COPY INTO 참조하세요.
COPY INTO
을 위한 대상 테이블 만들기
COPY INTO
기존 델타 테이블을 대상으로 해야 합니다.
CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];
Databricks Runtime 11.3 LTS 이상에서 이러한 테이블에 대한 스키마 설정은 스키마 진화지원하는 형식에 대해 선택 사항입니다. 자세한 내용은
를 사용하여 JSON 데이터 로드 COPY INTO
다음 예제에서는 ADLS Gen2(Azure Data Lake Storage Gen2)의 5개 파일에서 my_json_data
델타 테이블로 JSON 데이터를 로드합니다.
COPY INTO
실행하려면 먼저 이 테이블을 만들어야 합니다. 파일 중 하나에서 이미 로드된 데이터가 있으면 해당 파일에 대해 데이터가 다시 로드되지 않습니다.
COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')
-- The second execution will not copy any data since the first command already loaded the data
COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')
를 사용하여 Avro 데이터 로드 COPY INTO
다음 예제에서는 문의 일부로 추가 SQL 식을 사용하여 ADLS Gen2에서 SELECT
Avro 데이터를 로드합니다.
COPY INTO my_delta_table
FROM (SELECT to_date(dt) dt, event as measurement, quantity::double
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = AVRO
를 사용하여 CSV 파일 로드 COPY INTO
다음 예제에서는 abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1
아래 Azure Data Lake Storage Gen2의 CSV 파일을 델타 테이블에 로드합니다.
COPY INTO target_table
FROM (SELECT key, index, textData, 'constant_value'
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
FORMAT_OPTIONS('header' = 'true')
-- The example below loads CSV files without headers in ADLS Gen2 using COPY INTO.
-- By casting the data and renaming the columns, you can put the data in the schema you want
COPY INTO target_table
FROM (SELECT _c0::bigint key, _c1::int index, _c2 textData
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
COPY INTO
사용하여 스키마 유추 및 진화
이 섹션에서는 COPY INTO
사용하는 일반적인 스키마 유추 및 진화 구성에 대한 예제를 제공합니다.
구문
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');
다음 FORMAT_OPTIONS
는 COPY INTO
을 사용하여 입력 스키마를 자동으로 유추하는 데 사용할 수 있습니다.
inferSchema
: 구문 분석된 레코드의 데이터 형식을 유추할지 또는 모든 열이StringType
형식이라고 가정할지 여부입니다.mergeSchema
: 여러 소스 파일에서 스키마를 유추하고 각 원본 파일의 스키마를 병합할지 여부입니다.원본 파일에 동일한 스키마가 있는 경우, Databricks는
mergeSchema
(FORMAT_OPTIONS
)에서false
의 기본 설정을 사용하는 것을 권장합니다.
대상 스키마를 COPY_OPTIONS
로 발전시키는 데 사용할 수 있는 COPY INTO
가 다음과 같습니다.
mergeSchema
: 입력 스키마를 기반으로 대상 델타 테이블의 스키마를 발전할지 여부입니다.입력 스키마와 대상 스키마가 같으면
mergeSchema
는false
에서COPY_OPTIONS
이 될 수 있습니다.
CSV 스키마 유추 및 진화
다음 예제에서는 my_pipe_data
이라는 스키마 없는 델타 테이블을 만들고 헤더를 사용하여 파이프로 구분된 CSV를 로드합니다.
mergeSchema
true
은 FORMAT_OPTIONS
입력 파일에 헤더 또는 구분 기호 차이가 있을 수 있기 때문입니다.
CREATE TABLE IF NOT EXISTS my_pipe_data;
COPY INTO my_pipe_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = CSV
FORMAT_OPTIONS ('mergeSchema' = 'true',
'delimiter' = '|',
'header' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');
데이터를 로드하는 동안 손상된 파일 무시
로드 중인 데이터가 일부 손상 문제로 인해 읽을 수 없는 경우 ignoreCorruptFiles
에서 true
를 FORMAT_OPTIONS
로 설정하여 해당 파일을 건너뛸 수 있습니다.
COPY INTO
명령의 결과는 num_skipped_corrupt_files
열의 손상으로 인해 건너뛴 파일 수를 반환합니다. 또한 이 메트릭은 Delta 테이블에서 operationMetrics
실행한 후 numSkippedCorruptFiles
아래 DESCRIBE HISTORY
열에 표시됩니다.
손상된 파일은 COPY INTO
에서 추적하지 않으므로 손상이 수정되면 후속 실행에서 다시 로드할 수 있습니다.
COPY INTO
모드에서 VALIDATE
를 실행하면 어떤 파일이 손상되었는지 확인할 수 있습니다.
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')
참고 항목
ignoreCorruptFiles
는 Databricks Runtime 11.3 LTS 이상에서 사용할 수 있습니다.