Ejemplos de consultas para exportar datos de Facturación de Cloud

En este documento, se proporcionan algunos ejemplos de cómo consultar los datos de Facturación de Cloud exportados a BigQuery y almacenados allí.

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

Genera una consulta en SQL a partir de un informe de facturación

Para escribir rápidamente una consulta en SQL que devuelva los resultados equivalentes en BigQuery como los resultados de un informe de facturación, puedes usar la función Generar consulta en Informes de facturación, disponible en la consola de Google Cloud.

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

En estos ejemplos, para consultar tus datos exportados de la Facturación de Cloud en BigQuery, debes especificar la ruta de acceso completa al nombre de la tabla en la cláusula FROM. El nombre de la tabla se determina con tres valores separados por puntos:

project-ID.dataset_name.BQ_table_name

Por ejemplo, supongamos que tienes una cuenta de Facturación de Cloud que está configurada para exportar datos de costo de uso detallado y que los componentes de la configuración de exportación de facturación son los siguientes:

  • project-ID: my-billing-project
  • dataset_name: my_billing_dataset
  • BQ_table_name: gcp_billing_export_resource_v1_<BILLING-ACCOUNT-ID>
  • BILLING-ACCOUNT-ID: 010101-F0FFF0-10X10X: Es el ID de la cuenta de Facturación de Cloud que contiene los datos de facturación que exportas. Obtén información para encontrar el ID de tu cuenta de facturación.

En función de los valores del ejemplo, escribirías la cláusula FROM de la siguiente manera:

my-billing-project.my_billing_dataset.gcp_billing_export_resource_v1_010101-F0FFF0-10X10X

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

En esta sección, se proporcionan ejemplos de consultas para tus datos de costos de uso estándar,datos de costos de uso detallados y datos de precios.

Si elegiste exportar datos de costos de uso detallados entonces puedes usar los ejemplos de consultas de costo de uso estándar, además de los ejemplos de consultas de costo de uso detallado.

Datos de costos de uso estándar Datos de costos de uso detallados Datos de precios
Ejemplos de consultas de costos de uso estándar Ejemplos de consultas de costos de uso detallados Ejemplos de consultas de datos de precios

Ejemplos de consultas de costos de uso estándar

En esta sección, se proporcionan ejemplos de cómo consultar los datos de costos de uso estándar de Facturación de Cloud exportados a BigQuery.

Estos ejemplos de consultas también funcionan con los datos de costos de uso detallados exportados a BigQuery, pese a que no se escriben para recuperar información a nivel de recurso que se proporcione con la opción de exportación de costos de uso detallados.

Valores comunes usados en las consultas de costo estándar de ejemplo

En los ejemplos de consulta de esta sección, se usa el siguiente valor para nombre de tabla: project-ID.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 AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.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 AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.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 Normal $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

En los siguientes ejemplos, se muestran otras maneras de consultar tus datos con etiquetas.

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

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

Tu factura total es de USD 24 con el siguiente desglose:

Instancia Etiquetas Costo total
Instancia pequeña con 1 CPU virtual en ejecución en América Ninguno $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-ID.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 Cadena JSON

Esta es una forma básica 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-ID.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"}] USD 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 colocas 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-ID.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-ID: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-ID.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-ID:dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX]
GROUP BY key, value;
Fila clave 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

En las siguientes consultas, se demuestran formas de ver las tarifas y los créditos asociados con los descuentos por compromiso de uso en los datos de facturación exportados. Para comprender cómo se atribuyen las tarifas y los créditos de compromiso a la cuenta y los proyectos de Facturación de Cloud, consulta Atribución de descuentos por compromiso de uso.

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-ID.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 de 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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(credits) AS credits
WHERE credits.type = "COMMITTED_USAGE_DISCOUNT"
GROUP BY 1

Usa los filtros de la jerarquía de recursos para revisar el principal

Puedes usar filtros de jerarquía de recursos para agregar costos por elementos jerárquicos, como proyectos, carpetas y organizaciones. En estos ejemplos de consulta, se muestran métodos para sumar costos filtrados por elementos de jerarquía de recursos y mostrar los registros del proyecto.

Ejemplo 1: Filtra por nombre de recurso

En este ejemplo, se muestran las consultas que agrupan los costos por principal del proyecto y filtran solo los costos generados en un elemento de jerarquía especificado, identificado por el nombre de recurso relativo.

