Vista TABLE_STORAGE

La vista INFORMATION_SCHEMA.TABLE_STORAGE ofrece una vista general del uso del almacenamiento de tablas y vistas materializadas. Cuando consultas la vista INFORMATION_SCHEMA.TABLE_STORAGE, los resultados de la consulta contienen una fila por cada tabla o vista materializada del proyecto actual.

Los datos de la vista INFORMATION_SCHEMA.TABLE_STORAGE no se conservan en tiempo real y las actualizaciones suelen retrasarse entre unos segundos y unos minutos. Los cambios en el almacenamiento que se deban únicamente a la caducidad de particiones o tablas, o a modificaciones en el periodo de viaje en el tiempo del conjunto de datos, pueden tardar hasta un día en reflejarse en la vista INFORMATION_SCHEMA.TABLE_STORAGE. En los casos de eliminación de conjuntos de datos que contengan más de 1000 tablas, esta vista no reflejará el cambio hasta que haya transcurrido el periodo de recuperación del conjunto de datos eliminado.

Las vistas de almacenamiento de tablas te ofrecen una forma cómoda de observar el consumo de almacenamiento actual y, además, proporcionan detalles sobre si el almacenamiento utiliza bytes lógicos sin comprimir, bytes físicos comprimidos o bytes de viajes en el tiempo. Esta información puede ayudarte con tareas como planificar el crecimiento futuro y comprender los patrones de actualización de las tablas.

Datos incluidos en las *_BYTES columnas

Las columnas *_BYTES de las vistas de almacenamiento de tablas incluyen información sobre el uso de bytes de almacenamiento. Esta información se determina analizando el uso del almacenamiento de las vistas materializadas y los siguientes tipos de tablas:

  • Tablas permanentes creadas con cualquiera de los métodos descritos en Crear y usar tablas.
  • Tablas temporales creadas en sesiones. Estas tablas se colocan en conjuntos de datos con nombres generados, como "_c018003e063d09570001ef33ae401fad6ab92a6a".
  • Tablas temporales creadas en consultas de varias instrucciones ("scripts"). Estas tablas se colocan en conjuntos de datos con nombres generados, como "_script72280c173c88442c3a7200183a50eeeaa4073719".

Los datos almacenados en la caché de resultados de consultas no se te facturan, por lo que no se incluyen en los valores de la columna *_BYTES.

Los clones y las copias de seguridad muestran los valores de las columnas *_BYTES como si fueran tablas completas, en lugar de mostrar la diferencia del almacenamiento usado por la tabla base, por lo que son una sobreestimación. En tu factura se tiene en cuenta correctamente esta diferencia en el uso del almacenamiento. Para obtener más información sobre los bytes delta almacenados y facturados por los clones y las instantáneas, consulta la TABLE_STORAGE_USAGE_TIMELINE vista.

Previsión de la facturación del almacenamiento

Para predecir la facturación mensual del almacenamiento de un conjunto de datos, puede usar las columnas logical o physical *_BYTES de esta vista, en función del modelo de facturación del almacenamiento del conjunto de datos que utilice. Ten en cuenta que esta es solo una previsión aproximada y que los importes de facturación precisos se calculan en función del uso de la infraestructura de facturación del almacenamiento de BigQuery y se muestran en Facturación de Cloud.

En el caso de los conjuntos de datos que usan un modelo de facturación lógica, puedes predecir tus costes de almacenamiento mensuales de la siguiente manera:

((Valor de ACTIVE_LOGICAL_BYTES / POW(1024, 3)) * precio de bytes lógicos activos) + ((Valor de LONG_TERM_LOGICAL_BYTES / POW(1024, 3)) * precio de bytes lógicos a largo plazo)

El valor ACTIVE_LOGICAL_BYTES de una tabla refleja los bytes activos que usa esa tabla en ese momento.

En el caso de los conjuntos de datos que usan un modelo de facturación física, puedes predecir los costes de almacenamiento de la siguiente manera:

