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 리전의 가격입니다. 다른 리전에 대해 이 쿼리를 실행하려면 가격 책정 변수를 적절하게 업데이트합니다. 가격 책정 정보는 스토리지 가격 책정을 참조하세요.

  1. Google Cloud 콘솔에서 BigQuery 페이지를 엽니다.

    BigQuery 페이지로 이동

  2. 쿼리 편집기 상자에 다음과 같은 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;
  3. 실행을 클릭합니다.

결과는 다음과 비슷합니다.

+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+
| 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 |