Método Cadena

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq
  WHERE TO_JSON_STRING(project.ancestors) like "%resource_name\":\"folders/1234"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

Método UNNEST

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq, UNNEST(project.ancestors) as ancestor
  WHERE ancestor.resource_name = "folders/1234"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

Ejemplo 2: Filtra por nombre visible

En este ejemplo, se muestran las consultas que agrupan los costos por principal del proyecto y filtran solo los costos generados en un elemento de jerarquía especificado, identificado por el nombre visible proporcionado por el usuario.

Método de coincidencia de Cadena

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq
  WHERE TO_JSON_STRING(project.ancestors) like "%display_name\":\"MyFolderName%"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

Método UNNEST

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq, UNNEST(project.ancestors) as ancestor
  WHERE ancestor.display_name = "MyFolderName"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

Ejemplos de consultas con etiquetas de política

En los siguientes ejemplos, se ilustran las maneras de consultar tus datos con etiquetas de política.

Calcula los costos por mes de facturación con etiquetas de política

En la siguiente consulta, se demuestra cómo puedes usar los costos de devolución por mes de facturación para la etiqueta de política cost_center.

SELECT
  invoice.month AS invoice_month,
  tag.value AS cost_center,
  ROUND((SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM (CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0))), 2)
    AS net_cost
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`, UNNEST(tags) AS tag
WHERE tag.key = "cost_center" AND tag.namespace = "821092389413"
GROUP BY invoice.month, tag.value
ORDER BY invoice.month, tag.value;

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

Fila invoice_month cost_center net_cost
1 202208 android_mobile_apps 9.93
2 202208 ios_mobile_apps 9.93
3 202209 android_mobile_apps 25.42
4 202209 ios_mobile_apps 25.4
5 202209 personalización 16.08

Visualiza los costos de los recursos sin etiquetar

En esta consulta se muestra el total de la factura de los recursos sin etiquetar, agrupados por mes de facturación.

SELECT
 invoice.month AS invoice_month,
 ROUND((SUM(CAST(cost AS NUMERIC))
   + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                 FROM UNNEST(credits) AS c), 0))), 2)
   AS net_cost
FROM
 `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE "color" NOT IN (SELECT key FROM UNNEST(tags))
GROUP BY invoice_month
ORDER BY invoice_month;

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

Fila invoice_month net_cost
1 202202 0
2 202203 16.81
3 202204 54.09
4 202205 55.82
5 202206 54.09
6 202207 55.83
7 202208 31.49

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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE invoice.month = "202006"
GROUP BY 1, 2
ORDER BY 1;
Fila 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

Consulta los costos para ver las correcciones o el uso monetizado tardío de un mes de facturación específico

Si proporcionas un mes de facturación específico y filtras por fecha en la que la fecha de uso ocurrió antes del mes de facturación, esta consulta simplificada muestra los costos totales de las correcciones o el uso monetizado tardío (cargos que deberían haber estado en una factura anterior).

SQL estándar

SELECT
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
      FROM   UNNEST(credits) c), 0))
    AS total
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE
  invoice.month = '202403' AND
    DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2024-03-01';

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

Fila total
1 3.531752

Consulta los detalles de los costos para ver las correcciones o el uso monetizado tardío por servicio de un mes de facturación específico

Este ejemplo demuestra una consulta que muestra un desglose de costos por servicio, para cargos de factura, en los que la fecha de uso ocurrió antes del mes de facturación. Esta consulta muestra los totales de costos y créditos por servicio para correcciones o uso monetizado tardío (cargos que deberían haber estado en una factura anterior).

En este ejemplo de consulta, la cláusula WHERE filtra todos los cargos con un mes de facturación de marzo de 2024 (en el formato AAAAMM) y, luego, define mejor los resultados para que solo se muestren los cargos de mes de facturación que tienen una fecha de uso anterior al 1 de marzo de 2024.

