CSV 형식

CSV 형식

CSV(Comma Separated Values) 형식은 RFC를 따르는 형식으로, 값을 쉼표로 구분해요. 형식화 시 행은 큰따옴표로 감싸고, 문자열 안의 큰따옴표는 두 개의 큰따옴표로 출력됩니다. 파싱 시 값은 따옴표 유무와 관계없이 파싱될 수 있어요.

출처: 문서

본문

설명 (Description)

쉼표로 구분된 값(Comma Separated Values) 형식(RFC)입니다.

형식화할 때 행은 큰따옴표로 감쌉니다. 문자열 안의 큰따옴표는 연속된 두 개의 큰따옴표로 출력됩니다. 문자 이스케이프에 대한 다른 규칙은 없어요.

  • 날짜와 날짜-시간은 큰따옴표로 감쌉니다.
  • 숫자는 따옴표 없이 출력됩니다.
  • 값은 기본적으로 ,인 구분자 문자로 구분됩니다. 구분자 문자는 format_csv_delimiter 설정에 정의되어 있습니다.
  • 행은 Unix 줄바꿈(LF)으로 구분됩니다.
  • 배열은 CSV에서 다음과 같이 직렬화됩니다:
    • 먼저 배열이 TabSeparated 형식처럼 문자열로 직렬화됩니다
    • 결과 문자열이 큰따옴표로 CSV에 출력됩니다
  • CSV 형식의 튜플은 별도의 컬럼으로 직렬화됩니다(즉 튜플에서의 중첩이 손실됩니다).
$ clickhouse-client --format_csv_delimiter="|" --query="INSERT INTO test.csv FORMAT CSV" < data.csv

기본적으로 구분자는 ,입니다. 자세한 내용은 format_csv_delimiter 설정을 참조하세요.

파싱할 때 모든 값은 따옴표 유무와 관계없이 파싱될 수 있어요. 큰따옴표와 작은따옴표가 모두 지원됩니다. 행도 따옴표 없이 배치될 수 있습니다. 이 경우 구분자 문자나 줄바꿈(CR 또는 LF)까지 파싱됩니다.

그러나 RFC를 위반하여, 따옴표 없는 행을 파싱할 때 앞뒤 공백(spaces)과 탭(tabs)은 무시됩니다.

줄바꿈은 Unix(LF), Windows(CR LF), Mac OS Classic(CR LF) 타입을 지원합니다.

NULL은 format_csv_null_representation 설정에 따라 형식화됩니다(기본값은 \N).

입력 데이터에서 ENUM 값은 이름 또는 id로 표현될 수 있어요. 먼저 입력 값을 ENUM 이름과 일치시키려고 합니다. 실패하고 입력 값이 숫자이면 이 숫자를 ENUM id와 일치시키려고 합니다.

입력 데이터에 ENUM id만 포함되어 있으면 ENUM 파싱을 최적화하기 위해 input_format_csv_enum_as_number 설정을 활성화하는 것이 좋습니다.

사용 예시 (Example usage)

형식 설정 (Format settings)

Setting Description Default Notes
format_csv_delimiter CSV 데이터에서 구분자로 간주할 문자. ,
format_csv_allow_single_quotes 작은따옴표의 문자열 허용. true
format_csv_allow_double_quotes 큰따옴표의 문자열 허용. true
format_csv_null_representation CSV 형식의 사용자 정의 NULL 표현. \N
input_format_csv_empty_as_default CSV 입력의 빈 필드를 기본값으로 처리. true 복잡한 기본 표현식의 경우 input_format_defaults_for_omitted_fields도 활성화해야 함.
input_format_csv_missing_nullable_as_empty_string input_format_csv_empty_as_default 와 관계없이 누락된 Nullable(String) 값을 NULL 대신 빈 문자열로 읽음. false
input_format_csv_enum_as_number CSV 형식에서 삽입된 enum 값을 enum 인덱스로 처리. false
input_format_csv_use_best_effort_in_schema_inference CSV 형식에서 스키마를 추론하기 위해 몇 가지 트윅과 휴리스틱 사용. 비활성화하면 모든 필드가 String으로 추론됨. true
input_format_csv_arrays_as_nested_csv CSV에서 Array를 읽을 때 요소가 중첩 CSV로 직렬화된 후 문자열에 들어갔다고 기대. false
output_format_csv_crlf_end_of_line true로 설정하면 CSV 출력 형식의 줄 끝이 \n 대신 \r\n이 됨. false
input_format_csv_skip_first_lines 데이터 시작 부분에서 지정된 수의 줄을 건너뜀. 0
input_format_csv_detect_header CSV 형식에서 이름과 타입을 가진 헤더 자동 감지. true
input_format_csv_skip_trailing_empty_lines 데이터 끝의 뒤따르는 빈 줄을 건너뜀. false
input_format_csv_trim_whitespaces 따옴표 없는 CSV 문자열의 공백과 탭을 제거. true
input_format_csv_allow_whitespace_or_tab_as_delimiter CSV 문자열의 필드 구분자로 공백 또는 탭 사용 허용. false
input_format_csv_allow_variable_number_of_columns CSV 형식에서 가변 컬럼 수 허용, 추가 컬럼을 무시하고 누락 컬럼에 기본값 사용. false
input_format_csv_use_default_on_bad_values 잘못된 값으로 CSV 필드 역직렬화에 실패했을 때 컬럼에 기본값 설정 허용. false
input_format_csv_try_infer_numbers_from_strings 스키마 추론 중 문자열 필드에서 숫자 추론 시도. false

더 알아보기 (Learn more)