다음을 통해 공유


를 사용하는 일반적인 데이터 로드 패턴 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_OPTIONSCOPY INTO을 사용하여 입력 스키마를 자동으로 유추하는 데 사용할 수 있습니다.

  • inferSchema: 구문 분석된 레코드의 데이터 형식을 유추할지 또는 모든 열이 StringType형식이라고 가정할지 여부입니다.

  • mergeSchema: 여러 소스 파일에서 스키마를 유추하고 각 원본 파일의 스키마를 병합할지 여부입니다.

    원본 파일에 동일한 스키마가 있는 경우, Databricks는 mergeSchema(FORMAT_OPTIONS)에서 false의 기본 설정을 사용하는 것을 권장합니다.

대상 스키마를 COPY_OPTIONS로 발전시키는 데 사용할 수 있는 COPY INTO가 다음과 같습니다.

  • mergeSchema: 입력 스키마를 기반으로 대상 델타 테이블의 스키마를 발전할지 여부입니다.

    입력 스키마와 대상 스키마가 같으면 mergeSchemafalse에서 COPY_OPTIONS이 될 수 있습니다.

CSV 스키마 유추 및 진화

다음 예제에서는 my_pipe_data 이라는 스키마 없는 델타 테이블을 만들고 헤더를 사용하여 파이프로 구분된 CSV를 로드합니다.

mergeSchema trueFORMAT_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에서 trueFORMAT_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 이상에서 사용할 수 있습니다.