SELECT
  DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) AS `Day`,
  service.description AS `Service Description`,
  SUM(CAST(cost_at_list AS NUMERIC)) AS `List cost`,
  SUM(CAST(cost AS NUMERIC)) - SUM(CAST(cost_at_list AS NUMERIC)) AS `Negotiated savings`,
  SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('SUSTAINED_USAGE_DISCOUNT', 'DISCOUNT', 'SPENDING_BASED_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT', 'FREE_TIER', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'SUBSCRIPTION_BENEFIT', 'RESELLER_MARGIN')), 0)) AS `Discounts`,
  SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('CREDIT_TYPE_UNSPECIFIED', 'PROMOTION')), 0)) AS `Promotions and others`,
  SUM(CAST(cost_at_list AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('SUSTAINED_USAGE_DISCOUNT', 'DISCOUNT', 'SPENDING_BASED_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT', 'FREE_TIER', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'SUBSCRIPTION_BENEFIT', 'RESELLER_MARGIN')), 0)) + SUM(CAST(cost AS NUMERIC)) - SUM(CAST(cost_at_list AS NUMERIC))+ SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('CREDIT_TYPE_UNSPECIFIED', 'PROMOTION')), 0)) AS `Subtotal`
FROM
  `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE
  invoice.month = '202403' AND
  DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2024-03-01'
GROUP BY
  Day,
  service.description
ORDER BY
  Day DESC,
  Subtotal DESC;

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

Fila Día Descripción del servicio Costo de lista Ahorros negociados Descuentos Promociones y otros créditos Subtotal
1 2024-02-29 Compute Engine 4.39916 0 -1.00916 0 3.39000
2 2024-02-29 Asistencia 0.131969 0 0 0 0.131969
3 2024-02-29 BigQuery 0.005502 0 0 0 0.005502
4 2024-02-29 Herramientas de redes 0.010972 0 -0.006691 0 0.004281

Ejemplos de consultas de costos de uso detallados

En esta sección, se proporcionan ejemplos de cómo consultar los datos de costos de uso detallados de Facturación de Cloud exportados a BigQuery.

Debido a que el esquema de costos de uso detallados incluye todos los campos del esquema de costos de uso estándar, los ejemplos de consulta proporcionados para los datos estándar exportados a BigQuery también funcionan con los datos detallados que se exportan. Los ejemplos de consultas estándar no se escriben para recuperar información a nivel de recurso que se proporcione con la opción de exportación de costos de uso detallados. Cuando creas consultas para los datos detallados puedes usar un ejemplo de consulta estándar como una plantilla, actualizar el nombre de la tabla y agregar cualquiera de los campos que están disponibles en el esquema de costos de uso detallados.

Para conocer más requisitos y limitaciones de los datos detallados exportados, consultaEsquema de los datos de costos de uso detallados.

Valores comunes usados en las consultas de costos detalladas de ejemplo

En los ejemplos de consulta de esta sección, se usa el siguiente valor para nombre de tabla: project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX

Muestra los costos a nivel de recurso en una factura

En las siguientes consultas, se demuestran dos formas de ver los costos y los valores de crédito a nivel de recurso en una factura mediante el uso de los 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.

Suma de costos por cada recurso por factura

Esta consulta muestra el total de la factura de resource.name cada mes como una suma de costos regulares, impuestos, ajustes y errores de redondeo. Cualquier costo no asociado con un elemento a nivel de recurso se agrega en el nombre null del mes.

SQL estándar

SELECT
  invoice.month,
  resource.name,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_resource_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 nombre total total exacto
1 201901 null $1,005.004832999999984 $1,005.00
2 201901 backend1 $781.8499760000028 $781.85
3 201902 null $953.0034923645475983 $953.03
4 201902 backend1 $992.3101739999999717 $992.31
5 201902 bitnami-launchpad-wordpress-1-wordpress $1.2817819999999998 $1.28

Muestra detalles por tipo de costo para cada recurso, por factura mensual

En esta consulta, se muestran los totales de cada cost_type para cada resource.name por mes. Los tipos de costos incluyen costos regulares, impuestos, ajustes y errores de redondeo. Cualquier costo no asociado con un elemento a nivel de recurso se agrega en el nombre null del mes.

SQL estándar

SELECT
  invoice.month,
  cost_type,
  resource.name,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1, 2, 3
ORDER BY 1 ASC, 2 ASC, 3 ASC
;

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

Fila mes tipo de costo nombre total total exacto
1 201901 regular null $1,000.501209987994782 $1,000.50
2 201901 error de redondeo null –$0.500489920049387 –$0.50
3 201901 impuesto null $10.000329958477891 $10.00
4 201901 ajuste null –$5.002572999387045 –$5.00
5 201901 regular backend1 $410.998795012082947 $411.00
2 201901 error de redondeo backend1 –$0.2404900489920378 –$0.24
3 201901 impuesto backend1 $4.105840329977189 $4.11

Obtén un desglose de costos de los clústeres de Google Kubernetes Engine (GKE)

En esta sección, se proporcionan ejemplos de filtrado de costos de clústeres de GKE en tus informes de exportación de BigQuery. Para obtener más información sobre los costos de los clústeres de GKE, consulta Ve el desglose de los costos de los clústeres.

Filtra los costos de GKE

Las siguientes consultas de ejemplo muestran cómo filtrar y agrupar los costos de GKE para los tipos de recursos admitidos por nombre de clúster, espacio de nombres y etiqueta.

Costos de los clústeres de GKE antes de los créditos

SELECT
  SUM(cost) AS cost_before_credits,
  labels.value AS cluster_name
FROM  `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "goog-k8s-cluster-name"
GROUP BY labels.value
;