((valor de ACTIVE_PHYSICAL_BYTES + FAIL_SAFE_PHYSICAL_BYTES / POW(1024, 3)) * precio de bytes físicos activos) + ((valor de LONG_TERM_PHYSICAL_BYTES / POW(1024, 3)) * precio de bytes físicos a largo plazo)

El valor ACTIVE_PHYSICAL_BYTES de una tabla refleja los bytes activos que usa actualmente esa tabla más los bytes que se usan para la función de viaje en el tiempo de esa tabla.

Para ver los bytes activos de la tabla, resta el valor de TIME_TRAVEL_PHYSICAL_BYTES al valor de ACTIVE_PHYSICAL_BYTES.

Para obtener más información, consulta la página Precios de almacenamiento.

Roles obligatorios

Para obtener los permisos que necesitas para consultar la vista INFORMATION_SCHEMA.TABLE_STORAGE, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Lector de metadatos de BigQuery (roles/bigquery.metadataViewer) en el proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para consultar la vista INFORMATION_SCHEMA.TABLE_STORAGE. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para consultar la vista INFORMATION_SCHEMA.TABLE_STORAGE, se necesitan los siguientes permisos:

  • bigquery.tables.get
  • bigquery.tables.list

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Esquema

La vista INFORMATION_SCHEMA.TABLE_STORAGE tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
PROJECT_ID STRING El ID del proyecto que contiene el conjunto de datos.
PROJECT_NUMBER INT64 El número de proyecto del proyecto que contiene el conjunto de datos.
TABLE_CATALOG STRING El ID del proyecto que contiene el conjunto de datos.
TABLE_SCHEMA STRING Nombre del conjunto de datos que contiene la tabla o la vista materializada, también denominado datasetId.
TABLE_NAME STRING Nombre de la tabla o de la vista materializada, también conocido como tableId.
CREATION_TIME TIMESTAMP Hora de creación de la tabla.
TOTAL_ROWS INT64 Número total de filas de la tabla o de la vista materializada.
TOTAL_PARTITIONS INT64 Número de particiones presentes en la tabla o en la vista materializada. Las tablas sin particiones devuelven 0.
TOTAL_LOGICAL_BYTES INT64 Número total de bytes lógicos (sin comprimir) de la tabla o de la vista materializada.
ACTIVE_LOGICAL_BYTES INT64 Número de bytes lógicos (sin comprimir) que tienen menos de 90 días.
LONG_TERM_LOGICAL_BYTES INT64 Número de bytes lógicos (sin comprimir) que tienen más de 90 días.
CURRENT_PHYSICAL_BYTES INT64 Número total de bytes físicos del almacenamiento actual de la tabla en todas las particiones.
TOTAL_PHYSICAL_BYTES INT64 Número total de bytes físicos (comprimidos) usados para el almacenamiento, incluidos los bytes activos, a largo plazo y de viajes en el tiempo (datos eliminados o modificados). No se incluyen los bytes de seguridad (datos eliminados o modificados que se conservan después del periodo de la función de viaje en el tiempo).
ACTIVE_PHYSICAL_BYTES INT64 Número de bytes físicos (comprimidos) con una antigüedad inferior a 90 días, incluidos los bytes de viajes en el tiempo (datos eliminados o modificados).
LONG_TERM_PHYSICAL_BYTES INT64 Número de bytes físicos (comprimidos) con más de 90 días de antigüedad.
TIME_TRAVEL_PHYSICAL_BYTES INT64 Número de bytes físicos (comprimidos) usados por el almacenamiento de viajes en el tiempo (datos eliminados o modificados).
STORAGE_LAST_MODIFIED_TIME TIMESTAMP La hora más reciente en la que se escribieron datos en la tabla.
DELETED BOOLEAN Indica si la tabla se ha eliminado.
TABLE_TYPE STRING El tipo de tabla. Por ejemplo, BASE TABLE.
MANAGED_TABLE_TYPE STRING Esta columna está en versión preliminar. Tipo gestionado de la tabla. Por ejemplo, NATIVE o BIGLAKE.
FAIL_SAFE_PHYSICAL_BYTES INT64 Número de bytes físicos (comprimidos) utilizados por el almacenamiento a prueba de fallos (datos eliminados o modificados).
LAST_METADATA_INDEX_REFRESH_TIME TIMESTAMP La hora de la última actualización del índice de metadatos de la tabla.
TABLE_DELETION_REASON STRING Motivo de la eliminación de la tabla si el campo DELETED es true. Los valores posibles son los siguientes:
  • TABLE_EXPIRATION: tabla eliminada tras el tiempo de vencimiento establecido
  • El usuario ha eliminado el conjunto de datos DATASET_DELETION:
  • El usuario ha eliminado la tabla USER_DELETED:
