테이블 지원 및 스키마

테이블 지원 및 스키마

이 주제는 Snowpipe Streaming이 지원하는 테이블 타입, 데이터 타입, 스키마 기능을 다룹니다.

출처: Snowflake 문서

본문

Apache Iceberg™ 테이블 지원

Snowpipe Streaming은 Snowflake 관리형 Apache Iceberg™ 테이블 — Iceberg v2와 Iceberg v3 테이블을 모두 포함 — 로의 수집을 지원합니다. 자세한 내용은 고성능 아키텍처의 Snowpipe Streaming: Apache Iceberg™ 테이블 을 참고하세요.

스키마 진화

Snowpipe Streaming은 ENABLE_SCHEMA_EVOLUTION = TRUE로 설정된 테이블에서 테이블 스키마의 자동 진화를 지원합니다. Snowflake는 들어오는 스트림의 지원되는 새 최상위(top-level) 필드를 추론하고 해당 열을 추가합니다. 스키마 진화는 append가 내구성 있게 승인된 후 비동기적으로 발생합니다. Snowflake는 들어오는 행이 필수 열을 생략할 때 NOT NULL 제약 조건을 제거할 수도 있습니다. 자세한 내용은 테이블 스키마 진화 를 참고하세요.

스키마 진화의 제한 사항:

  • 기존 열의 정밀도(precision), 스케일(scale), 또는 길이를 자동으로 증가시킬 수 없습니다.
  • 표준 Snowflake 테이블의 경우 구조화 데이터 타입에 대해 스키마 진화가 지원되지 않습니다. 구조화 값을 포함하는 새 열은 대신 VARIANT로 추론됩니다.
  • Snowflake 관리형 Iceberg 테이블의 경우 v2와 v3 모두 JSON 숫자, 불리언, 문자열, 날짜, 시간, 타임스탬프에서 추론된 새 최상위 열을 지원합니다.
  • 중첩된 JSON 객체는 VARIANT로 추론되며 Iceberg v3에서만 열을 추가할 수 있습니다. VARIANT는 Iceberg v2에서 지원되지 않습니다.
  • 목록(list)과 배열(array)은 Iceberg v2 또는 v3에서 열을 추가할 수 없습니다. 스키마 진화는 구조화된 ARRAY, OBJECT, 또는 MAP 열을 만들지 않습니다. 이러한 열은 테이블 생성 시 정의하세요.
  • BINARY, GEOGRAPHY, GEOMETRY 열은 관리형 Iceberg 테이블에서 지원되지만 들어오는 JSON 값에서 추론되지는 않습니다. 테이블 생성 시 이러한 열을 정의하세요.
  • 나노초 타임스탬프는 Iceberg v3가 필요합니다. Iceberg v2는 기본 스케일 강제 변환(default-scale coercion)이 활성화된 경우 마이크로초 정밀도로 값을 수집할 수 있으며, 그렇지 않으면 행이 거부됩니다.
  • 관찰된 값이 null뿐인 새 필드는 VARCHAR로 추가됩니다.
  • 외부 관리형 Iceberg 테이블과 외부 테이블은 지원되지 않습니다.

Insert-only 작업

API는 현재 행 삽입으로 제한됩니다. 데이터를 수정, 삭제, 결합하려면 "원시" 레코드를 하나 이상의 스테이징 테이블에 쓰세요. 연속 데이터 파이프라인 을 사용해 데이터를 병합, 조인, 변환해 수정된 데이터를 대상 보고 테이블에 삽입하세요.

지원되는 Java 데이터 타입

다음 표는 Snowflake 열로 수집하기 위해 지원되는 Java 데이터 타입을 요약합니다.

Snowflake 열 타입 허용되는 Java 데이터 타입
CHAR
VARCHAR String
원시 데이터 타입 (int, boolean, char, …)
BigInteger, BigDecimal
BINARY byte[]
String (hex-encoded)
NUMBER 숫자 타입 (BigInteger, BigDecimal, byte, int, double, …)
String
FLOAT 숫자 타입 (BigInteger, BigDecimal, byte, int, double, …)
String
BOOLEAN boolean
숫자 타입 (BigInteger, BigDecimal, byte, int, double, …)
String
boolean 변환 세부 사항 참조.
TIME java.time.LocalTime
java.time.OffsetTime
String

정수 저장 시간 HH24:MI:SS.FFTZH:TZM (예: 20:57:01.123456789+07:00) HH24:MI:SS.FF (예: 20:57:01.123456789) HH24:MI:SS (예: 20:57:01) HH24:MI (예: 20:57) | | DATE | java.time.LocalDate java.time.LocalDateTime java.time.OffsetDateTime java.time.ZonedDateTime java.time.Instant String

정수 저장 날짜 YYYY-MM-DD (예: 2013-04-28) YYYY-MM-DDTHH24:MI:SS.FFTZH:TZM (예: 2013-04-28T20:57:01.123456789+07:00) YYYY-MM-DDTHH24:MI:SS.FF (예: 2013-04-28T20:57:01.123456) YYYY-MM-DDTHH24:MI:SS (예: 2013-04-28T20:57:01) YYYY-MM-DDTHH24:MI (예: 2013-04-28T20:57) YYYY-MM-DDTHH24:MI:SSTZH:TZM (예: 2013-04-28T20:57:01-07:00) YYYY-MM-DDTHH24:MITZH:TZM (예: 2013-04-28T20:57-07:00) | | TIMESTAMP_NTZ TIMESTAMP_LTZ TIMESTAMP_TZ | java.time.LocalDate java.time.LocalDateTime java.time.OffsetDateTime java.time.ZonedDateTime java.time.Instant String

정수 저장 타임스탬프 YYYY-MM-DD (예: 2013-04-28) YYYY-MM-DDTHH24:MI:SS.FFTZH:TZM (예: 2013-04-28T20:57:01.123456789+07:00) YYYY-MM-DDTHH24:MI:SS.FF (예: 2013-04-28T20:57:01.123456) YYYY-MM-DDTHH24:MI:SS (예: 2013-04-28T20:57:01) YYYY-MM-DDTHH24:MI (예: 2013-04-28T20:57) YYYY-MM-DDTHH24:MI:SSTZH:TZM (예: 2013-04-28T20:57:01-07:00) YYYY-MM-DDTHH24:MITZH:TZM (예: 2013-04-28T20:57-07:00) | | VARIANT ARRAY | String (유효한 JSON이어야 함) 원시 데이터 타입 및 그 배열 BigInteger, BigDecimal java.time.LocalTime java.time.OffsetTime java.time.LocalDate java.time.LocalDateTime java.time.OffsetDateTime java.time.ZonedDateTime java.util.Map (T는 유효한 VARIANT 타입) T[] (T는 유효한 VARIANT 타입) List (T는 유효한 VARIANT 타입) | | OBJECT | String (유효한 JSON 객체여야 함) Map (T는 유효한 variant 타입) | | GEOGRAPHY | 지원됨 | | GEOMETRY | 지원됨 |

더 알아보기 (Learn more)