비동기 보조 색인 쿼리
이 문서에서는 Bigtable에서 비동기 보조 색인을 빌드하기 위한 일반적인 쿼리 패턴의 예를 제공합니다. 이 예에서는 예시 데이터의 ID 및 값과 유사한 ID 및 값을 사용하며 예시 데이터를 사용하여 테스트 테이블을 만들어 쿼리를 테스트할 수 있습니다.
이 페이지를 읽기 전에 비동기 보조 색인 만들기 및 Bigtable용 GoogleSQL을 숙지하세요.
쿼리 예
다음 예에서는 다양한 GoogleSQL 쿼리를 사용하여 비동기 보조 색인을 만드는 방법을 보여줍니다.
column qualifier 및 값을 기반으로 역색인 만들기
다음 쿼리는 유연한 스키마가 있는 column family에서 모든 키-값 쌍을 추출하여 역색인을 만듭니다. MAP_ENTRIES를 사용하여 stats_summary column family가 저장하는 모든 데이터의 배열을 가져온 다음 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이 값으로 캡처한 데이터에 대한 빠른 조회를 가져오려면 다음 예와 같이 새 row key를 사용하여 데이터를 쿼리합니다.
SELECT cell_plan, original_key
FROM `mv_inverted_index`
WHERE stat_description = "connected_cell"
AND stat_value = "2"
기존 데이터를 기반으로 새 row 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은 각 셀 값과 연결된 타임스탬프를 저장합니다.
절에서 WITH_HISTORY=>TRUE 플래그를 사용하면 모든
버전의 데이터와 타임스탬프를 검색할 수 있습니다.FROM 그런 다음 UNPACK 테이블 함수는 각 타임스탬프 값이 별도의 _timestamp 열이 있는 자체 행에 표시되도록 쿼리 결과를 확장합니다. 이렇게 하면 새 row key가 이러한 타임스탬프 값을 기반으로 하는 비동기 보조 색인을 만들어 시간 범위를 기반으로 빠른 조회를 사용할 수 있습니다.
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이 저장하는 데이터의 빠른 조회를 위한 비동기 보조 색인을 만드는 방법을 보여줍니다. 이 쿼리는 sales라는 테이블의 transaction_information column family 내에서 JSON_EXTRACT를 사용하여 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;