비동기 보조 색인 쿼리

이 문서에서는 Bigtable에서 비동기 보조 색인을 빌드하기 위한 일반적인 쿼리 패턴의 예를 제공합니다. 예시에서는 예시 데이터와 비슷한 ID와 값을 사용하며 테스트 테이블을 만들어 쿼리를 테스트할 수 있습니다.

이 페이지를 읽기 전에 비동기 보조 색인 만들기Bigtable용 GoogleSQL을 숙지하세요.

쿼리 예

다음 예에서는 다양한 GoogleSQL 쿼리를 사용하여 비동기 보조 색인을 만드는 방법을 보여줍니다.

열 한정자 및 값을 기반으로 역색인 만들기

다음 쿼리는 유연한 스키마가 있는 column family에서 모든 키-값 쌍을 추출하여 역색인을 만듭니다. MAP_ENTRIES를 사용하여 stats_summary 열 패밀리가 저장하는 모든 데이터의 배열을 가져온 다음 UNNEST를 사용하여 각 키-값 쌍을 별도의 행으로 변환합니다. 결과 색인을 사용하면 stat_descriptionstat_value에 기반한 빠른 조회가 가능합니다. 소스 테이블에 새로운 유형의 통계를 추가하면 Bigtable이 비동기 색인에 이를 자동으로 포함합니다.

SELECT
 stats.key as stat_description,
 stats.value as stat_value,
 _key as original_key,
 cell_plan as cell_plan
FROM test_table
CROSS JOIN UNNEST(MAP_ENTRIES(stats_summary)) stats
ORDER BY stat_description, stat_value, original_key

기존 데이터를 기반으로 새 행 키 만들기

다음 예에서는 cell_plan column family에 저장된 데이터 요금제를 분류하여 새 색인 키 total_plan_capacity를 만듭니다. 이 쿼리는 MAP_KEYS를 사용하여 cell_plan의 모든 키를 가져오고 ARRAY_INCLUDES_ANY를 사용하여 특정 데이터 계획 키를 필터링합니다. 그런 다음 CASE 문은 이러한 데이터 요금제의 존재 여부와 값을 기반으로 total_plan_capacity 카테고리를 할당하는 로직을 정의합니다. 이를 통해 결합된 데이터 요금제 용량을 기반으로 효율적인 조회가 가능합니다.

SELECT
 CASE
    WHEN
     cell_plan['data_plan_01gb'] = "true"
     AND (cell_plan['data_plan_05gb'] = "false" OR cell_plan['data_plan_05gb'] IS NULL)
     AND (cell_plan['data_plan_10gb'] = "false" OR cell_plan['data_plan_10gb'] IS NULL)
   THEN 'x-small'

   WHEN
     cell_plan['data_plan_01gb'] = "true"
     AND (cell_plan['data_plan_05gb'] = "true")
     AND (cell_plan['data_plan_10gb'] = "false" OR cell_plan['data_plan_10gb'] IS NULL)
   THEN 'small'

   WHEN
     cell_plan['data_plan_01gb'] = "true"
     AND (cell_plan['data_plan_05gb'] = "false" OR cell_plan['data_plan_05gb'] IS NULL)
     AND (cell_plan['data_plan_10gb'] = "true")
   THEN 'medium'

   WHEN
     (cell_plan['data_plan_01gb'] = "false" OR cell_plan['data_plan_01gb'] IS NULL)
     AND (cell_plan['data_plan_05gb'] = "true")
     AND (cell_plan['data_plan_10gb'] = "true")
   THEN 'large'

   WHEN
     cell_plan['data_plan_01gb'] = "true"
     AND (cell_plan['data_plan_05gb'] = "true")
     AND (cell_plan['data_plan_10gb'] = "true")
   THEN 'x-large'
 END as total_plan_capacity,
 _key as original_key,
 stats_summary
FROM test_table
WHERE ARRAY_INCLUDES_ANY(MAP_KEYS(cell_plan), ["data_plan_01gb", "data_plan_05gb","data_plan_10gb"])
ORDER BY total_plan_capacity, original_key

시계열 기반 색인 만들기

Bigtable은 각 셀 값과 연결된 타임스탬프를 저장합니다. FROM 절에서 WITH_HISTORY=>TRUE 플래그를 사용하면 모든 버전의 데이터와 타임스탬프를 가져올 수 있습니다. 그런 다음 UNPACK 테이블 함수는 각 타임스탬프 값이 별도의 _timestamp 열이 있는 자체 행에 표시되도록 쿼리 결과를 확장합니다. 이렇게 하면 새 행 키가 이러한 타임스탬프 값을 기반으로 하는 비동기 보조 색인을 만들어 시간 범위를 기반으로 하는 빠른 조회를 지원할 수 있습니다.

SELECT
 _timestamp as stats_timestamp,
 _key as original_key,
 stats_summary
FROM UNPACK((
 select
   _key,
   stats_summary
  FROM
 test_table (WITH_HISTORY=>TRUE)
))
ORDER BY stats_timestamp, original_key

JSON 셀의 항목 및 값에 대한 색인 항목 만들기

Bigtable은 JSON과 같은 형식의 데이터를 비롯한 대규모 워크로드의 키-값 저장소로 자주 사용됩니다. 다음 예에서는 JSON이 저장하는 데이터를 빠르게 조회하기 위해 비동기 보조 색인을 만드는 방법을 보여줍니다. 이 쿼리는 JSON_EXTRACT를 사용하여 sales라는 테이블의 transaction_information column family 내에 있는 JSON 문자열에서 store_id을 추출합니다. 이 색인을 사용하면 특정 매장 ID별로 판매 거래를 빠르게 검색할 수 있습니다.

SELECT
JSON_EXTRACT(transaction_information["json"], "$.store_id") as store_id,
_key as original_key,
transaction_information
from sales
ORDER BY store_id, original_key;

다음 단계