BigQuery로 Bigtable 데이터 쿼리 및 분석
BigQuery는 SQL 쿼리를 사용해서 Bigtable 데이터를 쿼리하고 분석할 수 있게 도와주는 관리형 데이터 웨어하우스입니다. BigQuery는 Bigtable 데이터를 사용해서 비즈니스 질문을 해결하려는 데이터 분석가, 데이터 엔지니어, 데이터 과학자에게 유용합니다.
BigQuery를 사용하면 BigQuery에서 Bigtable 데이터를 쿼리할 수 있습니다. 이 기능은 Bigtable 데이터를 BigQuery 테이블에 조인하려고 할 때 유용합니다.
이 문서에서는 BigQuery를 사용해서 Bigtable 데이터를 쿼리하는 방법에 대한 개요를 제공합니다. 이 페이지를 읽기 전에 Bigtable 개요 및 BigQuery 개요를 숙지해야 합니다.
BigQuery를 사용한 Bigtable 테이블 쿼리는 모든 행에서 column family 및 column qualifier가 동일한 테이블에 이상적입니다.
외부 테이블 만들기
Bigtable 데이터를 쿼리할 수 있으려면 먼저 사용자 또는 조직 관리자가 외부 테이블을 만들어야 합니다. 이 테이블은 쿼리를 전송할 Bigtable 테이블에 대한 메타데이터 포인터가 포함된 BigQuery 테이블입니다. 외부 테이블에 대한 자세한 내용은 외부 데이터 소스 소개를 참조하세요.
Bigtable 테이블과 동일한 리전에서 외부 테이블을 만들어야 합니다. 예를 들어 테이블이 europe-central2-a
(바르샤바), europe-west1-c
(벨기에), asia-east1-a
(도쿄)에 클러스터가 있는 인스턴스에 있는 경우 바르샤바, 벨기에, 도쿄에 외부 테이블을 만들어야 합니다.
대부분의 경우에는 외부 테이블을 만들 때 readRowkeyAsString
및 ignoreUnspecifiedColumnFamilies
를 true로 설정합니다.
ignoreUnspecifiedColumnFamilies
가 true이면 column family의 일부 열만 포함된 테이블 정의를 만들 때 선택한 열만 외부 테이블의 열로 승격됩니다. 선택되지 않은 열의 데이터는 일반 column
열 아래에 그룹화됩니다.
외부 테이블을 만들려면 Bigtable 외부 테이블 만들기의 안내를 따릅니다.
외부 테이블의 데이터 쿼리
Bigtable 테이블에 대해 외부 테이블을 만들었으면 다음 방법 중 하나를 사용해서 여기에 SQL 쿼리를 전송할 수 있습니다.
- 명령줄에서 BigQuery CLI인
bq
사용 - BigQuery API 호출
- 모든 BigQuery 클라이언트 라이브러리
쿼리 작성 및 실행 방법은 쿼리 실행을 참조하세요. 필요한 권한 및 코드 샘플을 비롯한 Bigtable 관련 안내는 Bigtable 데이터 쿼리를 참조하세요.
예약된 쿼리
예약된 쿼리는 정기적으로 Bigtable 데이터를 BigQuery로 가져오려고 할 때 유용합니다. 또한 데이터 파이프라인을 빌드하고 BigQuery에 데이터를 스트리밍해야 할 수 있는 사용 사례의 경우에도 유용합니다. 예약된 쿼리 관리에 대한 자세한 내용은 쿼리 예약을 참조하세요.
전체 테이블 스캔 방지
Bigtable 테이블에 직접 읽기 요청을 전송할 때와 비슷하게, 테이블에 대해 외부 테이블을 쿼리할 때는 일반적으로 전체 테이블 스캔을 방지하는 것이 좋습니다. 전체 테이블 스캔은 CPU 사용률을 높이고 선택적인 쿼리보다 시간이 상당히 오래 걸립니다. 또한 BigQuery 처리량도 더 많이 필요합니다.
쿼리에 모든 행이 포함된 경우 전체 테이블 스캔이 트리거됩니다. 반면에 쿼리를 제한하고 일정 범위의 행 또는 지정된 비연속적인 행을 요청할 경우에는 전체 테이블이 스캔되지 않습니다. 쿼리를 제한하는 GoogleSQL 구문 예시는 다음과 같습니다.
WHERE rowkey = "abc123"
WHERE rowkey BETWEEN "abc123" PRECEDING AND "abc999" FOLLOWING
WHERE rowkey > 999999
(row key를 문자열로 읽는 경우)
조인
조인을 사용해서 다른 소스의 데이터와 함께 Bigtable 테이블 데이터를 분석하려는 경우 계획된 조인에 대해 Bigtable에서 관련 필드를 추출하는 서브 쿼리를 만들어야 합니다. 테이블 조인 시 추가 권장사항은 쿼리 계산 최적화를 참조하세요.
비용
외부 테이블을 만들고 쿼리하면 BigQuery 비용 및 트래픽 처리에 필요한 Bigtable 노드 수 증가에 따라 비용이 청구됩니다. 외부 테이블이 Bigtable 테이블과 동일한 리전에 있으므로 네트워크 비용은 발생하지 않습니다.
일반 영업시간 중에 쿼리를 실행하려면 필요할 때 노드 수를 늘리고 작업이 완료되면 노드 수를 줄일 수 있도록 Bigtable 자동 확장을 사용 설정하는 것이 좋습니다. 자동 확장은 기한이 정해지지 않은 예약된 쿼리를 실행할 때에도 유효한 전략입니다.
비용을 제한하는 또 다른 방법은 전체 테이블 스캔을 방지하는 것입니다.
BigQuery의 비용 최적화에 대한 자세한 내용은 비용 추정 및 제어를 참조하세요.
제한사항
다음과 같은 제한사항이 적용됩니다.
- BigQuery를 사용해서는 JSON 형식으로 저장된 Bigtable 데이터를 쿼리할 수 없습니다.
- 프로토콜 버퍼(protobufs) 및 Avro 형식과 같이 중첩된 유형의 직렬화된 데이터가 포함된 쿼리 결과는 잘못된 방식으로 렌더링되거나 Google Cloud 콘솔에서 읽기 어려울 수 있습니다.
다음 단계
- 외부 테이블 및 통합 쿼리 사이의 차이점 알아보기
- Bigtable 외부 테이블 만들기
- 외부 테이블에 저장된 Bigtable 데이터 쿼리
- BigQuery에서 Bigtable로 데이터 내보내기