설명
RowBinaryWithNamesAndTypes 포맷과 유사하지만, 각 셀 앞에 해당 컬럼의 DEFAULT 값을 사용해야 하는지를 나타내는 바이트가 추가로 붙습니다. 이는 RowBinaryWithDefaults 포맷과 정확히 동일한 방식입니다. 이 조합은 스키마가 변경되는 INSERT를 지원합니다. 즉, writer는 헤더에서 컬럼을 생략할 수 있으며(이 경우 대상 컬럼의 DEFAULT가 적용됨), 전송하는 컬럼에 대해서도 개별 셀마다 “컬럼의 DEFAULT 사용”으로 표시할 수 있으므로 이를 NULL과 혼동하지 않습니다.
이 포맷은 입력 전용입니다.
Wire 형식
RowBinaryWithNamesAndTypes와 동일합니다.
- 컬럼 수
N을 나타내는VarUInt - 컬럼 이름을 담은 길이 접두사 방식의
StringN개 N개의 컬럼 타입 — 텍스트 이름 또는 압축 바이너리 인코딩 중 하나이며,output_format_binary_encode_types_in_binary_format/input_format_binary_decode_types_in_binary_format설정으로 제어됩니다.
N개의 셀로 구성됩니다. 각 셀은 다음과 같습니다.
UInt8마커 바이트 1개0x01— 대상 컬럼의DEFAULT표현식을 사용합니다. 뒤에 값 바이트는 오지 않습니다.0x00— 값이 뒤따르며, 컬럼 타입의RowBinary직렬화기를 사용해 직렬화됩니다.Nullable(T)의 경우 값 바이트는Nullable널 바이트(널이 아니면0,NULL이면1)로 시작하고, 널이 아닌 경우 그 뒤에 내부 값이 옵니다.
기본값 vs NULL
Nullable의 내장 널 바이트는 서로 독립적으로 동작합니다. Nullable(UInt32) DEFAULT 42 컬럼은 각 행마다 세 가지 방식으로 전송될 수 있습니다:
스키마 진화
사용 예시
Query
Response
- 헤더에는
Nullable(UInt32)타입의x라는 컬럼이 하나 있습니다. - 단일 셀은
0x01마커를 사용하며, 이는 “DEFAULT 42를 사용”함을 의미합니다.
포맷 설정
RowBinary 계열 포맷에 공통으로 적용됩니다.