설명
TabSeparated 포맷에서는 데이터가 행(row) 단위로 기록됩니다. 각 행은 탭으로 구분된 값들로 이루어집니다. 각 값 뒤에는 탭이 오고, 행의 마지막 값 뒤에는 줄 바꿈(line feed) 문자가 옵니다. 전체적으로 엄격한 Unix 줄 바꿈 문자만 사용한다고 가정합니다. 마지막 행의 끝에도 반드시 줄 바꿈 문자가 있어야 합니다. 값은 따옴표로 감싸지 않은 텍스트 포맷으로 기록되며, 특수 문자는 이스케이프됩니다.
이 포맷은 TSV라는 이름으로도 제공됩니다.
TabSeparated 포맷은 사용자 지정 프로그램과 스크립트로 데이터를 처리할 때 편리합니다. 이 포맷은 HTTP 인터페이스와 command-line client의 batch mode에서 기본값으로 사용됩니다. 또한 이 포맷을 사용하면 서로 다른 DBMS 간에 데이터를 전송할 수 있습니다. 예를 들어 MySQL에서 dump를 가져와 ClickHouse에 업로드할 수 있으며, 반대로도 가능합니다.
TabSeparated 포맷은 합계 값 출력(WITH TOTALS 사용 시)과 극단값 출력(extremes가 1로 설정된 경우)을 지원합니다. 이 경우 합계 값과 극단값은 기본 데이터 뒤에 출력됩니다. 기본 결과, 합계 값, 극단값은 서로 빈 줄로 구분됩니다. 예시:
데이터 포맷팅
YYYY-MM-DD hh:mm:ss 포맷으로 표기되며, 같은 포맷으로 파싱되지만 구분자로는 어떤 문자든 사용할 수 있습니다.
이 모든 작업은 클라이언트 또는 서버(server)가 시작될 당시의 시스템 시간대에서 수행됩니다(데이터를 포맷팅하는 쪽에 따라 달라집니다). 시간이 포함된 날짜의 경우 일광 절약 시간제는 지정되지 않습니다. 따라서 덤프(dump)에 일광 절약 시간제 기간의 시간이 포함되어 있으면, 덤프는 데이터와 일의적으로 대응되지 않으며 파싱 시 두 시간 중 하나가 선택됩니다.
읽기 작업 중에는 잘못된 날짜와 시간이 포함된 날짜가 오류 메시지 없이 자연스러운 오버플로우 또는 null 날짜 및 시간으로 파싱될 수 있습니다.
예외적으로, 시간이 포함된 날짜를 파싱할 때 정확히 10자리 10진수로 이루어진 경우 Unix timestamp 포맷도 지원합니다. 결과는 시간대에 의존하지 않습니다. YYYY-MM-DD hh:mm:ss 포맷과 NNNNNNNNNN 포맷은 자동으로 구분됩니다.
문자열은 특수 문자를 백슬래시로 이스케이프하여 출력됩니다. 출력에는 다음 이스케이프 시퀀스가 사용됩니다: \b, \f, \r, \n, \t, \0, \', \\. 파싱은 또한 \a, \v, \xHH (16진수 이스케이프 시퀀스)와 \c 시퀀스도 지원합니다. 여기서 c는 임의의 문자이며(이 시퀀스들은 c로 변환됩니다). 따라서 데이터를 읽을 때는 줄 바꿈을 \n, \ 또는 실제 줄 바꿈으로 표기하는 포맷도 지원합니다. 예를 들어, 공백 대신 단어 사이에 줄 바꿈이 있는 문자열 Hello world는 다음 변형 중 어느 것으로도 파싱될 수 있습니다:
[] 안에 쉼표로 구분된 값 목록으로 기록됩니다. 배열의 숫자 항목은 일반적인 방식으로 포맷됩니다. Date 및 DateTime 타입은 작은따옴표로 기록됩니다. 문자열도 위와 동일한 이스케이프 규칙을 적용하여 작은따옴표로 기록됩니다.
NULL은 format_tsv_null_representation 설정에 따라 포맷됩니다(기본값은 \N).
입력 데이터에서 ENUM 값은 이름 또는 ID로 표현할 수 있습니다. 먼저 입력 값을 ENUM 이름과 일치시키려고 시도합니다. 실패하고 입력 값이 숫자이면 이 숫자를 ENUM ID와 일치시키려고 시도합니다.
입력 데이터에 ENUM ID만 포함되어 있다면 ENUM 파싱을 최적화하기 위해 input_format_tsv_enum_as_number 설정을 활성화하는 것이 좋습니다.
Nested 구조의 각 요소는 배열로 표현됩니다.
예시:
사용 예시
데이터 삽입
football.tsv인 다음 TSV 파일을 사용합니다:
데이터 읽기
TabSeparated 포맷으로 데이터를 읽습니다: