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 |