다음을 통해 공유


를 사용하는 일반적인 데이터 로드 패턴 COPY INTO

파일 원본에서 Delta Lake로 데이터를 로드하는 데 사용하는 COPY INTO 일반적인 패턴을 알아봅니다.

COPY INTO를 사용하기 위한 많은 옵션이 있습니다. 임시 credentials을 COPY INTO 및 이러한 패턴과 함께 사용할 수 있습니다.

모든 옵션에 대한 전체 참조는 COPY INTO 참조하세요.

COPY INTO을 위한 tables 만들기

기존 Delta table를 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 이상에서 이러한 tables 대한 schema 설정하는 것은 schema 진화지원하는 형식의 경우 선택 사항입니다. 자세한 내용은 사용하여 유추 및 진화를 참조하세요.

를 사용하여 JSON 데이터 로드 COPY INTO

다음 예제에서는 Azure Data Lake Storage Gen2(ADLS Gen2)의 5개 파일에서 Delta table으로 불리는 my_json_dataJSON 데이터를 불러옵니다. COPY INTO 실행하려면 먼저 이 table 만들어야 합니다. 파일 중 하나에서 이미 로드된 데이터가 있으면 해당 파일에 대해 데이터가 다시 로드되지 않습니다.

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 파일을 Delta table로 로드합니다.

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'

Schema COPY INTO를 사용하여 추론 및 진화

이 섹션에서는 COPY INTO사용하는 일반적인 schema 유추 및 진화 구성에 대한 예제를 제공합니다.

구문

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');

다음 FORMAT_OPTIONSCOPY INTO입력 schema 자동으로 유추할 수 있습니다.

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

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

    원본 파일의 schema이 동일한 경우, Databricks는 FORMAT_OPTIONS(false)에서 mergeSchema의 기본 설정을 사용할 것을 권장합니다.

다음 COPY_OPTIONS은/는 COPY INTO를 사용하여 대상 schema을 진화시키기 위해 사용할 수 있습니다.

  • mergeSchema: 입력 schema에 따라, 대상 델타 table의 schema을 진화할지 여부입니다.

    입력 schema과 대상 schema이 동일한 경우에 COPY_OPTIONS에서 mergeSchemafalse될 수 있습니다.

CSV schema 추론 및 발전시키기

다음 예제에서는 스키마 없는 Delta table를 만들고, 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_filescolumn손상으로 인해 건너뛴 파일 수를 반환합니다. 이 메트릭은 Delta table에서 DESCRIBE HISTORY을 실행한 후 numSkippedCorruptFiles 아래의 operationMetricscolumn에 표시됩니다.

손상된 파일은 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 이상에서 사용할 수 있습니다.