매개변수화된 뷰 만들기 및 관리
Bigtable의 논리 뷰에서 매개변수화된 뷰를 만든 후 매개변수화된 뷰에서 작업을 수행할 수 있습니다.
이 페이지를 읽기 전에 매개변수화된 뷰 개요를 숙지하세요.
시작하기 전에
Google Cloud CLI를 사용하려면 다음 단계를 따르세요.
-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init
필요한 역할
매개변수화된 뷰를 만들고 관리하는 데 필요한 권한을 얻으려면 관리자에게 인스턴스에 대한 Bigtable 관리자 (roles/bigtable.admin) 역할을 부여해 달라고 요청하세요.
또는 인스턴스 수준에서 다음 권한을 요청할 수 있습니다.
- 만들기:
bigtable.logicalViews.create - 업데이트:
bigtable.logicalViews.update - 삭제:
bigtable.logicalViews.delete - 목록:
bigtable.logicalViews.list
매개변수화된 뷰를 만들려면 소스 테이블에 대한 bigtable.tables.readRows 권한도 최소한 있어야 합니다.
매개변수화된 뷰 만들기
매개변수화된 뷰는 VIEW_PARAMETERS() 함수를 포함할 수 있는 SQL SELECT 문으로 정의된 가상 테이블입니다.
매개변수화된 뷰를 만들려면
gcloud bigtable logical-views create
명령어를 사용하세요.
gcloud bigtable logical-views create VIEW \
--instance=INSTANCE \
--query="SELECT * FROM TABLE_ID WHERE STARTS_WITH(_key, CAST(VIEW_PARAMETERS('VIEW_PARAMETERS') AS BYTES))"
다음을 바꿉니다.
VIEW: 새 매개변수화된 뷰의 최대 128자 길이의 ID입니다. ID는 인스턴스의 테이블 ID와 뷰 ID 중에서 고유해야 합니다.INSTANCE: 매개변수화된 뷰를 만들 인스턴스의 ID입니다.TABLE_ID: 소스 테이블의 ID입니다.VIEW_PARAMETERS: 뷰의 매개변수 이름입니다( 작은따옴표로 묶음).VIEW_PARAMETERS()함수에 인수로 전달합니다.
선택사항:
- 매개변수화된 뷰가 삭제되지 않도록 보호하려면 명령어에
--deletion-protection플래그를 추가하세요. 이 설정을 적용하지 않으면 뷰가 삭제될 수 있습니다.--no-deletion-protection을 추가하여 뷰 삭제를 명시적으로 허용할 수도 있습니다. 자세한 내용은 이 문서의 매개변수화된 뷰 업데이트 섹션을 참고하세요.
구조화된 row key로 매개변수화된 뷰 만들기
테이블에서 구조화된 row key를 사용하는 경우 row key의 특정 세그먼트를 기준으로 필터링할 수 있습니다.
예를 들어 구매 내역 테이블의 row key에 # 기호로 구분된 사용자, 구매 날짜의 타임스탬프, 주문 ID가 저장되어 있는 경우 다음과 같이 행 스키마를 지정할 수 있습니다.
field {
field_name: "user_id"
type: { bytesType { encoding { raw {} } } }
}
field {
field_name: "reversed_timestamp"
type: { timestampType { encoding { unixMicrosInt64 { encoding: { orderedCodeBytes: {} } } } } }
}
field {
field_name: "order_id"
type: { stringType { encoding { utf8Bytes {} } } }
}
encoding {
delimitedBytes { delimiter "#" }
}
그런 다음 사용자 ID 필드를 기준으로 필터링하는 뷰를 만들 수 있습니다.
gcloud bigtable logical-views create VIEW \
--instance=INSTANCE \
--query="SELECT * FROM TABLE_ID WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)"
다음을 바꿉니다.
VIEW: 새 매개변수화된 뷰의 최대 128자 길이의 ID입니다. ID는 인스턴스의 테이블 ID와 뷰 ID 중에서 고유해야 합니다.INSTANCE: 매개변수화된 뷰를 만들 인스턴스의 ID입니다.TABLE_ID: 소스 테이블의 ID입니다.
매개변수화된 뷰 업데이트
매개변수화된 뷰는 논리 뷰를 업데이트하는 것과 동일한 방식으로 업데이트합니다.
매개변수화된 뷰 삭제
매개변수화된 뷰는 논리 뷰를 삭제하는 것과 동일한 방식으로 삭제합니다 .
매개변수화된 뷰에 대한 정보 보기
매개변수화된 뷰 목록은 인스턴스의 논리 뷰 목록을 보는 것과 동일한 방식으로 봅니다 .
매개변수화된 뷰 쿼리
매개변수화된 뷰는 일반 테이블과 비슷하게 쿼리하지만 요청에 view_parameters 맵을 제공합니다.
다음 예시에서는 사용자 ID를 기준으로 데이터를 필터링하는 purchase_history_pv라는 매개변수화된 뷰를 쿼리하는 방법을 보여줍니다.
// Assumes 'purchase_history_pv' was created with the definition:
// SELECT * FROM purchases WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)
String query = "SELECT customer_info[email], order_details[status], order_info[items] from purchase_history_pv";
PreparedStatement preparedStatement = dataClient.prepareStatement(query);
BoundStatement boundStatement = preparedStatement.bind().build();
// The user ID is now passed out-of-band in a view parameters map.
Map<String, Value> viewParameters = new HashMap<>();
viewParameters.put("user_id", Value.newBuilder().setType(stringType()).setStringValue(userId).build());
// Execute the query, passing the view parameters using a proto field in the request.
ResultSet rs = dataClient.executeQuery(
boundStatement,
viewParameters
);
이렇게 하면 사용자가 쿼리 자체 내에서 user_id 매개변수를 보거나 조작할 수 없으므로 논리적으로 깔끔하게 분리됩니다.