표현식의 가상 열은 JSON 속성의 필터와 같이 동일한 표현식을 반복적으로 평가하는 열 기반 엔진 쿼리의 속도를 높입니다. 이 기능은 PostgreSQL 16 이상에서 사용할 수 있습니다.
열 기반 엔진은 자주 사용되는 표현식의 결과를 구체화하고 캐시할 수 있습니다. AlloyDB는 이러한 결과를 미리 계산하고 저장하여 여러 쿼리에서 동일한 표현식을 반복적으로 파싱하고 평가하지 않습니다. 이 프로세스는 특히 대규모 데이터 세트의 분석 워크로드에서 쿼리 성능을 개선하고 CPU 소비를 줄입니다.
표현식의 가상 열에 대한 몇 가지 사용 사례는 다음과 같습니다.
- JSON 속성 필터링: JSON 열 내의 특정 키-값 쌍을 기반으로 쿼리를 자주 필터링하는 경우
- 복잡한 표현식 평가: 복잡하거나 계산 집약적인 표현식이 포함된 쿼리입니다.
표현식 스캔에 가상 열을 사용 설정하면 열 기반 엔진을 사용하고 자주 사용되는 표현식이 포함된 쿼리가 자동으로 최적화됩니다. 열 기반 엔진은 기본 열을 새로고침할 때 이러한 가상 열을 자동으로 새로고침합니다.
가상 열에서 지원되는 표현식
AlloyDB는 (프리뷰) 출시에서 JSON 및 JSONB 열에 -> 및 ->> 연산자를 지원합니다.
시작하기 전에
AlloyDB 클러스터에 열 기반 엔진을 사용 설정합니다. 자세한 내용은 열 기반 엔진 구성을 참조하세요.
쿼리 통계를 사용하여 AlloyDB 쿼리에서 자주 사용되는 표현식을 식별합니다.
표현식의 기본 열을 열 기반 엔진에 추가합니다. 자세한 내용은 열 스토어 콘텐츠 수동 관리를 참고하세요.
표현식에 가상 열 사용 설정
표현식의 가상 열 지원은 기본적으로 사용 설정되어 있습니다 (google_columnar_engine.enable_virtual_columns_scan=on). 이 플래그가 이전에 사용 중지된 경우 gcloud alloydb instances update 명령어를 사용하여 인스턴스에 사용 설정할 수 있습니다.
gcloud CLI를 사용하려면 Google Cloud CLI를 설치 및 초기화하거나 Cloud Shell을 사용합니다.
gcloud alloydb instances update INSTANCE_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID \
--database-flags="google_columnar_engine.enable_virtual_columns_scan=on"다음을 바꿉니다.
INSTANCE_ID: AlloyDB 인스턴스 ID입니다.REGION_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 테이블을 만들고 샘플 데이터로 채웁니다. 그런 다음 쿼리 분석을 기반으로 google_columnar_engine_add 함수를 사용하여 자주 사용되는 profile ->> 'email' 표현식을 열 기반 엔진에 추가합니다. 그러면 열 기반 엔진은 이 빈번한 표현식을 사용하여 후속 쿼리를 최적화합니다.
이 자주 사용하는 표현식 예시를 열 기반 엔진에 추가하려면 다음 단계를 따르세요.
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''"' );표현식의 가상 열 기능을 사용 중지하여 성능 기준을 설정한 다음 자주 사용되는 표현식을 사용하는 쿼리를 실행하고 쿼리가 완료되는 데 걸리는 시간을 관찰합니다.
SET google_columnar_engine.enable_virtual_columns_scan=off; 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 필드는 테이블 (관계)에 추가된 모든 표현식을 보여줍니다.
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를 표현식을 추가할 때 사용한 것과 동일한 형식의 테이블에 있는 쉼표로 구분된 표현식 목록으로 바꿉니다.