Ejemplos de consultas para la exportación de datos de la Facturación de Cloud

En esta página, se proporcionan algunos ejemplos de cómo consultar los datos de la Facturación de Cloud exportados y almacenados en BigQuery.

Para obtener más información sobre cómo exportar datos de facturación a BigQuery, consulta la descripción general y las limitaciones.

Especifica el nombre de tabla que se usará en tus consultas

En estos ejemplos, para consultar los datos de la Facturación de Cloud en BigQuery, debes especificar el nombre de la tabla en la cláusula FROM. El nombre de la tabla se determina con tres valores: project.dataset.BQ_table_name.

Ejemplos de consultas por tipo de datos de Facturación de Cloud

En esta página, se proporcionan ejemplos de consultas de los datos de detalles diarios de costos y tus datos de precios.

Datos del detalle de costos diario Datos de precios
Ejemplos de consultas de detalles de costos diarios Ejemplos de consultas de datos de precios

Ejemplos de consultas de detalles de costos diarios

En esta sección, se proporcionan diferentes ejemplos de cómo consultar los datos de detalles de costos diarios de la Facturación de Cloud exportados a BigQuery.

Valores comunes que se usan en las consultas de detalles de costos de ejemplo

En los ejemplos de consulta de esta sección, se usan los siguientes valores:

  • Nombre de la tabla:project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX

Muestra los costos totales en una factura

En las siguientes consultas, se demuestran dos formas de ver los costos y los valores de crédito mediante datos de facturación exportados.

  • El campo total suma directamente el costo de punto flotante y los valores de crédito, lo que puede generar errores de redondeo de punto flotante.
  • El campo total_exact convierte los costos y los valores de crédito en micros antes de sumar; luego, los vuelve a convertir a dólares después de la suma y así evita el error de redondeo de punto flotante.

Ejemplo 1: suma de todos los costos, por factura

Esta consulta muestra el total de la factura de cada mes como una suma de costos regulares, impuestos, ajustes y errores de redondeo.

SQL estándar

SELECT
  invoice.month,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost * 1000000 AS int64))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
                  FROM UNNEST(credits) c), 0))) / 1000000
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1
ORDER BY 1 ASC
;

Por ejemplo, el resultado de la consulta anterior podría ser el siguiente:

Fila mes total total exacto
1 201901 $1,005.004832999999984 $1,005.00
2 201902 $992.3101739999999717 $992.31
3 201903 $1,220.761089999999642 $1,220.76

Ejemplo 2: visualiza detalles por tipo de costo, por factura mensual

En esta consulta, se muestran los totales de cada cost_type de cada mes. Los tipos de costos incluyen costos regulares, impuestos, ajustes y errores de redondeo.

SQL estándar

SELECT
  invoice.month,
  cost_type,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost * 1000000 AS int64))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
                  FROM UNNEST(credits) c), 0))) / 1000000
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC
;

Por ejemplo, el resultado de la consulta anterior podría ser el siguiente:

Fila mes tipo de costo total total exacto
1 201901 regular $1,000.501209987994782 $1,000.50
2 201901 error de redondeo –$0.500489920049387 –$0.50
3 201901 impuesto $10.000329958477891 $10.00
4 201901 ajuste –$5.002572999387045 –$5.00

Ejemplos de consultas con etiquetas

Los siguientes ejemplos muestran otras maneras de consultar tus datos con etiquetas.

Para los ejemplos de esta sección, supongamos lo siguiente:

  • Tienes 2 apps (grapefruit-squeezer y chocolate-masher).
  • Para cada app, tienes 2 entornos (dev y prod).
  • El entorno dev tiene 1 instancia pequeña por app.
  • El entorno prod tiene 1 instancia pequeña en América y 1 instancia pequeña en Asia.
  • Cada instancia tiene la etiqueta de la app y el entorno.
  • Tienes 1 instancia sin etiqueta que usas para experimentar.

La factura total es de $24 con el siguiente desglose:

