매개변수화된 뷰 만들기 및 관리

Bigtable의 논리 뷰에서 매개변수화된 뷰를 만든 후 매개변수화된 뷰에서 작업을 수행할 수 있습니다.

이 페이지를 읽기 전에 매개변수화된 뷰 개요를 숙지하세요.

시작하기 전에

Google Cloud CLI를 사용하려면 다음 단계를 따르세요.

  1. Google Cloud CLI를 설치합니다.

  2. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  3. 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 매개변수를 보거나 조작할 수 없으므로 논리적으로 깔끔하게 분리됩니다.

다음 단계