BI Engine 소개

BigQuery BI Engine은 가장 자주 사용하는 데이터를 지능적으로 캐시하여 BigQuery의 여러 SQL 쿼리를 가속화하는 빠른 메모리 내 분석 서비스입니다. BI Engine은 데이터 시각화 도구로 작성된 것을 포함하여 모든 소스에서 SQL 쿼리를 가속화하고 상시 최적화를 위해 캐시된 테이블을 관리할 수 있습니다. 이렇게 하면 수동 조정 또는 데이터 계층화 없이 쿼리 성능을 향상시킬 수 있습니다. 테이블을 클러스터링하고 파티션을 나눌 수 있으므로 대규모 테이블의 BI Engine 성능을 더욱 최적화할 수 있습니다.

예를 들어 대시보드에 지난 분기의 데이터만 표시되는 경우 최신 파티션만 메모리에 로드되도록 시간별로 테이블 파티션을 나눌 수 있습니다. 또한 구체화된 뷰와 BI Engine의 이점을 조합할 수 있습니다. 이는 구체화된 뷰를 사용해서 데이터를 조인하고 단순화하여 BI Engine의 구조를 최적화하는 데 특히 효과적입니다.

BI Engine은 다음과 같은 이점을 제공합니다.

  • BigQuery API 호환성: BI Engine은 BigQuery API와 직접 통합됩니다. REST 또는 JDBC 및 ODBC 드라이버와 같은 표준 메커니즘을 통해 BigQuery API로 작동하는 모든 BI 솔루션 또는 커스텀 애플리케이션은 수정 없이 BI Engine을 사용할 수 있습니다.
  • 벡터화된 런타임: 실행 엔진에서 벡터화된 처리를 사용하면 데이터 배치를 한 번에 작업하여 최신 CPU 아키텍처를 보다 효율적으로 사용할 수 있습니다. BI Engine은 또한 고급 데이터 인코딩, 특히 사전 실행 길이 인코딩을 사용하여 메모리 내 레이어에 저장된 데이터를 추가로 압축합니다.
  • 원활한 통합: BI Engine은 승인된 뷰, 열 수준 보안, 데이터 마스킹을 포함한 BigQuery 기능 및 메타데이터와 함께 작동합니다.
  • 예약 할당: BI Engine 예약은 각 프로젝트 및 리전의 메모리 할당을 별도로 관리합니다. BI Engine은 쿼리된 열과 파티션의 필수 부분만 캐시합니다. 선호 테이블을 사용하여 BI Engine 가속을 사용하는 테이블을 지정할 수 있습니다.

대부분의 조직에서는 BI Engine 가속을 위한 용량을 예약해야 하는 결제 관리자가 BI Engine을 사용 설정합니다. 자세한 내용은 BI Engine 용량 예약을 참고하세요.

BI Engine 사용 사례

BI Engine은 BI 대시보드에 사용되는 쿼리를 포함하여 많은 SQL 쿼리를 대폭 가속화할 수 있습니다. 쿼리에 필수적인 테이블을 식별한 다음 이를 기본 설정 테이블로 표시하면 가장 효과적으로 가속할 수 있습니다. BI Engine을 사용하려면 리전에서 예약을 만들고 크기를 지정합니다. BigQuery가 프로젝트의 사용 패턴에 따라 캐시할 테이블을 결정하도록 하거나 다른 트래픽이 가속을 방해하지 못하도록 테이블을 지정할 수 있습니다.

BI Engine은 다음 사용 사례에 유용합니다.

  • BI 도구를 사용하여 데이터를 분석하는 경우: BI Engine은 BigQuery 콘솔, Looker Studio 또는 Tableau와 같은 BI 도구, 클라이언트 라이브러리, API, ODBC 또는 JDBC 커넥터에서 실행되는지 여부에 관계없이 BigQuery 쿼리를 가속화합니다. 기본 제공 연결 (API) 또는 커넥터를 통해 BigQuery에 연결된 대시보드의 성능을 크게 향상시킬 수 있습니다.
  • 자주 쿼리하는 테이블이 있는 경우: BI Engine을 사용하면 가속화할 선호 테이블을 지정할 수 있습니다. 이 방법은 테이블의 하위 집합이 더 자주 쿼리되거나 가시성이 높은 대시보드에 사용되는 경우에 유용합니다.

BI Engine은 다음과 같은 사용자의 니즈에 맞지 않을 수 있습니다.

  • 쿼리에 와일드 카드를 사용하는 경우: 와일드 카드 테이블을 참조하는 쿼리는 BI Engine에서 지원되지 않으며 가속화의 이점을 누릴 수 없습니다.
  • BI Engine에서 지원하지 않는 BigQuery 기능이 필요한 경우: BI Engine은 대부분의 SQL 함수와 연산자를 지원하지만 BI Engine에서 지원하지 않는 기능에는 외부 테이블, 행 수준 보안, SQL이 아닌 사용자 정의 함수가 포함됩니다.