Instance Etiquetas Costo total
Instancia pequeña con 1 CPU virtual en ejecución en América None $4
Instancia pequeña con 1 CPU virtual en ejecución en América app: chocolate-masher
entorno: desarrollo
$2
Instancia pequeña con 1 CPU virtual en ejecución en América app: grapefruit-squeezer
entorno: desarrollo
$3
Instancia pequeña con 1 CPU virtual en ejecución en América app: chocolate-masher
entorno: producción
$3.25
Instancia pequeña con 1 CPU virtual en ejecución en Asia app: chocolate-masher
entorno: producción
$3.75
Instancia pequeña con 1 CPU virtual en ejecución en América app: grapefruit-squeezer
entorno: producción
$3.50
Instancia pequeña con 1 CPU virtual en ejecución en Asia app: grapefruit-squeezer
entorno: producción
$4.50

Consulta cada fila sin agrupar

La manera más detallada de ver estos costos sería consultar cada fila sin agrupar. Supongamos que todos los campos, excepto las etiquetas y la descripción de SKU, son iguales (proyecto, servicio y otros).

SQL estándar

SELECT
  sku.description,
  TO_JSON_STRING(labels) as labels,
 cost as cost
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`;

SQL heredado

TO_JSON_STRING not supported.
Fila sku.description etiquetas costo
1 Instancia pequeña con 1 CPU virtual en ejecución en América [] $4
2 Instancia pequeña con 1 CPU virtual en ejecución en América [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] $2
3 Instancia pequeña con 1 CPU virtual en ejecución en América [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] $3
4 Instancia pequeña con 1 CPU virtual en ejecución en América [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $3.25
5 Instancia pequeña con 1 CPU virtual en ejecución en Asia [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $3.75
6 Instancia pequeña con 1 CPU virtual en ejecución en América [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] $3.50
7 Instancia pequeña con 1 CPU virtual en ejecución en Asia [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] $4.50
TOTAL $24

Agrupar por mapa de etiquetas como un string JSON

Esta es una manera rápida y fácil de desglosar los costos por cada combinación de etiquetas.

SQL estándar

SELECT
  TO_JSON_STRING(labels) as labels,
  sum(cost) as cost
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY labels;

SQL heredado

TO_JSON_STRING not supported.
Fila etiquetas costo
1 [] $4
2 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] $2
3 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] $3
4 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] $7
5 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] $8
TOTAL $24

Agrupar por el valor de las etiquetas para una clave específica

Desglosar los costos por valores de una clave de etiqueta específica es un caso práctico común. Si usas LEFT JOIN y pones el filtro de clave en la condición JOIN (en lugar de WHERE), incluyes el costo que no contiene esta clave, por lo que recibes una vista completa de tus costos.

SQL estándar

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "environment"
GROUP BY environment;

SQL heredado

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM [project:dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX]
WHERE labels.key = "environment" OR labels.key IS NULL
GROUP BY environment;
Fila entorno costo
1 prod $15
2 dev $5
3 nulo $4
TOTAL $24

Agrupar por pares clave-valor

Ten cuidado cuando interpretes o exportes estos resultados. Cada una de estas filas muestra una suma válida sin conteos duplicados, pero no se debería combinar con otras filas (excepto si la clave es la misma o si tienes certeza de que las claves nunca se configuran en el mismo recurso).

SQL estándar

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost) as cost
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
LEFT JOIN UNNEST(labels) as labels
GROUP BY key, value;

SQL heredado

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost)
FROM [project:dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX]
GROUP BY key, value;
Fila key valor costo
1 null nulo $4
2 app chocolate-masher $9
3 app grapefruit-squeezer $11
4 entorno dev $5
5 entorno prod $15
TOTAL $44

Ten en cuenta que la suma total es mayor que la de tu factura.

Consultas sobre los descuentos por compromiso de uso

Las siguientes consultas demuestran formas de ver las tarifas y créditos asociados con los descuentos por compromiso de uso en datos de facturación exportados.

Visualiza las tarifas de compromiso

Para ver las tarifas por compromiso de los descuentos por compromiso de uso en la exportación de datos de facturación, usa la siguiente consulta de muestra:

SQL estándar

SELECT
    invoice.month AS invoice_month,
    SUM(cost) as commitment_fees
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
WHERE LOWER(sku.description) LIKE "commitment%"
GROUP BY 1

Visualiza los créditos de compromiso

Para ver los créditos del descuento por compromiso de uso en la exportación de datos de facturación, usa la siguiente consulta de muestra.

SQL estándar

SELECT
    invoice.month AS invoice_month,
    SUM(credits.amount) as CUD_credits
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
LEFT JOIN UNNEST(credits) AS credits
WHERE LOWER(credits.name) LIKE "committed use discount%"
GROUP BY 1

Ejemplos de consulta adicionales

Consulta los costos y créditos por proyecto para un mes de facturación especificado

Si proporcionas junio de 2020 como el mes de facturación específico (en el formato AAAAMM), esta consulta mostrará una vista de los costos y créditos agrupados por proyecto junto con las etiquetas de proyecto.

SQL estándar

SELECT
  project.name,
  TO_JSON_STRING(project.labels) as project_labels,
  sum(cost) as total_cost,
  SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) as total_credits
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
WHERE invoice.month = "202006"
GROUP BY 1, 2
ORDER BY 1;

SQL heredado

TO_JSON_STRING not supported.
Row name Etiquetas del proyecto Costo total Créditos totales
1 CTG - Dev [{"key":"ctg_p_env","value":"dev"}] 79.140979 -4.763796
2 CTG - Prod [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"eng"}] 32.466272 -3.073356
3 CTG - Sandbox [{"key":"ctg_p_env","value":"dev"}] 0 0
4 CTG - Storage [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"data"}] 7.645793 -0.003761

Ejemplos de consultas de datos de precios

En esta sección, se proporcionan ejemplos diferentes de cómo consultar los datos de precios de la Facturación de Cloud exportados a BigQuery.

Valores comunes que se usan en las consultas de precios de ejemplo

En los ejemplos de consulta de esta sección, se usan los siguientes valores:

  • Nombre de la tabla:project.dataset.cloud_pricing_export
  • ID de SKU: 2DA5-55D3-E679 (Cloud Run: Solicitudes)

Obtén precios de listas para un SKU específico

En este ejemplo, se muestra una consulta simple que muestra el list_price de cada nivel de precios de un SKU especificado.

SQL estándar

SELECT sku.id,  sku.description, list_price.*
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

_PARTITIONTIME es un campo generado automáticamente por BigQuery y representa la fecha a la que pertenecen los datos. En lugar de _PARTITIONTIME, puedes usar un campo que genere la exportación de Cloud Billing de manera explícita, como pricing_as_of_time.

Esta es la misma consulta que se configuró para usar el campo pricing_as_of_time:

SELECT sku.id,  sku.description, list_price.*
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(pricing_as_of_time) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Resultados de la consulta

Fila id description pricing_unit aggregation_info.
aggregation_level
aggregation_info.
aggregation_interval
tiered_rates.
pricing_unit_quantity
tiered_rates.
start_usage_amount
tiered_rates.
usd_amount
tiered_rates.
account_currency_amount
1 2DA5-55D3-E679 Solicitudes COUNT CUENTA POR MES 1000000 0 0 0
          1000000 2000000 0.4 0.4

Obtén precios de lista para un SKU específico e incluye la descripción del servicio

En los dos ejemplos de esta sección, se exponen consultas que muestran el list_price para cada nivel de precios de un SKU especificado, y, además, incluye la descripción del SKU y la descripción del servicio.

  • En el ejemplo 1, se muestra un SKU por fila, con los niveles de precios que se muestran como datos anidados.
  • En el ejemplo 2, se muestra cómo desanidar los datos para mostrar una fila por SKU por nivel de precios.

Ejemplo 1: Muestra datos anidados

En este ejemplo, se consulta un solo SKU para que se muestren los datos de list_price. Este SKU tiene varios niveles de precios. Los valores del campo de precio de lista se muestran en filas individuales anidadas en la fila de ID del SKU.

SQL estándar

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       list_price.*
FROM my-billing-admin-project.my_billing_dataset.cloud_pricing_export
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Resultados de la consulta:

Fila sku_id sku_description service_id service_description aggregation_info.
aggregation_level
aggregation_info.
aggregation_interval
tiered_rates.
pricing_unit_quantity
tiered_rates.
start_usage_amount
tiered_rates.
usd_amount
tiered_rates.
account_currency_amount
1 2DA5-55D3-E679 Solicitudes 152E-C115-5142 Cloud Run CUENTA POR MES 1000000 0 0 0
            1000000 2000000 0.4 0.4

Ejemplo 2: Muestra datos no anidados con la misma tabla

En este ejemplo, se consulta un solo SKU para que se muestre list price. El SKU tiene varios niveles de precios. En la consulta, se muestra el uso del operador UNNEST para compactar el arreglo tiered_rates y unir los campos con la misma tabla, lo que genera una fila por nivel de precios.

SQL estándar

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       tier.*
FROM `my-billing-admin-project.my_billing_dataset.cloud_pricing_export` as sku_pricing, UNNEST (sku_pricing.list_price.tiered_rates) as tier
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Resultados de la consulta:

Fila sku_id sku_description service_id service_description pricing_unit_quantity start_usage_amount usd_amount account_currency_amount
1 2DA5-55D3-E679 Solicitudes 152E-C115-5142 Cloud Run 1000000.0 0.0 0.0 0.0
2 2DA5-55D3-E679 Solicitudes 152E-C115-5142 Cloud Run 1000000.0 2000000.0 0.4 0.4

Usar la taxonomía de productos y la taxonomía geográfica para consultar los SKU

  • La taxonomía de productos es una lista de categorías de productos que se aplican al SKU, como sin servidores, Cloud Run o VM a pedido.
  • La taxonomía geográfica es los metadatos geográficos que se aplican a un SKU, que consta de valores de tipo y región.

Obtén la taxonomía de producto de un SKU

En este ejemplo, se observa una consulta que muestra la lista product_taxonomy para un SKU especificado, en el que el ID de SKU = 2DA5-55D3-E679 (Cloud Run: Solicitudes).

SQL estándar

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Resultados de la consulta:

Fila sku_id sku_description service_id service_description product_taxonomy
1 2DA5-55D3-E679 Solicitudes 152E-C115-5142 Cloud Run GCP
        Sin servidores
        Cloud Run
        Otro

Obtén todos los SKU de una taxonomía de productos específica

En este ejemplo, se observa una consulta que muestra todos los SKU que coinciden con un product_taxonomy especificado. En esta consulta, especificamos sin servidores como el valor product taxonomy.

SQL estándar

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
     AND "Serverless" in UNNEST(product_taxonomy)
LIMIT 10
;

Resultados de la consulta:

Fila sku_id sku_description service_id service_description product_taxonomy
1 0160-BD7B-4C40 Salida de red de Cloud Tasks dentro de la región F3A6-D7B7-9BDA Cloud Tasks GCP
        Sin servidores
        Cloud Tasks
        Otro
2 FE08-0A74-7AFD Salida de GOOGLE-API de Cloud Tasks F3A6-D7B7-9BDA Cloud Tasks GCP
        Sin servidores
        Cloud Tasks
        Otro
3 A81A-32A2-B46D Almacenamiento de lista de tareas en cola de Salt Lake City F17B-412E-CB64 App Engine GCP
        Sin servidores
        GAE
        Otro
        TaskQueue

Obtén todos los SKU para una taxonomía geográfica y una taxonomía de productos específicas

En este ejemplo, se observa una consulta que muestra todos los SKU que coinciden con una región geo_taxonomy y una product_taxonomy especificadas, en las que region = us-east4 y product_taxonomy = VM a pedido.

SQL estándar

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       geo_taxonomy,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND "VMs On Demand" in UNNEST(product_taxonomy)
      AND geo_taxonomy.type = "REGIONAL"
      AND "us-east4" in UNNEST (geo_taxonomy.regions)
;

Resultados de la consulta:

Fila sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B Usuario único Premium para RAM de instancia de usuario único que se ejecuta en Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VM a pedido
            Memoria: por GB
2 C3B9-E891-85ED RAM de instancia de usuario única que se ejecuta en Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VM a pedido
            Memoria: por GB
3 6E2A-DCD9-87ED RAM de instancia predefinida N1 que se ejecuta en Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VM a pedido
            Memoria: por GB

Informes de costos y precios disponibles en Google Cloud Console