비동기 보조 색인 쿼리
이 문서에서는 Bigtable에서 비동기 보조 색인을 빌드하기 위한 일반적인 쿼리 패턴의 예를 제공합니다. 예시에서는 예시 데이터와 비슷한 ID와 값을 사용하며 테스트 테이블을 만들어 쿼리를 테스트할 수 있습니다.
이 페이지를 읽기 전에 비동기 보조 색인 만들기 및 Bigtable용 GoogleSQL을 숙지하세요.
쿼리 예
다음 예에서는 다양한 GoogleSQL 쿼리를 사용하여 비동기 보조 색인을 만드는 방법을 보여줍니다.
열 한정자 및 값을 기반으로 역색인 만들기
다음 쿼리는 유연한 스키마가 있는 column family에서 모든 키-값 쌍을 추출하여 역색인을 만듭니다. MAP_ENTRIES
를 사용하여 stats_summary
열 패밀리가 저장하는 모든 데이터의 배열을 가져온 다음 UNNEST
를 사용하여 각 키-값 쌍을 별도의 행으로 변환합니다. 결과 색인을 사용하면 stat_description
및 stat_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
따라서 원래 stats_summary
column family의 각 키-값 쌍에는 연속 구체화된 뷰의 자체 행이 있습니다.
stat_description (키) | stat_value (키) | original_key (키) | cell_plan |
---|---|---|---|
connected_cell | "2" | phone#4c410523#20190501 | { "data_plan_01gb": "true", "data_plan_05gb": "false" } |
os_build | PQ2A.190401.002 | phone#5c10102#20190501 | { "data_plan_10gb": "false" } |
Bigtable에서 값으로 캡처한 데이터를 빠르게 조회하려면 다음 예와 같이 새 행 키를 사용하여 데이터를 쿼리합니다.
SELECT cell_plan, original_key
FROM `mv_inverted_index`
WHERE stat_description = "connected_cell"
AND stat_value = "2"
기존 데이터를 기반으로 새 행 키 만들기
다음 예에서는 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;