Bigtable의 데이터 유형 시행

Bigtable의 유연한 스키마를 사용하면 문자열, 날짜, 숫자, JSON 문서, 이미지 또는 PDF와 같은 모든 유형의 데이터를 Bigtable 테이블에 저장할 수 있습니다.

이 문서에서는 Bigtable에서 유형을 적용하여 애플리케이션 코드에서 인코딩하거나 디코딩해야 하는 경우를 설명합니다. Bigtable 데이터 유형 목록은 데이터 API 참조 문서의 유형을 참고하세요.

강제 유형

다음 데이터에는 데이터 유형이 적용됩니다.

  • Column family 집계 (카운터)
  • 타임스탬프
  • 구체화된 뷰

집계

aggregate 데이터 유형의 경우 인코딩은 집계 유형에 따라 다릅니다. 집계 column family를 만들 때는 집계 유형을 지정해야 합니다.

이 표에는 각 집계 유형의 입력 유형과 인코딩이 표시되어 있습니다.

집계 유형 입력 유형 인코딩
합계 Int64 BigEndianBytes
최소 Int64 BigEndianBytes
최대 Int64 BigEndianBytes
HLL 바이트 Zetasketch HLL++

SQL을 사용하여 집계 셀의 데이터를 쿼리하면 SQL에서 자동으로 유형 정보를 통합합니다.

Data API의 ReadRows 메서드를 사용하여 집계 셀의 데이터를 읽으면 Bigtable에서 바이트를 반환하므로 애플리케이션은 Bigtable에서 유형이 지정된 데이터를 바이트에 매핑하는 데 사용한 인코딩을 사용하여 값을 디코딩해야 합니다.

비집계 데이터가 포함된 column family를 집계 column family로 변환할 수 없습니다. 집계 column family 열에는 비집계 셀을 포함할 수 없으며 표준 column family에는 집계 셀을 포함할 수 없습니다.

집계 column family가 있는 테이블 만들기에 대한 자세한 내용은 테이블 만들기를 참고하세요. 인코딩된 값으로 집계 셀을 증가시키는 방법을 보여주는 코드 샘플은 값 증가를 참고하세요.

타임스탬프

각 Bigtable 셀에는 Int64 타임스탬프가 있으며, 이 타임스탬프는 최대 정밀도 단위가 밀리초인 마이크로초 값이어야 합니다. Bigtable은 3023483279876543과 같은 마이크로초 정밀도의 타임스탬프를 거부합니다. 이 예시에서 허용되는 타임스탬프 값은 3023483279876000입니다. 타임스탬프는 Unix epoch(1970-01-01 00:00:00 UTC) 이후의 마이크로초 수입니다.

연속 구체화된 뷰

연속 구체화된 뷰는 SQL을 사용하거나 ReadRows Data API 호출을 사용하여 읽을 수 있는 읽기 전용 리소스입니다. 구체화된 뷰의 데이터는 이를 정의하는 쿼리를 기반으로 입력됩니다. 개요는 연속 구체화된 뷰를 참고하세요.

SQL을 사용하여 연속 구체화된 뷰를 쿼리하면 SQL에서 자동으로 유형 정보를 통합합니다.

Data API ReadRows 요청을 사용하여 연속 구체화된 뷰에서 읽기를 실행할 때는 각 열의 유형을 알고 애플리케이션 코드에서 디코딩해야 합니다.

연속 구체화된 뷰의 집계된 값은 뷰 정의의 열 출력 유형에 따라 다음 표에 설명된 인코딩을 사용하여 저장됩니다.

유형 인코딩
BOOL 1바이트 값, 1 = true, 0 = false
BYTES 인코딩 없음
INT64 (또는 INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) 64비트 big-endian
FLOAT64 64비트 IEEE 754(NaN 및 +/-inf 제외)
문자열 UTF-8
시간/타임스탬프 Unix epoch 이후의 마이크로초 수를 나타내는 64비트 정수 (GoogleSQL과 일치)
자세한 내용은 Data API 참조의 인코딩을 참고하세요.

구조화된 row key

구조화된 행 키를 사용하면 관계형 데이터베이스의 복합 키와 유사한 다중 열 키를 사용하여 데이터에 액세스할 수 있습니다.

구조화된 행 키의 유형과 인코딩은 Bigtable 테이블에 선택적으로 추가할 수 있는 행 키 스키마에 의해 정의됩니다. 구조화된 행 키 데이터는 바이트로 저장되지만 테이블에서 SQL 쿼리를 실행하면 Bigtable용 GoogleSQL이 행 키 스키마에 정의된 유형과 인코딩을 자동으로 사용합니다.

ReadRows 요청으로 테이블을 쿼리하는 데 행 키 스키마를 사용하는 것은 지원되지 않습니다. 연속 구체화된 뷰에는 기본적으로 행 키 스키마가 있습니다. 구조화된 행 키에 대한 자세한 내용은 행 키 스키마 관리를 참고하세요.

강제되지 않는 유형

유형 정보가 제공되지 않으면 Bigtable은 각 셀을 인코딩이 알려지지 않은 바이트로 취급합니다.

유형 강제 없이 생성된 column family를 쿼리할 때는 데이터를 올바르게 읽을 수 있도록 읽기 시간에 유형 정보를 제공해야 합니다. 이는 동작이 데이터 유형에 따라 달라지는 데이터베이스 함수와 관련이 있습니다. Bigtable용 GoogleSQL은 쿼리 시간에 유형 변환을 실행하는 CAST 함수를 제공합니다. 이러한 함수는 바이트에서 다양한 함수가 예상하는 유형으로 변환합니다.

Bigtable은 유형을 적용하지 않지만 특정 작업에서는 데이터 유형을 가정합니다. 이를 알면 데이터베이스 내에서 처리할 수 있는 방식으로 데이터를 작성할 수 있습니다. 예시는 다음과 같습니다.

  • ReadModifyWriteRow를 사용하여 증분하면 셀에 64비트 big-endian 부호 있는 정수가 포함되어 있다고 가정합니다.
  • SQL의 TO_VECTOR64 함수는 셀에 64비트 부동 소수점 숫자의 big-endian 바이트가 연결된 바이트 배열이 포함되어야 합니다.
  • SQL의 TO_VECTOR32 함수는 셀에 32비트 부동 소수점 숫자의 빅엔디언 바이트가 연결된 바이트 배열이 포함되어야 합니다.

다음 단계