주문형 쿼리는 읽은 바이트 수에 따라 청구됩니다. 현재 주문형 쿼리 가격 책정은 가격 책정 페이지를 참조하세요.
쿼리를 실행하기 전에 예상 비용을 알아보려면 다음을 사용하세요.
- Cloud Console의 쿼리 검사기
bq
명령줄 도구의--dry_run
플래그- API를 사용해 쿼리 작업을 제출할 때
dryRun
매개변수 - Google Cloud 가격 계산기
- 클라이언트 라이브러리
쿼리 비용 산출
쿼리 비용을 추정하는 방법은 다음과 같습니다.
Console
Cloud Console에 쿼리를 입력하면 쿼리 검사기가 쿼리 구문을 확인하고 읽을 바이트 수를 추정합니다. 이 추정값을 사용하여 가격 계산기에서 쿼리 비용을 계산할 수 있습니다.
bq
bq
명령줄 도구에서 쿼리를 실행할 때 --dry_run
플래그를 사용하여 읽을 바이트 수를 추정할 수 있습니다. 이 추정값을 사용하여 가격 계산기에서 쿼리 비용을 계산할 수 있습니다.
--dry_run
플래그를 사용하는 bq
도구 쿼리는 다음과 같습니다.
bq query \ --use_legacy_sql=false \ --dry_run \ 'SELECT column1, column2, column3 FROM `project_id.dataset.table` LIMIT 1000'
명령어를 실행하면 응답은 읽을 바이트의 추정값이 응답에 포함됩니다.
Query successfully validated. Assuming the tables are not modified, running
this query will process 10918 bytes of data.
API
API를 사용하여 연습 실행을 수행하려면 dryRun
을 true
로 설정하여 쿼리 작업을 제출합니다.
go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 확인하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 확인하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참조 문서를 확인하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 확인하세요.
Python 클라이언트 라이브러리를 사용해 연습 실행을 수행하려면 QueryJobConfig.dry_run 속성을True
로 설정합니다.
연습 실행 쿼리 구성을 제공하면 Client.query()는 항상 완료된 QueryJob을 반환합니다.
Google Cloud 가격 계산기를 사용하여 쿼리 비용 추정
Google Cloud 가격 계산기로 주문형 쿼리 비용을 추정하려면 쿼리에서 처리하는 바이트 수를 B, KB, MB, GB, TB, PB 단위로 입력합니다. 쿼리에서 1TB 미만을 처리하는 경우 BigQuery에서는 매달 1TB까지는 주문형 쿼리 처리를 무료로 지원하므로 추정값이 $0입니다.
가격 계산기를 사용해 쿼리 비용을 추정하는 방법:
- Google Cloud 가격 계산기를 열고
- BigQuery를 클릭합니다.
- 주문형 탭을 클릭합니다.
- 테이블 이름에 테이블 이름을 입력합니다. 예를 들면
airports
입니다. - 스토리지 가격 책정의 스토리지 필드에
0
을 입력합니다. - 쿼리 가격 책정에 연습 실행 또는 쿼리 검사기로 얻은 읽은 바이트 수 추정값을 입력합니다.
- 추정값에 추가를 클릭합니다.
- 추정값이 오른쪽에 나타납니다. 추정값을 저장하거나 이메일로 보낼 수 있습니다.
이 경우에는 쿼리에서 읽은 바이트 수가 무료 등급에서 지원되는 주문형 처리 1TB에 미치지 못합니다. 따라서 예상 비용은 $0입니다.
가격 계산기에 고정 요금 가격 포함
결제 계정에 정액제 가격 책정을 적용한 경우 정액제 탭을 클릭하고 정액제를 선택한 후 스토리지 비용을 추정값에 추가할 수 있습니다.
자세한 내용은 정액제를 참조하세요.
Google Cloud 가격 계산기를 사용하여 스토리지 비용 추정
Google Cloud 가격 계산기로 스토리지 비용을 추정하려면 바이트 수를 B, KB, MB, GB, TB, PB 단위로 입력합니다. BigQuery는 월 10GB의 스토리지를 무료로 제공합니다.
가격 계산기를 사용해 저장소 비용을 추정하는 방법:
- Google Cloud 가격 계산기를 엽니다.
- BigQuery를 클릭합니다.
- 주문형 탭을 클릭합니다.
- 테이블 이름에 테이블 이름을 입력합니다. 예를 들면
airports
입니다. - 스토리지 가격 책정의 스토리지 필드에
100
를 입력합니다. 측정 단위는GB
로 설정된 채로 둡니다. - 추정값에 추가를 클릭합니다.
- 추정값이 오른쪽에 나타납니다. 추정값을 저장하거나 이메일로 보낼 수 있습니다.
쿼리 크기 계산
이 섹션에서는 주문형 결제 모델을 사용하여 다양한 유형의 쿼리에서 처리되는 바이트 수를 계산하는 방법을 설명합니다.
DML 문
주문형 결제를 사용하는 경우 BigQuery는 문에서 처리된 바이트 수를 기준으로 데이터 조작 언어(DML) 문에 요금을 부과합니다.
파티션을 나누지 않은 테이블의 경우 처리된 바이트 수는 다음과 같이 계산됩니다.
DML 문 | 처리한 바이트 |
---|---|
INSERT |
쿼리로 스캔한 테이블에서 참조한 모든 열에 대해 처리한 바이트의 합계입니다. |
UPDATE |
쿼리로 스캔한 테이블에서 참조한 모든 열에 있는 바이트의 합계 + UPDATE 시작 시점에 업데이트된 테이블의 모든 열에 대한 바이트의 합계입니다. |
DELETE |
쿼리로 스캔한 테이블에서 참조한 모든 열에 있는 바이트의 합계 + DELETE 시작 시점에 수정된 테이블의 모든 열에 대한 바이트의 합계입니다. |
MERGE |
MERGE 문에 INSERT 절만 있다면 쿼리로 스캔한 모든 테이블에서 참조한 모든 열에 대해 처리된 바이트의 합계에 대한 비용이 청구됩니다.MERGE 문에 UPDATE 또는 DELETE 절이 있으면 쿼리로 스캔한 소스 테이블에서 참조한 모든 열에 대해 처리된 바이트의 합계+ MERGE 시작 시점에 대상 테이블의 모든 열에 대한 바이트의 합계에 대한 비용이 청구됩니다. |
파티션을 나눈 테이블의 경우 처리된 바이트 수는 다음과 같이 계산됩니다.
DML 문 | 처리한 바이트 |
---|---|
INSERT |
쿼리로 스캔한 모든 파티션에서 참조한 모든 열에 대해 처리한 바이트의 합계입니다. |
UPDATE |
쿼리로 스캔한 테이블의 모든 파티션에서 참조한 모든 열에 대해 처리한 바이트의 합계 + UPDATE 시작 시점에 업데이트 중인 테이블에서 업데이트 또는 스캔된 파티션의 모든 열에 대한 바이트의 합계입니다. |
DELETE |
쿼리로 스캔한 테이블의 모든 파티션에서 참조한 모든 열에 대해 처리한 바이트의 합계 + DELETE 시작 시점에 수정 중인 테이블에서 수정 또는 스캔된 파티션의 모든 열에 대한 바이트의 합계입니다. |
MERGE |
MERGE 문에 INSERT 절만 있다면 쿼리로 스캔한 모든 파티션에서 참조한 모든 열의 처리된 바이트의 합계에 대한 비용이 청구됩니다.MERGE 문에 UPDATE 또는 DELETE 절이 있으면 쿼리로 스캔한 소스 테이블의 모든 파티션에서 참조한 모든 열에 대해 처리된 바이트의 합계+ MERGE 시작 시점에 대상 테이블에서 업데이트, 삭제 또는 스캔된 파티션의 모든 열에 대한 바이트의 합계에 대한 비용이 청구됩니다. |
DDL 문
주문형 결제를 사용하는 경우 BigQuery는 쿼리에서 처리한 바이트 수에 따라 데이터 정의 언어(DDL) 쿼리에 요금을 부과합니다.
DDL 문 | 처리한 바이트 |
---|---|
CREATE TABLE |
없음 |
CREATE TABLE ... AS SELECT ... |
쿼리로 스캔한 테이블에서 참조한 모든 열에 대해 처리한 바이트의 합계입니다. |
CREATE VIEW |
없음 |
DROP TABLE |
없음 |
DROP VIEW |
없음 |
스크립트
주문형 결제를 사용하는 경우 BigQuery는 스크립트 실행 중에 처리된 바이트 수를 기준으로 스크립트에 요금을 부과합니다.
다음 가격은 스크립팅에 특정한 문 유형에 적용됩니다.
DECLARE
:DEFAULT
표현식에서 참조한 모든 테이블에서 스캔한 바이트의 합계에 대해 요금이 부과됩니다. 테이블 참조가 없는DECLARE
문은 비용이 발생하지 않습니다.SET
: 표현식에서 참조한 모든 테이블에서 스캔한 바이트의 합계에 대해 요금이 부과됩니다. 테이블 참조가 없는SET
문은 비용이 발생하지 않습니다.IF
: 조건 표현식에서 참조한 모든 테이블에서 스캔한 바이트의 합계에 대해 요금이 부과됩니다. 테이블 참조가 없는IF
조건 표현식은 비용이 발생하지 않습니다. 실행되지 않은IF
블록의 문에 대해서도 비용이 발생하지 않습니다.WHILE
: 조건 표현식에서 참조한 모든 테이블에서 스캔한 바이트의 합계에 대해 요금이 부과됩니다. 조건 표현식에서 테이블 참조가 없는WHILE
문은 비용이 발생하지 않습니다. 실행되지 않은WHILE
블록의 문에 대해서도 비용이 발생하지 않습니다.CONTINUE
또는ITERATE
: 관련 비용이 없습니다.BREAK
또는LEAVE
: 관련 비용이 없습니다.BEGIN
또는END
: 관련 비용이 없습니다.
임시 테이블의 경우 스크립트가 실행되고 있는 동안에는 스토리지 요금이 부과되지 않습니다. 하지만 임시 테이블을 생성, 수정 또는 쿼리하는 모든 문에 대해서는 정상적으로 요금이 부과됩니다.
스크립트가 실패할 경우 실패 전까지 발생한 모든 문 비용이 적용됩니다. 실패한 문에 대해서는 비용이 발생하지 않습니다.
스크립팅 가격 책정 예시
다음 예시의 스크립트에는 다음 문에서 발생하는 비용을 설명하는 주석이 문 위에 포함되어 있습니다.
-- No cost, since no tables are referenced.
DECLARE x DATE DEFAULT CURRENT_DATE();
-- Incurs the cost of scanning string_col from dataset.table.
DECLARE y STRING DEFAULT (SELECT MAX(string_col) FROM dataset.table);
-- Incurs the cost of copying the data from dataset.big_table. Once the
-- table is created, you are not charged for storage while the rest of the
-- script runs.
CREATE TEMP TABLE t AS SELECT * FROM dataset.big_table;
-- Incurs the cost of scanning column1 from temporary table t.
SELECT column1 FROM t;
-- No cost, since y = 'foo' doesn't reference a table.
IF y = 'foo' THEN
-- Incurs the cost of scanning all columns from dataset.other_table, if
-- y was equal to 'foo', or otherwise no cost since it is not executed.
SELECT * FROM dataset.other_table;
ELSE
-- Incurs the cost of scanning all columns from dataset.different_table, if
-- y was not equal to 'foo', or otherwise no cost since it is not executed.
UPDATE dataset.different_table
SET col = 10
WHERE true;
END IF;
-- Incurs the cost of scanning date_col from dataset.table for each
-- iteration of the loop.
WHILE x < (SELECT MIN(date_col) FROM dataset.table) DO
-- No cost, since the expression does not reference any tables.
SET x = DATE_ADD(x, INTERVAL 1 DAY);
-- No cost, since the expression does not reference any tables.
IF true THEN
-- LEAVE has no associated cost.
LEAVE;
END IF;
-- Never executed, since the IF branch is always taken, so does not incur
-- a cost.
SELECT * FROM dataset.big_table;
END WHILE;
클러스터링된 테이블
클러스터링된 테이블을 사용하면 데이터를 프루닝해 쿼리로 데이터가 처리되지 않도록 하여 쿼리 비용을 절감할 수 있습니다. 이 프로세스를 블록 프루닝이라고 합니다.
블록 프루닝
BigQuery는 클러스터링 열의 값에 따라 클러스터링된 테이블의 데이터를 정렬하고 블록으로 정리합니다.
클러스터링된 열의 필터를 포함한 쿼리를 클러스터링된 테이블에 실행하면 BigQuery는 필터 표현식과 블록 메타데이터를 사용해 쿼리로 스캔할 블록을 프루닝합니다. 이렇게 하면 BigQuery가 관련 블록만 스캔할 수 있습니다.
블록이 프루닝되면 스캔되지 않습니다. 스캔된 블록만이 쿼리로 처리된 데이터의 바이트를 계산하는 데 사용됩니다. 클러스터링된 테이블에 대한 쿼리로 처리되는 바이트 수는 스캔된 블록에서 쿼리에 참조된 각 열에서 읽은 바이트 수의 합계와 동일합니다.
클러스터링된 테이블이 여러 필터를 사용하는 쿼리에서 여러 번 참조되는 경우, BigQuery는 필터마다 적절한 블록의 열 스캔 작업에 대해 요금을 청구합니다.
클러스터링된 테이블 가격 책정 예시
이름이 ClusteredSalesData
인 클러스터링된 테이블이 있습니다. 이 테이블은 timestamp
열로 파티션을 나누고 customer_id
열로 클러스터링됩니다. 데이터는 다음 블록 세트로 정리됩니다.
파티션 식별자 | 블록 ID | 블록의 customer_id 최솟값 | 블록의 customer_id 최댓값 |
---|---|---|---|
20160501 | B1 | 10000 | 19999 |
20160501 | B2 | 20000 | 24999 |
20160502 | B3 | 15000 | 17999 |
20160501 | B4 | 22000 | 27999 |
다음 쿼리를 테이블에 실행합니다. 쿼리에는 customer_id
열에 필터가 포함되어 있습니다.
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id BETWEEN 20000 AND 23000 AND DATE(timestamp) = "2016-05-01"
이 쿼리는 다음과 같은 작업을 합니다.
- 블록 B2와 B4에서
timestamp
,customer_id
,totalSale
열을 스캔합니다. timestamp
파티션을 나눈 열의DATE(timestamp) = "2016-05-01"
필터 조건자로 인해 B3 블록을 프루닝합니다.customer_id
클러스터링 열의customer_id BETWEEN 20000 AND 23000
필터 조건자로 인해 B1 블록을 프루닝합니다.
Cloud Storage에서 열 형식 쿼리
외부 데이터가 ORC 또는 Parquet 형식으로 저장되어 있는 경우 청구되는 바이트 수는 BigQuery에서 읽는 열로 제한됩니다. 외부 데이터 소스의 데이터 유형은 쿼리에 의해 BigQuery 데이터 유형으로 변환되므로 읽은 바이트 수는 BigQuery 데이터 유형의 크기에 따라 계산됩니다. 데이터 유형 변환에 대한 자세한 내용은 다음 페이지를 참조하세요.