Values
Values
Values 포맷은 각 행을 괄호 안에 출력하는 포맷이에요. INSERT INTO t VALUES ... 문에서 사용되는 포맷이며, 쿼리 결과를 형식화하는 데에도 쓸 수 있습니다. 입력 데이터의 각 필드에서 SQL 표현식을 평가할 수 있는 것이 특징이에요.
출처: 문서
본문
| Input | Output | Alias |
|---|---|---|
| ✔ | ✔ |
Description
Values 포맷은 각 행을 괄호 안에 출력해요.
- 행은 쉼표로 구분되며, 마지막 행 뒤에는 쉼표가 없어요.
- 괄호 안의 값도 쉼표로 구분됩니다.
- 숫자는 따옴표 없이 십진수 형식으로 출력돼요.
- 배열은 [] 안에 출력돼요.
- 문자열, 날짜, 날짜+시간은 따옴표 안에 출력돼요.
- 이스케이프 규칙과 파싱은 TabSeparated 포맷과 비슷해요.
형식화하는 동안 추가 공백은 삽입되지 않지만, 파싱하는 동안에는 공백이 허용되고 건너뛰어져요(단, 배열 값 안의 공백은 허용되지 않아요).
NULL은 NULL로 표현됩니다.
Values 포맷으로 데이터를 전달할 때 이스케이프해야 하는 최소 문자 집합은:
- 작은따옴표
- 백슬래시
이 포맷은 INSERT INTO t VALUES ...에서 사용되는 포맷이지만, 쿼리 결과를 형식화하는 데에도 사용할 수 있어요.
Example usage
Inserting data
Values 포맷은 INSERT가 사용하는 포맷이므로, 어떤 INSERT ... VALUES 문이든 이미 이 포맷을 쓰고 있어요. FORMAT Values 절을 명시적으로 지정할 수 있고, 행은 스트림이나 파일에서 공급할 수 있어요. 각 행은 괄호로 묶인 쉼표로 구분된 튜플이며, 튜플 자체도 쉼표로 구분됩니다.
Query
CREATE TABLE t (id UInt32, name String, values Array(UInt32)) ENGINE = Memory;
INSERT INTO t FORMAT Values (1, 'a', [10, 20]), (2, 'b', [30]);
SELECT * FROM t ORDER BY id;
Response
┌─id─┬─name─┬─values──┐
│ 1 │ a │ [10,20] │
│ 2 │ b │ [30] │
└────┴──────┴─────────┘
Using expressions on input
대부분의 입력 포맷과 달리 Values는 각 필드에서 리터럴만 받는 것이 아니라 SQL 표현식을 평가할 수 있어요. 이 동작은 input_format_values_interpret_expressions(기본 활성화)에 의해 제어됩니다. 빠른 스트리밍 파서가 필드를 읽지 못하면 ClickHouse는 SQL 파서로 폴백해 그 필드를 표현식으로 해석해요.
Query
CREATE TABLE prices (item String, total UInt32) ENGINE = Memory;
INSERT INTO prices FORMAT Values ('apple', 3 * 4), ('pear', length('hello') + 10);
SELECT * FROM prices ORDER BY total;
Response
┌─item──┬─total─┐
│ apple │ 12 │
│ pear │ 15 │
└───────┴───────┘
Selecting data
Values 포맷은 쿼리 결과를 형식화하는 데에도 사용할 수 있어요. 숫자는 따옴표 없이, 배열은 [] 안에, 문자열과 날짜는 작은따옴표 안에 쓰여요. 문자열 안의 작은따옴표와 백슬래시는 백슬래시로 이스케이프되며, NULL은 NULL로 쓰여요.
Query
SELECT 1 AS a, 'O''Reilly' AS b, NULL::Nullable(String) AS c FORMAT Values;
Response
(1,'O\'Reilly',NULL)
Format settings
| Setting | Description | Default |
|---|---|---|
| input_format_values_interpret_expressions | 필드를 스트리밍 파서로 파싱하지 못하면 SQL 파서를 실행해 그 필드를 SQL 표현식으로 해석할지 여부예요. | true |
| input_format_values_deduce_templates_of_expressions | 필드를 스트리밍 파서로 파싱하지 못하면 SQL 파서를 실행해 SQL 표현식의 템플릿을 추론하고, 템플릿으로 모든 행을 파싱한 뒤 모든 행에 대해 표현식을 해석할지 여부예요. | true |
| input_format_values_accurate_types_of_literals | 템플릿으로 표현식을 파싱하고 해석할 때 오버플로와 정밀도 문제를 피하기 위해 리터럴의 실제 타입을 확인할지 여부예요. | true |