Costos de GKE después los de créditos por espacio de nombres

SELECT
  labels.value as namespace,
  SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS cost_after_credits,
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "k8s-namespace"
GROUP BY namespace
;

Costos de GKE por SKU

SELECT
  project.id AS project_id,
  labels.value AS cluster_name,
  sku.id AS sku_id,
  sku.description AS sku_description,
  SUM(cost) AS cost
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
JOIN UNNEST(labels) AS labels
  ON labels.key = "goog-k8s-cluster-name"
GROUP BY
  cluster_name, project_id, sku_description, sku_id
;

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 consultas de esta sección, se usan los siguientes valores:

  • Nombre de la tabla:project-ID.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 básica que muestra el objeto list_price para cada nivel de precios de un SKU especificado.

SQL estándar

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

_PARTITIONTIME es un campo que BigQuery genera de forma automática y representa la fecha a la que pertenecen los datos. En lugar de _PARTITIONTIME, puedes usar un campo que la exportación de Facturación de Cloud genera de forma explícita, como pricing_as_of_time.

Esta es la misma consulta configurada para usar el campo pricing_as_of_time:

SELECT sku.id,  sku.description, list_price.*
FROM `project-ID.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 descripción 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 MENSUAL 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 project-ID.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 MENSUAL 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 `project-ID.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 VMs a pedido.
  • La taxonomía geográfica son los metadatos geográficos que se aplican a un SKU y consisten en 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-ID.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, establece 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-ID.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-ID.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
            Procesamiento
            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
            Procesamiento
            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
            Procesamiento
            GCE
            VM a pedido
            Memoria: por GB

Une datos de precios con datos detallados de costos de uso

En esta consulta, se muestra cómo unir las exportaciones de datos de precios y costos para ver la información de precios detallada en línea con tus costos. Puedes configurar esta consulta para extraer datos exportados de tus datos detallados de costos de uso (como Exports) y unir los datos de costos de uso con tus datos de precios exportados (como Prices).

Usa el nombre de la tabla de costos de uso detallados para extraer los datos de Exports: gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>

Usa el nombre de la tabla de precios para los datos de Prices: project-ID.dataset.cloud_pricing_export

WITH
  Exports AS (
    SELECT *
    FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
  ),
  Prices AS (
    SELECT *
    FROM `project-ID.dataset.cloud_pricing_export`
  )
SELECT
  Exports.sku.description AS sku_description,
  Exports.cost,
  Exports.usage,
  FlattenedPrices.pricing_unit_description,
  FlattenedPrices.account_currency_amount,
  FlattenedPrices.account_currency_code,
FROM Exports
JOIN (SELECT * FROM Prices CROSS JOIN UNNEST(Prices.list_price.tiered_rates)) AS FlattenedPrices
  ON
    Exports.sku.id = FlattenedPrices.sku.id
    AND Exports.price.tier_start_amount = FlattenedPrices.start_usage_amount
WHERE
  DATE(Exports.export_time) = '2023-06-30'
  AND DATE(FlattenedPrices.export_time) = '2023-06-30'
  AND cost > 0
LIMIT 1000

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

sku_description costo uso pricing_unit_description account_currency_amount account_currency_code
Capacidad de PD equilibrada 0.001345 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte por mes 0.1 USD
Capacidad de PD equilibrada 0.001344 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte por mes 0.1 USD
Capacidad de PD equilibrada 0.001346 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte por mes 0.1 USD