TABLE_DELETION_TIME TIMESTAMP Hora de eliminación de la tabla.

Ámbito y sintaxis

Las consultas en esta vista deben incluir un calificador de región. En la siguiente tabla se explica el ámbito de la región de esta vista:

Nombre de la vista Ámbito de los recursos Ámbito de la región
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE[_BY_PROJECT] Nivel de proyecto REGION
Sustituye lo siguiente:
  • Opcional: PROJECT_ID: el ID de tu Google Cloud proyecto. Si no se especifica, se usa el proyecto predeterminado.
  • REGION: cualquier nombre de región del conjunto de datos. Por ejemplo, `region-us`.

En el siguiente ejemplo se muestra cómo devolver información de almacenamiento de las tablas de un proyecto específico:

SELECT * FROM `myProject`.`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;

En el siguiente ejemplo se muestra cómo devolver información de almacenamiento de las tablas de una región específica:

SELECT * FROM `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT;

Ejemplos

Ejemplo 1:

En el siguiente ejemplo se muestra el total de bytes lógicos facturados del proyecto actual.

SELECT
  SUM(total_logical_bytes) AS total_logical_bytes
FROM
  `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;

El resultado es similar al siguiente:

+---------------------+
| total_logical_bytes |
+---------------------+
| 971329178274633     |
+---------------------+
Ejemplo 2:

En el siguiente ejemplo se muestran los bytes de almacenamiento en GiB a nivel de conjunto de datos del proyecto actual.

SELECT
  table_schema AS dataset_name,
  -- Logical
  SUM(total_logical_bytes) / power(1024, 3) AS total_logical_gib,  
  SUM(active_logical_bytes) / power(1024, 3) AS active_logical_gib, 
  SUM(long_term_logical_bytes) / power(1024, 3) AS long_term_logical_gib, 
  -- Physical
  SUM(total_physical_bytes) / power(1024, 3) AS total_physical_gib,
  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,
  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 
WHERE 
  table_type ='BASE TABLE'
GROUP BY 
  table_schema  
ORDER BY 
  dataset_name 
Ejemplo 3:

En el siguiente ejemplo se muestra cómo predecir la diferencia de precio por conjunto de datos entre los modelos de facturación lógicos y físicos durante los próximos 30 días. En este ejemplo se da por supuesto que el uso del almacenamiento futuro es constante durante los próximos 30 días a partir del momento en que se ejecutó la consulta. Ten en cuenta que la previsión se limita a las tablas base y excluye todos los demás tipos de tablas de un conjunto de datos.

Los precios que se usan en las variables de precios de esta consulta corresponden a la región us-central1. Si quieres ejecutar esta consulta en otra región, actualiza las variables de precios según corresponda. Para obtener información sobre los precios, consulta la sección Precio del almacenamiento.

  1. Abre la página de BigQuery en la Google Cloud consola.

    Ir a la página de BigQuery

  2. Introduce la siguiente consulta de GoogleSQL en el cuadro Editor de consultas. INFORMATION_SCHEMA requiere la sintaxis de GoogleSQL. GoogleSQL es la sintaxis predeterminada en la Google Cloud consola.

    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. Haz clic en Ejecutar.

El resultado es similar al siguiente:

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