BI Engine 고려사항

BI Engine 구성 방법을 결정할 때 다음을 고려합니다.

특정 쿼리의 가속화 보장

쿼리 집합을 가속화하려면 전용 BI Engine 예약으로 별도의 프로젝트를 만듭니다. 먼저 쿼리에 필요한 컴퓨팅 용량을 추정한 다음 이러한 테이블을 BI Engine의 기본 테이블로 지정합니다.

조인 최소화

BI Engine은 사전 조인되었거나 사전 집계된 데이터 그리고 조인 수가 적은 쿼리에 가장 적합합니다. 한쪽 조인이 크고 다른 쪽은 작은 경우(예: 작은 측정기준 테이블과 조인된 큰 팩트 테이블을 쿼리하는 경우)에 특히 잘 연동됩니다. BI Engine을 조인을 수행하는 구체화된 뷰와 결합하여 큰 단일 플랫 테이블을 생성할 수 있습니다. 이렇게 하면 각 쿼리에 대해 동일한 조인이 실행되지 않습니다. 최적의 쿼리 성능을 위해 비활성 구체화된 뷰를 사용하는 것이 좋습니다.

BI Engine의 영향 이해

BI Engine 사용량을 파악하려면 Cloud Monitoring으로 BI Engine 모니터링을 참고하거나 INFORMATION_SCHEMA.BI_CAPACITIESINFORMATION_SCHEMA.BI_CAPACITY_CHANGES 뷰를 쿼리하세요. 가장 정확한 비교를 얻기 위해서는 BigQuery에서 캐시된 결과 사용 옵션을 사용 중지해야 합니다. 자세한 내용은 캐시된 쿼리 결과 사용을 참조하세요.

선호 테이블

BI Engine 선호 테이블을 사용하면 BI Engine 가속을 지정된 테이블 집합으로 제한할 수 있습니다. 다른 모든 테이블에 대한 쿼리는 일반 BigQuery 슬롯을 사용합니다. 예를 들어 선호 테이블을 사용하면 비즈니스에 중요한 것으로 식별된 테이블과 대시보드만 가속화할 수 있습니다.

프로젝트에 모든 선호 테이블을 보관할 수 있을 만큼 RAM이 충분하지 않은 경우 BI Engine은 최근에 액세스하지 않은 파티션과 열을 오프로드합니다. 이 프로세스는 가속이 필요한 새 쿼리에 메모리를 확보합니다.

선호 테이블 제한사항

BI Engine 선호 테이블에는 다음과 같은 제한사항이 있습니다.

  • 선호 테이블 예약 목록에 뷰를 추가할 수 없습니다. BI Engine 선호 테이블은 테이블만 지원합니다.
  • 구체화된 뷰로의 쿼리는 구체화된 뷰와 기본 테이블이 모두 선호 테이블 목록에 있는 경우에만 가속화됩니다.
  • 가속화를 위한 파티션 또는 열 지정은 지원되지 않습니다.
  • JSON 유형 열은 지원되지 않으며 BI Engine으로 가속화되지 않습니다.
  • 여러 테이블에 액세스하는 쿼리는 모든 테이블이 선호 테이블인 경우에만 가속화됩니다. 예를 들어 JOIN이 있는 쿼리의 모든 테이블이 가속을 원하는 테이블 목록에 있어야 합니다. 선호 목록에 하나의 테이블이 없어도 쿼리는 BI Engine을 사용할 수 없습니다.
  • 공개 데이터 세트는 Google Cloud 콘솔에서 지원되지 않습니다. 공개 테이블을 선호 테이블로 추가하려면 API 또는 DDL을 사용합니다.

제한사항

BigQuery BI Engine에는 다음과 같은 제한사항이 있습니다.

조인

BI Engine은 특정 유형의 조인 쿼리를 가속화합니다. 가속은 INNERLEFT OUTER JOINS가 있는 리프 수준 서브 쿼리에서 발생합니다. 여기서 큰 팩트 테이블은 더 작은 '측정기준' 테이블 최대 4개와 조인됩니다. 소규모 측정기준 테이블에는 다음과 같은 제한사항이 있습니다.

  • 행 5백만 개 미만
  • 크기 제한:
    • 파티션을 나누지 않은 테이블: 5GB 이하
    • 파티션을 나눈 테이블: 참조된 파티션이 1GB 이하임

윈도우 함수

분석 함수라고도 하는 윈도우 함수에는 BigQuery BI Engine에 의해 가속화될 때 다음과 같은 제한사항이 적용됩니다.

  • 입력 단계에 윈도우 함수가 없으면 BigQuery BI Engine에서 윈도우 함수를 가속화합니다. 이 경우 INFORMATION_SCHEMA.JOBS 뷰에서 bi_engine_statistics.acceleration_modeFULL_INPUT으로 보고합니다.
  • 입력 단계에 윈도우 함수가 있는 쿼리의 입력 단계는 BI Engine에 의해 가속화되지만 BI Engine 윈도우 함수 제한사항에 설명된 제한사항이 적용되지 않습니다. 이 경우 입력 스테이지나 전체 쿼리는 BI Engine에서 실행됩니다. 이 경우 INFORMATION_SCHEMA.JOBS 뷰에서 bi_engine_statistics.acceleration_modeFULL_INPUT 또는 FULL_QUERY로 보고합니다.

