Bigtable의 데이터 유형 적용

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

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

적용되는 유형

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

  • 집계 column family (카운터)
  • 타임스탬프
  • 연속 구체화된 뷰
  • 정형 row key

집계

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

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

집계 유형 입력 유형 인코딩
합계 Int64 BigEndianBytes
Min 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 셀에는 유닉스 시간 1970-01-01 00:00:00 UTC 이후의 마이크로초 수를 나타내는 Int64 타임스탬프가 있습니다.

타임스탬프 출처

Bigtable 테이블의 모든 타임스탬프에는 타임스탬프가 설정된 방식을 나타내는 출처가 있습니다. Bigtable은 다음 타임스탬프 출처를 인식합니다.

  • 사용자 지정: 사용자 또는 애플리케이션에서 설정한 타임스탬프입니다.
  • Bigtable 생성: 클라이언트의 로컬 시스템 시계를 사용하는 클라이언트 라이브러리에서 설정한 타임스탬프 또는 서버의 현재 시간을 사용하는 서버 생성 타임스탬프입니다.

타임스탬프 세분화 및 정밀도

Bigtable은 다음과 같은 타임스탬프 세분화 수준을 지원합니다.

  • 밀리초 세분성(기본값): 타임스탬프는 최대 정밀도 단위가 밀리초인 마이크로초 값(예: 3023483279876000)이어야 합니다. Bigtable은 마이크로초 정밀도의 사용자 지정 타임스탬프를 거부하고 마이크로초 정밀도의 Bigtable 생성 타임스탬프를 밀리초 정밀도로 자릅니다.
  • 마이크로초 세분성: 타임스탬프는 3023483279876543과 같은 전체 마이크로초 정밀도를 가질 수 있습니다. Bigtable은 마이크로초 정밀도로 사용자가 지정하고 Bigtable에서 생성한 타임스탬프를 허용합니다.

테이블을 만들 때 타임스탬프 단위를 설정합니다.

타임스탬프 제한사항

마이크로초 타임스탬프 세분성이 있는 테이블에는 다음 제한사항이 적용됩니다.

  • Java용 Bigtable 클라이언트 라이브러리 버전 2.82.0 이상만 마이크로초 타임스탬프 세분화 수준을 지원합니다. 다른 클라이언트를 사용하는 읽기 또는 쓰기 요청은 실패합니다.
  • 마이크로초 타임스탬프 세분화는 Enterprise Plus 버전의 인스턴스에만 사용할 수 있습니다.
  • 테이블을 만든 후에는 타임스탬프 단위를 변경할 수 없습니다.
  • 마이크로초 단위의 테이블에는 연속 구체화된 뷰를 만들 수 없습니다.
  • 마이크로초 단위로 테이블에 논리적 뷰를 만들 수 없습니다.
  • 마이크로초 단위의 테이블이 포함된 경우 인스턴스를 Enterprise Plus에서 Enterprise로 다운그레이드할 수 없습니다. 다운그레이드를 시작하기 전에 이러한 테이블을 삭제해야 합니다.
  • 마이크로초 단위의 테이블 백업은 Enterprise Plus 인스턴스로만 복원할 수 있습니다.

연속 구체화된 뷰

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

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

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

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

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

정형 row key

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

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

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

적용되지 않는 유형

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

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

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

  • ReadModifyWriteRow를 사용하는 증분은 셀에 64비트 빅 엔디안 부호 있는 정수가 포함되어 있다고 가정합니다.
  • SQL의 TO_VECTOR64 함수는 셀에 64비트 부동 소수점 숫자의 빅 엔디안 바이트를 연결한 바이트 배열이 포함될 것으로 예상합니다.
  • SQL의 TO_VECTOR32 함수는 셀에 32비트 부동 소수점 숫자의 빅엔디안 바이트를 연결한 바이트 배열이 포함될 것으로 예상합니다.

다음 단계