파라미터화된 뷰 만들기 및 관리
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 문으로 정의된 가상 테이블입니다.
콘솔
Google Cloud 콘솔에서 Bigtable 인스턴스 목록을 엽니다.
목록에서 인스턴스를 선택합니다.
탐색창에서 Bigtable Studio를 클릭합니다.
새 탭 메뉴를 클릭하여 새 탭을 연 다음 편집기를 선택합니다.
쿼리 편집기에서 SQL 쿼리를 작성합니다. 쿼리 정의는
VIEW_PARAMETERS()함수를 호출하여 하나 이상의 뷰 매개변수를 지정해야 합니다. 예를 들면 다음과 같습니다.SELECT * FROM TABLE_ID WHERE STARTS_WITH(_key, CAST(VIEW_PARAMETERS('PARAM_NAME') AS BYTES))다음을 바꿉니다.
TABLE_ID: 소스 테이블의 ID입니다.PARAM_NAME:VIEW_PARAMETERS()함수에 인수로 전달할 뷰 매개변수의 이름입니다(작은따옴표로 묶임). 이는 런타임 값이 아닌 매개변수 이름을 정의합니다. 매개변수화된 뷰를 쿼리할 때 런타임 값을 제공합니다.
쿼리가 유효한 SQL이면 유효 메시지가 표시됩니다.
선택사항: SQL 스타일로 문 형식을 지정하려면 형식을 클릭합니다.
저장을 클릭한 다음 논리적 뷰로 저장을 선택합니다.
논리적 뷰 저장 대화상자에 뷰 이름을 입력한 다음 저장을 클릭합니다.
뷰가 탐색기 창의 논리적 뷰 목록에 variable_add 매개변수화된 뷰 아이콘과 함께 표시됩니다.
쿼리 편집기 사용에 대한 자세한 내용은 Bigtable Studio를 사용하여 데이터 관리를 참고하세요.
gcloud
파라미터화된 뷰를 만들려면 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('PARAM_NAME') AS BYTES))"
다음을 바꿉니다.
VIEW: 새 파라미터화된 뷰의 ID로, 최대 길이는 128자입니다. ID는 인스턴스의 테이블 ID와 뷰 ID 중에서 고유해야 합니다.INSTANCE: 파라미터화된 뷰를 만들 인스턴스의 ID입니다.TABLE_ID: 소스 테이블의 ID입니다.PARAM_NAME: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 필드를 기준으로 필터링하는 보기를 만들 수 있습니다.
콘솔
Bigtable Studio에서 쿼리 편집기를 열고 행 키 세그먼트를 기준으로 필터링하는 SQL 쿼리를 입력합니다.
SELECT * FROM TABLE_ID WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)TABLE_ID을 소스 테이블의 ID로 바꿉니다.저장을 클릭한 다음 논리적 뷰로 저장을 선택합니다.
논리적 뷰 저장 대화상자에 뷰 이름을 입력한 다음 저장을 클릭합니다.
뷰가 탐색기 창의 논리적 뷰 목록에 variable_add 매개변수화된 뷰 아이콘과 함께 표시됩니다.
gcloud
구조화된 row key로 파라미터화된 뷰를 만들려면 gcloud bigtable logical-views create 명령어를 사용합니다.
gcloud bigtable logical-views create VIEW \
--instance=INSTANCE \
--query="SELECT * FROM TABLE_ID WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)"
다음을 바꿉니다.
VIEW: 새 매개변수화된 뷰의 ID(최대 128자)입니다. ID는 인스턴스의 테이블 ID와 뷰 ID 중에서 고유해야 합니다.INSTANCE: 파라미터화된 뷰를 만들 인스턴스의 ID입니다.TABLE_ID: 소스 테이블의 ID입니다.
파라미터화된 뷰 업데이트
논리 뷰를 업데이트하는 것과 동일한 방식으로 매개변수화된 뷰를 업데이트합니다.
파라미터화된 뷰 삭제
논리적 뷰를 삭제하는 것과 같은 방식으로 매개변수화된 뷰를 삭제합니다.
매개변수화된 뷰에 대한 정보 보기
인스턴스의 논리 뷰 목록을 보는 것과 같은 방식으로 파라미터화된 뷰 목록을 볼 수 있습니다.
콘솔
Google Cloud 콘솔에서 Bigtable 인스턴스 목록을 엽니다.
목록에서 인스턴스를 선택합니다.
탐색창에서 Bigtable Studio를 클릭합니다.
탐색기 창에서 논리적 뷰를 펼칩니다.
매개변수화된 뷰는 표준 논리 뷰와 구분되는 variable_add 매개변수화된 뷰 아이콘과 함께 목록에 표시됩니다.
인스턴스에 뷰가 10개 이상 있는 경우 더보기를 클릭하여 다음 10개를 로드합니다.
gcloud
인스턴스의 논리 뷰 목록을 보려면 gcloud bigtable logical-views list 명령어를 사용합니다.
gcloud bigtable logical-views list --instance=INSTANCE
INSTANCE를 인스턴스 ID로 바꿉니다.
파라미터화된 뷰 쿼리
매개변수화된 뷰는 일반 테이블과 유사하게 쿼리하지만 요청에 view_parameters 맵을 제공합니다.
콘솔
Google Cloud 콘솔에서 Bigtable 인스턴스 목록을 엽니다.
목록에서 인스턴스를 선택합니다.
탐색창에서 Bigtable Studio를 클릭합니다.
탐색기 창에서 논리적 뷰를 펼칩니다.
쿼리할 매개변수화된 뷰 옆에 있는 more_vert 작업 보기 메뉴를 클릭한 다음 뷰 쿼리를 클릭합니다.
뷰 매개변수 이름이 미리 입력된 매개변수 창이 열립니다.
매개변수 보기의 값 필드에 각 필수 매개변수의 런타임 값을 입력합니다.
매개변수 값은 문자열로 전달됩니다. 뷰 정의의 파라미터가 다른 유형 (예: 정수 또는 바이트)으로 변환된 경우 원시 문자열 값을 입력합니다.
선택사항: 매개변수를 추가하려면 매개변수 추가를 클릭한 후 매개변수 이름과 값을 입력합니다. 매개변수 이름은 뷰 매개변수 내에서 고유해야 합니다.
저장을 클릭합니다.
쿼리 편집기에서 실행을 클릭합니다.
쿼리 결과가 결과 테이블에 표시됩니다.
필수 뷰 매개변수를 제공하지 않고 쿼리를 실행하면 결과 섹션에 매개변수 수정 버튼과 함께 오류 메시지가 표시됩니다. 매개변수 수정을 클릭하여 매개변수 창을 열고 누락된 매개변수 값을 입력합니다.
매개변수 값은 각 쿼리 편집기 탭에 대해 구성됩니다. 세션 중에 Bigtable Studio에서 벗어났다가 돌아오면 열려 있는 탭, 쿼리, 결과, 구성된 매개변수가 유지됩니다.
자바
다음 예시에서는 사용자 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 매개변수를 보거나 조작할 수 없어 논리적으로 명확하게 구분됩니다.