BigQuery의 검색 소개

BigQuery 검색 색인을 사용하면 GoogleSQL을 사용하여 테이블 스키마를 미리 알 필요 없이 구조화되지 않은 텍스트 및 반구조화된 JSON 데이터에 숨겨진 고유한 데이터 요소를 효율적으로 찾을 수 있습니다.

BigQuery는 검색 색인을 사용하여 플랫폼 하나에서 강력한 열 저장과 텍스트 검색을 제공하므로 이를 통해 개별 데이터 행을 찾아야 할 때 효율적으로 행을 조회할 수 있습니다. 일반적인 사용 사례는 로그 분석입니다. 예를 들어 개인정보 보호법(GDPR) 보고를 위해 사용자와 연결된 데이터 행을 식별하거나 텍스트 페이로드에서 특정 오류 코드를 찾으려 할 수 있습니다.

BigQuery는 색인을 저장하고 관리하므로 BigQuery에서 데이터를 사용할 수 있게 되면 SEARCH 함수 또는 다른 연산자 및 함수(예: 같음(=), IN 또는 LIKE 연산자와 특정 문자열 및 JSON 함수)를 사용하여 즉시 검색할 수 있습니다. 검색을 최적화하려면 권장사항을 읽어보세요.

사용 사례

BigQuery 검색 색인을 사용하면 다음 태스크를 수행할 수 있습니다.

  • BigQuery 테이블에 저장된 시스템, 네트워크 또는 애플리케이션 로그를 검색합니다.
  • 규제 프로세스를 준수하기 위해 삭제할 데이터 요소를 식별합니다.
  • 개발자 문제 해결을 지원합니다.
  • 보안 감사를 수행합니다.
  • 매우 까다로운 검색 필터가 필요한 대시보드를 만듭니다.
  • 일치검색을 위해 사전 처리된 데이터를 검색합니다.

자세한 내용은 검색 색인 만들기색인으로 검색을 참조하세요.

가격 책정

조직에서 색인 생성된 테이블의 총 크기가 해당 리전의 한도 미만인 경우 검색 색인을 빌드하고 새로고침하는 데 필요한 처리에 요금이 청구되지 않습니다. 이 한도를 넘어서 색인 생성을 지원하려면 색인 관리 작업을 처리하기 위한 자체 예약을 제공해야 합니다. 검색 색인이 활성 상태면 스토리지 비용이 발생합니다. 색인 스토리지 크기는 INFORMATION_SCHEMA.SEARCH_INDEXES에서 찾을 수 있습니다.

역할 및 권한

검색 색인을 만들려면 색인을 만들 테이블에 대한 bigquery.tables.createIndex IAM 권한이 필요합니다. 검색 색인을 삭제하려면 bigquery.tables.deleteIndex 권한이 필요합니다. 다음과 같은 사전 정의된 각 IAM 역할에는 검색 색인을 사용하는 데 필요한 권한이 포함되어 있습니다.

  • BigQuery 데이터 소유자(roles/bigquery.dataOwner)
  • BigQuery 데이터 편집자(roles/bigquery.dataEditor)
  • BigQuery 관리자(roles/bigquery.admin)

제한사항

  • 뷰 또는 구체화된 뷰에서 직접 검색 색인을 만들 수 없지만 색인이 생성된 테이블 뷰에서 SEARCH 함수를 호출하면 기본 검색 색인을 활용할 수 있습니다.
  • 검색 색인을 만든 후 테이블의 이름을 변경하면 색인이 무효화됩니다.
  • SEARCH 함수는 점 조회를 위해 설계되었습니다. 퍼지 검색, 오타 수정, 와일드 카드, 기타 유형의 문서 검색은 제공되지 않습니다.
  • 검색 색인의 범위가 100%가 아니더라도 INFORMATION_SCHEMA.SEARCH_INDEXES에 보고된 모든 색인 스토리지에 대한 요금이 부과됩니다.
  • SEARCH 함수가 포함된 쿼리는 BigQuery BI Engine에 의해 가속화되지 않습니다.
  • 검색 색인은 색인이 생성된 테이블이 DML 문으로 수정될 경우에는 사용되지 않지만 검색 색인으로 최적화할 수 있는 조건자가 DML 문에서 서브 쿼리의 일부일 경우에는 사용할 수 있습니다.

    • 다음 쿼리에서는 검색 색인이 사용되지 않습니다.
    DELETE FROM my_dataset.indexed_table
    WHERE SEARCH(user_id, '123');
    
    • 다음 쿼리에서는 검색 색인을 사용할 수 있습니다.
    DELETE FROM my_dataset.other_table
    WHERE
      user_id IN (
        SELECT user_id
        FROM my_dataset.indexed_table
        WHERE SEARCH(user_id, '123')
      );
    
  • 쿼리가 구체화된 뷰를 참조하는 경우에는 검색 색인이 사용되지 않습니다.

  • 검색 색인은 멀티 문 트랜잭션 쿼리에 사용되지 않습니다.

다음 단계