이 페이지에서는 열 기반 엔진의 표현식에 가상 열을 사용하여 쿼리를 가속화하는 방법을 설명합니다.
열 기반 엔진은 자주 사용되는 표현식의 결과를 구체화하고 캐시할 수 있습니다. AlloyDB는 이러한 결과를 사전 계산하여 저장함으로써 여러 쿼리에서 동일한 표현식을 반복적으로 파싱하고 평가하는 것을 방지합니다. 이 프로세스는 특히 대규모 데이터 세트의 분석 워크로드에 대해 쿼리 성능을 개선하고 CPU 사용량을 줄입니다.
표현식의 가상 열에 대한 몇 가지 사용 사례는 다음과 같습니다.
- JSON 속성 필터링: JSON 열 내의 특정 키-값 쌍을 기반으로 쿼리를 자주 필터링하는 경우
- 복잡한 표현식 평가: 복잡하거나 계산 집약적인 표현식이 포함된 쿼리
표현식 스캔을 위한 가상 열을 사용 설정하면 열 기반 엔진을 사용하고 자주 사용되는 표현식을 포함하는 쿼리가 자동으로 최적화됩니다. 열 기반 엔진은 기본 열을 새로고침할 때 이러한 가상 열을 자동으로 새로고침합니다.
가상 열에서 지원되는 표현식
AlloyDB는 (미리보기) 출시에서 JSON 및 JSONB 열에 대한 -> 및 ->> 연산자를 지원합니다.
시작하기 전에
AlloyDB 클러스터에 열 기반 엔진을 사용 설정합니다. 자세한 내용은 열 기반 엔진 구성을 참고하세요.
쿼리 통계를 사용하여 AlloyDB 쿼리에서 자주 사용되는 표현식을 식별합니다.
열 기반 엔진에 표현식의 기본 열 추가 자세한 내용은 열 스토어 콘텐츠 수동 관리를 참고하세요.
표현식의 가상 열 사용 설정
gcloud beta alloydb instances update 명령어를 사용하여 인스턴스의 표현식에 대한 가상 열 지원을 사용 설정할 수 있습니다.
gcloud CLI를 사용하려면 Google Cloud CLI를 설치 및 초기화하거나 Cloud Shell을 사용합니다.
gcloud beta alloydb instances update INSTANCE_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID \
--update-mode=INPLACE \
--add-database-flags="google_columnar_engine.enable_virtual_columns_scan=on"다음을 바꿉니다.
INSTANCE_ID: AlloyDB 인스턴스 IDREGION_ID: AlloyDB 인스턴스의 리전입니다.CLUSTER_ID: AlloyDB 인스턴스의 클러스터 ID입니다.PROJECT_ID: Google Cloud 프로젝트 ID입니다.
세션 수준에서 이 플래그를 설정하려면 다음을 실행합니다.
SET google_columnar_engine.enable_virtual_columns_scan=on;
표현식의 가상 열 추가
열 기반 엔진에 자주 사용되는 표현식을 추가하려면 psql 클라이언트를 사용하여 google_columnar_engine_add 함수를 호출합니다. 이러한 표현식은 데이터베이스에 이미 있는 열 외에 열 기반 엔진에 열로 채워집니다.
쉼표로 구분된 값으로 여러 표현식을 지정할 수 있습니다.
SELECT google_columnar_engine_add(
relation => 'DB.SCHEMA.TABLE_NAME',
columns => 'COLUMN_NAME, COLUMN_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
다음을 바꿉니다.
DB.SCHEMA: 테이블이 저장된 데이터베이스 스키마입니다.TABLE_NAME: 열이 저장된 테이블의 이름입니다.COLUMN_NAME: 표현식이 포함된 열의 이름입니다.EXP1, EXP2, EXP3: 쉼표로 구분된 표현식 목록입니다. 지원되는 JSON 추출 표현식은->및->>입니다.예를 들어
public스키마의employee테이블에user ->> 'email'및user ->> 'name'표현식을 추가하려면 다음 쿼리를 사용합니다.SELECT google_columnar_engine_add( relation => 'postgres.public.employee', expressions => '"user ->> ''email''", "user ->> ''name''"' );표현식 구문:
- 전체 표현식 값을 작은따옴표로 묶습니다(예:
expressions => 'EXP1,EXP2,EXP3'). - 여러 표현식은 쉼표로 구분합니다.
- 각 개별 표현식을 큰따옴표로 묶습니다.
- 다른 작은따옴표를 사용하여 표현식의 작은따옴표를 이스케이프 처리합니다.
예를 들어
col -> 'level1'및col -> 'level1' ->> 'level2'표현식을 추가하려면 다음 형식을 사용합니다.expressions => '"col -> ''level1''", "col -> ''level1'' ->> ''level2''"'- 전체 표현식 값을 작은따옴표로 묶습니다(예:
표현식의 가상 열 예시
이 예에서는 표현식의 가상 열 기능을 사용하는 방법을 보여줍니다. profile JSONB 열이 있는 users 테이블을 만들고 샘플 데이터로 채웁니다. 그런 다음 쿼리 분석을 기반으로 자주 사용되는 profile ->> 'email' 표현식을 google_columnar_engine_add 함수를 사용하여 열 기반 엔진에 추가합니다. 그런 다음 열 기반 엔진은 이 자주 사용되는 표현식을 사용하여 후속 쿼리를 최적화합니다.
이 예시의 빈번한 표현식을 열 형식 엔진에 추가하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.
리소스 이름 열에서 클러스터 이름을 클릭합니다.
탐색창에서 AlloyDB Studio를 클릭합니다.
profileJSONB 열이 있는users테이블을 만들려면 다음을 실행합니다.CREATE TABLE users ( id int, username TEXT, profile JSONB );샘플 데이터로
users테이블을 채우려면 다음을 실행합니다.INSERT INTO users (id, username, profile) SELECT i, 'user' || i, jsonb_build_object( 'name', 'User ' || i, 'email', 'user' || i || '@example.com', 'active', (i % 2 = 0) ) FROM generate_series(1, 100000) AS i;자주 사용되는 표현식이 포함된 쿼리의 성능을 개선하려면 열 기반 엔진에
profile ->> 'email'표현식을 추가하세요.SELECT google_columnar_engine_add( relation => 'users', columns => 'username, profile', expressions => '"profile ->> ''email''"' );빈번한 표현식을 사용하는 쿼리를 실행하고 쿼리가 완료되는 데 걸리는 시간을 확인합니다.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';표현식의 가상 열 기능을 사용 설정합니다.
SET google_columnar_engine.enable_virtual_columns_scan=on;자주 사용하는 표현식을 사용하는 쿼리를 다시 실행하고 쿼리가 완료되는 데 걸리는 시간을 확인합니다.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';
표현식에 가상 열을 사용 설정하면 쿼리 런타임이 더 빨라집니다.
표현식의 가상 열 보기
특정 테이블에 추가된 모든 표현식을 찾으려면 g_columnar_virtual_columns 뷰를 쿼리합니다.
SELECT * FROM g_columnar_virtual_columns;
출력은 다음과 비슷합니다. 여기서 description 필드에는 테이블 (관계)에 추가된 모든 표현식이 표시됩니다.
SELECT * FROM g_columnar_virtual_columns;
category | expression
database_name | testdb
schemas | {public}
relations | {users}
description | profile->>'email'
column_data_type | text
status | Usable
last_accessed_time | 2026-02-04 06:25:32.499601+00
num_times_accessed | 1
표현식의 가상 열 삭제
표현식을 삭제하려면 google_columnar_engine_drop() 함수를 호출합니다.
SELECT google_columnar_engine_drop(
relation => 'DB.SCHEMA.TABLE_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
EXP1, EXP2, EXP3을 표현식을 추가할 때 사용한 것과 동일한 형식의 테이블에 있는 쉼표로 구분된 표현식 목록으로 바꿉니다.