BiEngineStatistics 필드에 대한 자세한 내용은 작업 참조를 확인하세요.

BI Engine 윈도우 함수 제한사항

윈도우 함수가 있는 쿼리는 다음 조건이 모두 충족되는 경우에만 BI Engine에서 실행됩니다.

  • 쿼리는 테이블 하나만 스캔합니다.
    • 이 테이블은 파티션을 나누지 않습니다.
    • 테이블에는 행이 5백만 개 미만 있습니다.
  • 쿼리에 JOIN 연산자가 없습니다.
  • 스캔된 테이블 크기와 윈도우 함수 연산자 수를 곱한 값은 300MiB를 초과하지 않습니다.

OVER 절이 동일하고 직접 입력이 동일한 윈도우 함수 2개에서 같은 윈도우 함수 연산자를 공유할 수 있습니다. 예를 들면 다음과 같습니다.

  • SELECT ROW_NUMBER() OVER (ORDER BY x), SUM(x) OVER (ORDER BY x) FROM my_table에는 윈도우 함수 연산자 하나만 있습니다.
  • 두 함수의 OVER 절이 다르므로 SELECT ROW_NUMBER() OVER (ORDER BY x), SUM(x) OVER (PARTITION BY y ORDER BY x) FROM my_table에는 윈도우 함수 연산자가 두 개 있습니다.
  • SELECT ROW_NUMBER() OVER (ORDER BY x) FROM (SELECT SUM(x) OVER (ORDER BY x) AS x FROM my_table)에는 윈도우 함수 연산자가 2개 있는데, OVER 절이 동일해 보이더라도 두 함수는 다른 직업 입력을 가지기 때문입니다.

지원되는 윈도우 함수

참조된 윈도우 함수는 다음과 같습니다.

  • ANY_VALUE
  • AVG
  • BIT_AND
  • BIT_OR
  • BIT_XOR
  • CORR
  • COUNT
  • COUNTIF
  • COVAR_POP
  • COVAR_SAMP
  • CUME_DIST
  • DENSE_RANK
  • FIRST_VALUE
  • LAG
  • LAST_VALUE
  • LEAD
  • LOGICAL_AND
  • LOGICAL_OR
  • MAX
  • MIN
  • NTH_VALUE
  • NTILE
  • PERCENT_RANK
  • PERCENTILE_CONT
  • PERCENTILE_DISC
  • RANK
  • ROW_NUMBER
  • ST_CLUSTERDBSCAN
  • STDDEV_POP
  • STDDEV_SAMP
  • STDDEV
  • STRING_AGG
  • SUM
  • VAR_POP
  • VAR_SAMP
  • VARIANCE

윈도우 함수가 지원되지 않는 경우 다음과 같은 오류가 표시될 수 있습니다.

분석 함수가 다른 연산자와 호환되지 않거나 입력이 너무 큼

기타 BI Engine 제한사항

BI Engine 가속화는 다음 기능에 사용할 수 없습니다.

  • 자바스크립트 UDF
  • 외부 테이블
  • JSON 데이터 쿼리 - 오류 메시지: JSON 네이티브 유형은 지원되지 않음
  • 영구 BigQuery 테이블에 결과 쓰기
  • BigQuery 변경 데이터 캡처를 사용하는 업서트가 포함된 테이블
  • 트랜잭션
  • 1GiB가 넘는 데이터를 반환하는 쿼리 지연 시간에 민감한 애플리케이션의 경우 응답 크기가 1MiB 미만인 것이 좋습니다.
  • 행 수준 보안

지원되지 않는 기능의 해결 방법

BigQuery BI Engine에서는 일부 SQL 기능이 지원되지 않지만 다음과 같은 해결 방법이 있습니다.

  1. BigQuery에서 쿼리를 작성합니다.
  2. 쿼리 결과를 테이블에 저장합니다.
  3. 쿼리를 예약하여 테이블을 정기적으로 업데이트합니다. 1시간마다 또는 매일 새로고침하는 것이 가장 좋습니다. 1분마다 새로고침하면 캐시가 너무 자주 무효화될 수 있습니다.
  4. 성능이 중요한 쿼리에서 이 테이블을 참조하세요.

할당량 및 한도

BI Engine에 적용되는 할당량 및 한도는 BigQuery 할당량 및 한도를 참조하세요.

가격 책정

BI Engine 용량에 대해 생성한 예약에 대한 비용이 발생합니다. BI Engine 가격 책정에 대한 자세한 내용은 BigQuery 가격 책정 페이지를 참조하세요.

다음 단계