구조화된 row key 쿼리

테이블에 구조화된 행 키를 정의하는 행 키 스키마가 있는 경우 SQL을 사용하여 행 키의 개별 세그먼트 또는 열을 쿼리할 수 있습니다.

전역 보조 색인을 포함한 연속 구체화된 뷰는 기본적으로 구조화된 행 키를 생성합니다. 테이블의 행 키 스키마를 만들어 SQL로 쿼리하려는 Bigtable 테이블의 구조화된 행 키를 정의할 수도 있습니다. 자세한 내용은 행 키 스키마 관리를 참고하세요.

구조화된 행 키 스키마가 없는 Bigtable 테이블에서 각 행은 단일 행 키로 색인이 생성됩니다. SQL로 테이블을 쿼리하면 행 키는 SQL에서 기본 키로 사용하는 _key라는 열입니다. 의사 열이 아니므로 테이블에서 SELECT * 쿼리를 실행하면 _key 열의 값이 반환됩니다.

반면 행 키 스키마가 있는 테이블에서 행 키 (기본 키)는 행 키 스키마에서 필드로 이름이 지정된 모든 열의 조합입니다. 테이블에 행 키 스키마를 추가하면 _key 열이 유사 열이 됩니다. 즉, SELECT * 쿼리에는 표시되지 않지만 SELECT _key 문으로 명시적으로 선택할 수 있습니다.

샘플 쿼리

이 섹션의 예시에서는 sales이라는 테이블에 다음 스키마가 있다고 가정합니다.

  field {
    field_name: "user_id"
    type: { bytes_type { encoding { raw {} } } }
  }
  field {
    field_name: "purchase_date"
    type: { string_type { encoding { utf8_bytes {} } } }
  }
  field {
    field_name: "order_number"
    type: { string_type { encoding { utf8_bytes {} } } }
  }
  encoding {
    delimited_bytes { delimiter "#" }
  }

sales 테이블에는 다음 데이터가 포함됩니다. product column family에는 두 개의 열이 있습니다.

행 키 제품
  product_type product_name
'user1#2025-05-20#abcd1233' 'phone' 'iPhone16_pro_max'
'user1#2025-05-20#abcd1235' '신발' 'nike_hyperdunk'
'user2#2025-05-24#defg456' '헤드폰' 'sony_wh_1000mx5'

구조화된 행 키 쿼리 결과

sales 테이블에는 구조화된 행 키가 있으므로 SELECT * 문으로 테이블을 쿼리하면 쿼리에서 행 키의 각 세그먼트를 별도의 열로 반환합니다. Bigtable 테이블에 대한 모든 SQL 쿼리에서와 마찬가지로 column family의 열은 맵으로 표현됩니다.

  SELECT * from sales

결과는 다음과 같이 표시됩니다.

user_id purchase_date order_number 제품
user1 2025-05-20 'abcd1233' { product_type: "phone", product_name: "iPhone16_pro_max" }
user1 2025-05-20 'abcd1235' { product_type: "shoes", product_name: "nike_hyperdunk" }
user2 2025-05-24 'defg456' { product_type: "headphones", product_name: "sony_wh_1000mx5" }

다음 예와 같이 쿼리에서 행 키 열을 지정할 수도 있습니다.

  SELECT
    product[product_type] AS product_type,
    product[product_name] AS product_name
  FROM sales
  WHERE user_id = b"user1"

결과는 다음과 같이 표시됩니다.

product_type product_name
'phone' 'iphone16_pro_max'
'신발' 'nike_hyperdunk'

필터

SQL 함수를 사용하여 행 키 스키마 열을 필터링할 수 있습니다. 다음 예에서는 CURRENT_DATE()2025-05-24를 반환한다고 가정합니다.

  SELECT
    user_id,
    product["product_name"] AS product_name
  FROM
    sales
  WHERE
    PARSE_DATE("YYYY-MM-DD", purchase_date) = CURRENT_DATE()
    AND user_id = b"user2"

결과는 다음과 같습니다.

user_id product_name
user2 'sony_wh_1000mx5'

집계 쿼리

다음 예는 구조화된 행 키 필드에서 집계 쿼리를 사용하는 방법을 보여줍니다.

  SELECT
    user_id,
    product[product_type] AS product_type,
    count(*) AS count
  FROM sales
  GROUP BY 1, 2

쿼리 결과는 다음과 같습니다.

user_id product_type 개수
user1 전화 1
user1 shoes 1
user2 헤드폰 1

원본 행 키

구조화된 행 키가 있는 테이블에서 원래 행 키를 검색하려면 쿼리에서 _key 열을 지정합니다.

  SELECT
    _key, user_id
  FROM sales

쿼리는 다음을 반환합니다.

_key user_id
'user1#2025-05-20#abcd1233' user1
'user1#2025-05-20#abcd1235' user1
'user2#2025-05-24#defg456' user2

다음 단계