파라미터화된 뷰 만들기 및 관리

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 문으로 정의된 가상 테이블입니다.

콘솔

  1. Google Cloud 콘솔에서 Bigtable 인스턴스 목록을 엽니다.

    인스턴스 목록 열기

  2. 목록에서 인스턴스를 선택합니다.

  3. 탐색창에서 Bigtable Studio를 클릭합니다.

  4. 새 탭 메뉴를 클릭하여 새 탭을 연 다음 편집기를 선택합니다.

  5. 쿼리 편집기에서 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이면 유효 메시지가 표시됩니다.

  6. 선택사항: SQL 스타일로 문 형식을 지정하려면 형식을 클릭합니다.

  7. 저장을 클릭한 다음 논리적 뷰로 저장을 선택합니다.

  8. 논리적 뷰 저장 대화상자에 뷰 이름을 입력한 다음 저장을 클릭합니다.

    뷰가 탐색기 창의 논리적 뷰 목록에 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 필드를 기준으로 필터링하는 보기를 만들 수 있습니다.

콘솔

  1. Bigtable Studio에서 쿼리 편집기를 열고 행 키 세그먼트를 기준으로 필터링하는 SQL 쿼리를 입력합니다.

    SELECT *
    FROM TABLE_ID
    WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)
    

    TABLE_ID을 소스 테이블의 ID로 바꿉니다.

  2. 저장을 클릭한 다음 논리적 뷰로 저장을 선택합니다.

  3. 논리적 뷰 저장 대화상자에 뷰 이름을 입력한 다음 저장을 클릭합니다.

    뷰가 탐색기 창의 논리적 뷰 목록에 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입니다.

파라미터화된 뷰 업데이트

논리 뷰를 업데이트하는 것과 동일한 방식으로 매개변수화된 뷰를 업데이트합니다.

파라미터화된 뷰 삭제

논리적 뷰를 삭제하는 것과 같은 방식으로 매개변수화된 뷰를 삭제합니다.

매개변수화된 뷰에 대한 정보 보기

인스턴스의 논리 뷰 목록을 보는 것과 같은 방식으로 파라미터화된 뷰 목록을 볼 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Bigtable 인스턴스 목록을 엽니다.

    인스턴스 목록 열기

  2. 목록에서 인스턴스를 선택합니다.

  3. 탐색창에서 Bigtable Studio를 클릭합니다.

  4. 탐색기 창에서 논리적 뷰를 펼칩니다.

    매개변수화된 뷰는 표준 논리 뷰와 구분되는 variable_add 매개변수화된 뷰 아이콘과 함께 목록에 표시됩니다.

  5. 인스턴스에 뷰가 10개 이상 있는 경우 더보기를 클릭하여 다음 10개를 로드합니다.

gcloud

인스턴스의 논리 뷰 목록을 보려면 gcloud bigtable logical-views list 명령어를 사용합니다.

gcloud bigtable logical-views list --instance=INSTANCE

INSTANCE를 인스턴스 ID로 바꿉니다.

파라미터화된 뷰 쿼리

매개변수화된 뷰는 일반 테이블과 유사하게 쿼리하지만 요청에 view_parameters 맵을 제공합니다.

콘솔

  1. Google Cloud 콘솔에서 Bigtable 인스턴스 목록을 엽니다.

    인스턴스 목록 열기

  2. 목록에서 인스턴스를 선택합니다.

  3. 탐색창에서 Bigtable Studio를 클릭합니다.

  4. 탐색기 창에서 논리적 뷰를 펼칩니다.

  5. 쿼리할 매개변수화된 뷰 옆에 있는 more_vert 작업 보기 메뉴를 클릭한 다음 뷰 쿼리를 클릭합니다.

    뷰 매개변수 이름이 미리 입력된 매개변수 창이 열립니다.

  6. 매개변수 보기 필드에 각 필수 매개변수의 런타임 값을 입력합니다.

    매개변수 값은 문자열로 전달됩니다. 뷰 정의의 파라미터가 다른 유형 (예: 정수 또는 바이트)으로 변환된 경우 원시 문자열 값을 입력합니다.

  7. 선택사항: 매개변수를 추가하려면 매개변수 추가를 클릭한 후 매개변수 이름과 값을 입력합니다. 매개변수 이름은 뷰 매개변수 내에서 고유해야 합니다.

  8. 저장을 클릭합니다.

  9. 쿼리 편집기에서 실행을 클릭합니다.

    쿼리 결과가 결과 테이블에 표시됩니다.

    필수 뷰 매개변수를 제공하지 않고 쿼리를 실행하면 결과 섹션에 매개변수 수정 버튼과 함께 오류 메시지가 표시됩니다. 매개변수 수정을 클릭하여 매개변수 창을 열고 누락된 매개변수 값을 입력합니다.

매개변수 값은 각 쿼리 편집기 탭에 대해 구성됩니다. 세션 중에 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 매개변수를 보거나 조작할 수 없어 논리적으로 명확하게 구분됩니다.

다음 단계