TABLE_STORAGE 뷰
INFORMATION_SCHEMA.TABLE_STORAGE
뷰는 테이블 및 구체화된 뷰의 스토리지 사용에 대한 현재 스냅샷을 제공합니다. INFORMATION_SCHEMA.TABLE_STORAGE
뷰를 쿼리하면 쿼리 결과에 각 테이블에 대해 하나의 행 또는 현재 프로젝트에 대한 구체화된 뷰가 포함됩니다. INFORMATION_SCHEMA.TABLE_STORAGE
뷰의 데이터는 실시간으로 보관되지 않으며 일반적으로 몇 초부터 몇 분까지 업데이트가 지연됩니다. 파티션 또는 테이블 만료 단독으로 발생했거나 데이터 세트 시간 이동 기간을 수정하여 발생한 스토리지 변경사항은 INFORMATION_SCHEMA.TABLE_STORAGE
뷰에 반영되는데 최대 1일까지 걸릴 수 있습니다.
테이블 스토리지 뷰를 사용하면 현재 및 이전 스토리지 소비 현황을 편리하게 관찰할 수 있으며, 스토리지에 논리적 비압축 바이트, 물리적 압축 바이트 또는 시간 이동 바이트가 사용되는지 여부에 대한 세부정보를 제공합니다. 이 정보는 향후 성장 계획 및 테이블 업데이트 패턴 이해와 같은 태스크에 도움이 될 수 있습니다.
*_BYTES
열에 포함된 데이터
테이블 스토리지 뷰의 *_BYTES
열에는 스토리지 바이트 사용에 대한 정보가 포함됩니다. 이 정보는 구체화된 뷰 및 다음 유형의 테이블에 대한 스토리지 사용량을 확인하여 결정됩니다.
- 테이블 만들기 및 사용에 설명된 방법을 통해 생성된 영구 테이블
- 세션에서 생성된 임시 테이블. 이 테이블은 '_c018003e063d09570001ef33ae401fad6ab92a6a'와 같은 생성된 이름으로 데이터 세트에 배치됩니다.
- 멀티 문 쿼리('스크립트')에서 생성된 임시 테이블. 이러한 테이블은 '_script72280c173c88442c3a7200183a50eeeaa4073719'와 같은 생성된 이름으로 데이터 세트에 배치됩니다.
쿼리 결과 캐시에 저장된 데이터에는 요금이 청구되지 않으므로 이 데이터는 *_BYTES
열 값에 포함되지 않습니다.
클론 및 스냅샷은 기본 테이블에서 사용되는 스토리지의 델타를 표시하는 대신 전체 테이블처럼 *_BYTES
열 값을 표시하므로 과대 예측입니다. 청구서에 스토리지 사용량의 델타가 올바르게 반영됩니다. 클론 및 스냅샷으로 저장되고 청구되는 델타 바이트에 대한 자세한 내용은 TABLE_STORAGE_USAGE_TIMELINE
뷰를 참조하세요.
스토리지 청구 예측
데이터 세트의 월별 스토리지 청구를 예측하려면 데이터 세트에서 사용하는 데이터 세트 스토리지 청구 모델에 따라 이 뷰에서 logical
또는 physical *_BYTES
열을 사용하면 됩니다. 이는 대략적인 예측이며 정확한 청구 금액은 BigQuery 스토리지 청구 인프라의 사용량을 기준으로 계산되며 Cloud Billing에 표시됩니다.
논리적 청구 모델을 사용하는 데이터 세트의 경우 월별 스토리지 비용을 다음과 같이 예측할 수 있습니다.
((ACTIVE_LOGICAL_BYTES
값/POW
(1024, 3)) * 활성 논리 바이트 가격 책정) + ((LONG_TERM_LOGICAL_BYTES
값/POW
(1024, 3)) * 장기 논리 바이트 가격 책정)
테이블의 ACTIVE_LOGICAL_BYTES
값은 해당 테이블에서 현재 사용되는 활성 바이트를 반영합니다.
물리적 청구 모델을 사용하는 데이터 세트의 경우 스토리지 비용을 다음과 같이 예측할 수 있습니다.
((ACTIVE_PHYSICAL_BYTES + FAIL_SAFE_PHYSICAL_BYTES
값/POW
(1024, 3)) * 활성 물리 바이트 가격 책정) + ((LONG_TERM_PHYSICAL_BYTES
값/POW
(1024, 3)) * 장기 물리 바이트 가격 책정)
테이블의 ACTIVE_PHYSICAL_BYTES
값은 현재 해당 테이블에서 사용 중인 활성 바이트에 해당 테이블의 시간 이동에 사용된 바이트를 더한 값을 반영합니다.
테이블의 활성 바이트만 보려면 ACTIVE_PHYSICAL_BYTES
값에서 TIME_TRAVEL_PHYSICAL_BYTES
값을 뺍니다.
자세한 내용은 스토리지 가격 책정을 참조하세요.
필요한 역할
INFORMATION_SCHEMA.TABLE_STORAGE
뷰를 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 BigQuery 메타데이터 뷰어(roles/bigquery.metadataViewer
) IAM 역할 부여를 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이 사전 정의된 역할에는 INFORMATION_SCHEMA.TABLE_STORAGE
뷰를 쿼리하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 확장하세요.
필수 권한
INFORMATION_SCHEMA.TABLE_STORAGE
뷰를 쿼리하려면 다음 권한이 필요합니다.
-
bigquery.tables.get
-
bigquery.tables.list
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
스키마
INFORMATION_SCHEMA.TABLE_STORAGE
뷰에는 다음과 같은 스키마가 있습니다.
열 이름 | 데이터 유형 | 값 |
---|---|---|
PROJECT_ID |
STRING |
데이터 세트가 포함된 프로젝트의 프로젝트 ID |
PROJECT_NUMBER |
INT64 |
데이터 세트가 포함된 프로젝트의 프로젝트 번호 |
TABLE_CATALOG |
STRING |
데이터 세트가 포함된 프로젝트의 프로젝트 ID |
TABLE_SCHEMA |
STRING |
테이블이나 구체화된 뷰가 포함된 데이터 세트 이름(또는 datasetId 라고 함) |
TABLE_NAME |
STRING |
테이블 또는 구체화된 뷰의 이름(또는 tableId 라고 함) |
CREATION_TIME |
TIMESTAMP |
테이블 생성 시간 |
TOTAL_ROWS |
INT64 |
테이블 또는 구체화된 뷰의 총 행 수 |
TOTAL_PARTITIONS |
INT64 |
테이블 또는 구체화된 뷰에 있는 파티션 수. 파티션을 나누지 않은 테이블은 0을 반환합니다. |
TOTAL_LOGICAL_BYTES |
INT64 |
테이블 또는 구체화된 뷰에 있는 논리적(비압축) 총 바이트 수 |
ACTIVE_LOGICAL_BYTES |
INT64 |
90일을 경과하지 않은 논리적(비압축) 바이트 수 |
LONG_TERM_LOGICAL_BYTES |
INT64 |
90일을 경과한 논리적(비압축) 바이트 수 |
CURRENT_PHYSICAL_BYTES |
INT64 |
모든 파티션에서 현재 테이블 스토리지의 총 물리적 바이트 수 |
TOTAL_PHYSICAL_BYTES |
INT64 |
활성, 장기, 시간 이동(데이터 삭제 또는 변경) 바이트를 포함하여 스토리지에 사용된 총 물리적(압축) 바이트 수 장애 안전(시간 이동 기간 후 보관된 데이터 삭제 또는 변경) 바이트는 포함되지 않습니다. |
ACTIVE_PHYSICAL_BYTES |
INT64 |
시간 이동(데이터 삭제 또는 변경) 바이트를 포함하여 90일을 경과하지 않은 물리적(압축) 바이트 수 |
LONG_TERM_PHYSICAL_BYTES |
INT64 |
90일을 경과한 물리적(압축) 바이트 수 |
TIME_TRAVEL_PHYSICAL_BYTES |
INT64 |
시간 이동 스토리지(데이터 삭제 또는 변경)에 사용된 물리적(압축) 바이트 수 |
STORAGE_LAST_MODIFIED_TIME |
TIMESTAMP |
데이터가 테이블에 작성된 가장 최근 시간입니다. |
DELETED |
BOOLEAN |
테이블 삭제 여부 |
TABLE_TYPE |
STRING |
테이블 유형입니다. 예를 들면 EXTERNAL 또는 BASE TABLE 입니다.
|
FAIL_SAFE_PHYSICAL_BYTES |
INT64 |
장애 안전 스토리지(데이터 삭제 또는 변경)에 사용된 물리적(압축) 바이트 수 |
LAST_METADATA_INDEX_REFRESH_TIME |
TIMESTAMP |
테이블의 마지막 메타데이터 색인 새로고침 시간입니다. |
범위 및 구문
이 뷰에 대한 쿼리에는 리전 한정자가 있어야 합니다. 다음 표에는 이 뷰의 리전 범위가 나와 있습니다.
뷰 이름 | 리소스 범위 | 리전 범위 |
---|---|---|
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE[_BY_PROJECT] |
프로젝트 수준 | REGION |
(선택사항) PROJECT_ID
: Google Cloud 프로젝트의 ID입니다. 지정하지 않으면 기본 프로젝트가 사용됩니다.
REGION
: 모든 데이터 세트 리전 이름입니다.
예를 들면 `region-us`
입니다.
다음 예시에서는 지정된 프로젝트의 테이블에 대해 스토리지 정보를 반환하는 방법을 보여줍니다.
SELECT * FROM `myProject`.`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;
다음 예시에서는 지정된 리전의 테이블에 대해 스토리지 정보를 반환하는 방법을 보여줍니다.
SELECT * FROM `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT;
예시
예시 1:
다음 예시에서는 현재 프로젝트에 대해 청구되는 총 논리 바이트를 보여줍니다.
SELECT SUM(total_logical_bytes) AS total_logical_bytes FROM `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;
결과는 다음과 비슷합니다.
+---------------------+ | total_logical_bytes | +---------------------+ | 971329178274633 | +---------------------+
예시 2:
다음 예시는 향후 30일 동안 논리적 및 물리적 청구 모델 간의 데이터 세트당 가격 차이를 예측하는 방법을 보여줍니다. 이 예시에서는 이후의 스토리지 사용량이 쿼리 실행 시점부터 30일동안 일정하다고 가정합니다. 이 예측은 기본 테이블로 제한되며 데이터 세트 안의 다른 모든 테이블 유형을 제외합니다.
이 쿼리의 가격 책정 변수에 사용된 가격은 us-central1
리전의 가격입니다. 다른 지역에서 이 쿼리를 실행하려면 가격 변수를 적절하게 업데이트하세요. 가격 책정 정보는 스토리지 가격 책정을 참조하세요.
Google Cloud 콘솔에서 BigQuery 페이지를 엽니다.
쿼리 편집기 상자에 다음과 같은 GoogleSQL 쿼리를 입력합니다.
INFORMATION_SCHEMA
에는 GoogleSQL 구문이 필요합니다. GoogleSQL은 Google Cloud 콘솔의 기본 구문입니다.DECLARE active_logical_gib_price FLOAT64 DEFAULT 0.02; DECLARE long_term_logical_gib_price FLOAT64 DEFAULT 0.01; DECLARE active_physical_gib_price FLOAT64 DEFAULT 0.04; DECLARE long_term_physical_gib_price FLOAT64 DEFAULT 0.02; WITH storage_sizes AS ( SELECT table_schema AS dataset_name, -- Logical SUM(IF(deleted=false, active_logical_bytes, 0)) / power(1024, 3) AS active_logical_gib, SUM(IF(deleted=false, long_term_logical_bytes, 0)) / power(1024, 3) AS long_term_logical_gib, -- Physical SUM(active_physical_bytes) / power(1024, 3) AS active_physical_gib, SUM(active_physical_bytes - time_travel_physical_bytes) / power(1024, 3) AS active_no_tt_physical_gib, SUM(long_term_physical_bytes) / power(1024, 3) AS long_term_physical_gib, -- Restorable previously deleted physical SUM(time_travel_physical_bytes) / power(1024, 3) AS time_travel_physical_gib, SUM(fail_safe_physical_bytes) / power(1024, 3) AS fail_safe_physical_gib, FROM `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT WHERE total_physical_bytes + fail_safe_physical_bytes > 0 -- Base the forecast on base tables only for highest precision results AND table_type = 'BASE TABLE' GROUP BY 1 ) SELECT dataset_name, -- Logical ROUND(active_logical_gib, 2) AS active_logical_gib, ROUND(long_term_logical_gib, 2) AS long_term_logical_gib, -- Physical ROUND(active_physical_gib, 2) AS active_physical_gib, ROUND(long_term_physical_gib, 2) AS long_term_physical_gib, ROUND(time_travel_physical_gib, 2) AS time_travel_physical_gib, ROUND(fail_safe_physical_gib, 2) AS fail_safe_physical_gib, -- Compression ratio ROUND(SAFE_DIVIDE(active_logical_gib, active_no_tt_physical_gib), 2) AS active_compression_ratio, ROUND(SAFE_DIVIDE(long_term_logical_gib, long_term_physical_gib), 2) AS long_term_compression_ratio, -- Forecast costs logical ROUND(active_logical_gib * active_logical_gib_price, 2) AS forecast_active_logical_cost, ROUND(long_term_logical_gib * long_term_logical_gib_price, 2) AS forecast_long_term_logical_cost, -- Forecast costs physical ROUND((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price, 2) AS forecast_active_physical_cost, ROUND(long_term_physical_gib * long_term_physical_gib_price, 2) AS forecast_long_term_physical_cost, -- Forecast costs total ROUND(((active_logical_gib * active_logical_gib_price) + (long_term_logical_gib * long_term_logical_gib_price)) - (((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price) + (long_term_physical_gib * long_term_physical_gib_price)), 2) AS forecast_total_cost_difference FROM storage_sizes ORDER BY (forecast_active_logical_cost + forecast_active_physical_cost) DESC;
실행을 클릭합니다.
결과는 다음과 비슷합니다.
+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+ | dataset_name | active_logical_gib | long_term_logical_gib | active_physical_gib | long_term_physical_gib | active_compression_ratio | long_term_compression_ratio | forecast_active_logical_cost | forecaset_long_term_logical_cost | forecast_active_physical_cost | forecast_long_term_physical_cost | forecast_total_cost_difference | +--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+ | dataset1 | 10.0 | 10.0 | 1.0 | 1.0 | 10.0 | 10.0 | 0.2 | 0.1 | 0.04 | 0.02 | 0.24 |