Consultas de ejemplo para la exportación de datos de Facturación de Cloud

En este documento se ofrecen algunos ejemplos de cómo consultar los datos de Facturación de Cloud que se han exportado a BigQuery y se almacenan en él.

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

Generar una consulta de SQL a partir de un informe de facturación

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

Especifica el nombre de la tabla que quieres usar en tus consultas

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

project-ID.dataset_name.BQ_table_name

Por ejemplo, supongamos que tienes una cuenta de facturación de Cloud configurada para exportar datos de costes de uso detallados 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 vas a exportar. Consulta cómo encontrar el ID de tu cuenta de facturación.

Según los valores de 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

Consultas de ejemplo por tipo de datos de Facturación de Cloud

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

Si has decidido exportar datos de costes de uso detallados, puedes usar los ejemplos de consulta Costes de uso estándar, además de los ejemplos de consulta Costes de uso detallados.

Datos de costes de uso estándar Datos de costes de uso detallados Datos de precios
Ejemplos de consultas de costes de uso estándar Ejemplos de consultas de costes de uso detallado Ejemplos de consultas de datos de precios

Ejemplos de consultas de costes de uso estándar

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

Estos ejemplos de consultas también funcionan con los datos de costes de uso detallados que se exportan a BigQuery, aunque no se han escrito para recuperar ninguna de las informaciones a nivel de recurso que se proporcionan con la opción de exportación de costes de uso detallados.

Valores comunes utilizados en las consultas de costes estándar de ejemplo

En los ejemplos de consultas de esta sección se usa el siguiente valor para Nombre de tabla: project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX

Devuelve los costes totales de una factura

Las siguientes consultas muestran dos formas de ver los valores de costes y créditos mediante los datos de facturación exportados.

  • El campo total suma directamente los valores de coste y crédito de coma flotante, lo que puede provocar errores de redondeo de coma flotante.
  • El campo total_exact convierte los costes y los valores de crédito a micro antes de sumarlos y, después, los vuelve a convertir a dólares para evitar el error de redondeo de coma flotante.

Ejemplo 1: Suma de todos los costes por factura

Esta consulta muestra el total de la factura de cada mes, que es la suma de los costes normales, los impuestos, los ajustes y los 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:

Acceso mes total total_exact
1 201901 1005,004832999999984 USD $1005.00
2 201902 992,3101739999999717 USD 992,31 $
3 201903 1220,761089999999642 USD 1220,76 USD

Ejemplo 2: Devolver detalles por tipo de coste y mes de facturación

Esta consulta muestra los totales de cada cost_type de cada mes. Los tipos de coste incluyen los costes normales, los impuestos, los ajustes y los 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:

Acceso mes cost_type total total_exact
1 201901 normal 1000,501209987994782 USD 1000,50 USD
2 201901 rounding_error –$0.500489920049387 –0,50 USD
3 201901 impuestos 10,000329958477891 USD 10,00 USD
4 201901 ajuste –5,002572999387045 € –5,00 USD

Ejemplos de consultas con etiquetas

En los siguientes ejemplos se muestran otras formas de consultar los datos con etiquetas.

En los ejemplos de esta sección, se presupone lo siguiente:

  • Tienes dos aplicaciones (exprimidor de pomelos y triturador de chocolate).
  • Cada aplicación tiene dos entornos (desarrollo y producción).
  • El entorno de desarrollo tiene una instancia pequeña por aplicación.
  • El entorno de producción tiene una instancia pequeña en América y otra en Asia.
  • Cada instancia está etiquetada con la aplicación y el entorno.
  • Tienes una instancia sin etiquetas que usas para hacer experimentos.

El importe total de la factura es de 24 USD, con el siguiente desglose:

Instancia Etiquetas Coste total
Instancia pequeña con 1 vCPU ejecutándose en América Ninguna 4 $
Instancia pequeña con 1 vCPU ejecutándose en América app: chocolate-masher
environment: dev
2 USD
Instancia pequeña con 1 vCPU ejecutándose en América app: grapefruit-squeezer
environment: dev
3 USD
Instancia pequeña con 1 vCPU ejecutándose en América app: chocolate-masher
environment: prod
3,25 $
Instancia pequeña con 1 vCPU ejecutándose en Asia app: chocolate-masher
environment: prod
3,75 USD
Instancia pequeña con 1 vCPU ejecutándose en América app: grapefruit-squeezer
environment: prod
3,50 USD
Instancia pequeña con 1 vCPU ejecutándose en Asia app: grapefruit-squeezer
environment: prod
4,50 USD

Hacer consultas con todas las filas sin agrupar

Para obtener más detalles sobre los costes, es necesario hacer una consulta sobre cada fila sin agrupar. Supongamos que todos los campos son iguales (proyecto, servicio, etc.), excepto las etiquetas y la descripción del SKU.

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 antiguo

TO_JSON_STRING not supported.
Fila Descripción del SKU Etiquetas Coste
1 Instancia pequeña con 1 vCPU ejecutándose en América [] 4 $
2 Instancia pequeña con 1 vCPU ejecutándose en América [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] 2 $
3 Instancia pequeña con 1 vCPU ejecutándose en América [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] 3 $
4 Instancia pequeña con 1 vCPU ejecutándose en América [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] 3,25 $
5 Instancia pequeña con 1 vCPU ejecutándose en Asia [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] 3,75 $
6 Instancia pequeña con 1 vCPU ejecutándose en América [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] 3,50 $
7 Instancia pequeña con 1 vCPU ejecutándose en Asia [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] 4,50 $
TOTAL 24 $

Agrupar por mapa de etiqueta como una cadena JSON

Es una forma básica de desglosar los costes 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 antiguo

TO_JSON_STRING not supported.
Fila Etiquetas Coste
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 buscar una clave concreta

Normalmente, se desglosan los costes de los valores de las claves de etiquetas concretas. Si usas LEFT JOIN y pones el filtro de clave en la condición JOIN (en lugar de WHERE), incluyes los costes que no contienen esta clave y, por lo tanto, obtienes una vista completa de tus costes.

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 antiguo

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 Coste
1 prod 15 $
2 dev 5 $
3 null 4 $
TOTAL 24 $

Agrupar por pares clave/valor

Estos resultados deben exportarse o interpretarse con precaución. Una fila individual muestra una suma válida sin duplicados, pero no se debe combinar con otras filas (excepto si la clave es la misma o si tiene la certeza de que las claves nunca se definen 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 antiguo

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 Coste
1 null null 4 $
2 app chocolate-masher 9 $
3 app grapefruit-squeezer 11 $
4 environment dev 5 $
5 environment prod 15 $
TOTAL 44 $

Cabe destacar que la suma del total es más alta que el precio de tu factura.

Consultas sobre descuentos por uso confirmado

Las siguientes consultas muestran formas de ver las comisiones y los créditos asociados a los descuentos por compromiso de uso en los datos de facturación exportados. Para saber cómo se atribuyen las cuotas y los créditos de tu compromiso a tu cuenta de facturación de Cloud y a tus proyectos, consulta Atribución de descuentos por compromiso de uso.

Ver las comisiones de compromiso

Para ver las cuotas de compromiso de tus descuentos por uso comprometido en la exportación de datos de facturación, usa la siguiente consulta de ejemplo.

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

Ver 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 ejemplo.

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

Usar filtros de jerarquía de recursos para consultar la ascendencia

Puede usar filtros de jerarquía de recursos para agregar costes por elementos de la jerarquía, como proyectos, carpetas y organizaciones. En estos ejemplos de consultas se muestran métodos para sumar los costes filtrados por elementos de la jerarquía de recursos y mostrar las ancestrías de los proyectos.

Ejemplo 1: Filtrar por nombre de recurso

En este ejemplo se muestran consultas que agrupan los costes por la jerarquía de proyectos y se filtran para mostrar solo los costes generados en un elemento de jerarquía específico, identificado por el nombre de recurso relativo.

Método 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 "%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: Filtrar por nombre visible

En este ejemplo se muestran consultas que agrupan los costes por la jerarquía de proyectos y se filtran para mostrar solo los costes generados en un elemento de jerarquía especificado, identificado por el nombre visible proporcionado por el usuario.

Método de coincidencia de cadenas

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

En los siguientes ejemplos se muestran formas de consultar tus datos con etiquetas.

Calcular los costes por mes de facturación con etiquetas

La siguiente consulta muestra cómo puede usar los costes de retorno por mes de facturación de la etiqueta 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:

Acceso 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

Ver los costes de los recursos sin etiquetar

Esta consulta 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:

Acceso 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 consultas adicionales

Consultar los costes y los créditos por proyecto de un mes de facturación concreto

Si se indica el mes de junio del 2020 (en formato AAAAMM), esta consulta devuelve una vista de los costes y los créditos agrupados por proyecto, así como las etiquetas de los proyectos.

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;
Acceso name project_labels total_cost total_credits
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 - Almacenamiento [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"data"}] 7,645793 -0,003761

Consultar los costes para ver las correcciones o el uso monetizado tardío de un mes de facturación concreto

Si proporcionas un mes de facturación específico y filtras por la fecha en la que se produjo el uso antes del mes de facturación, esta consulta simplificada devuelve los totales de costes de las correcciones o del uso monetizado tardíamente (cargos que deberían haber aparecido 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:

Acceso total
1 3,531752

Consultar los detalles de los costes para ver las correcciones o el uso monetizado tardío por servicio de un mes de facturación concreto

En este ejemplo se muestra una consulta que devuelve un desglose de costes por servicio de los cargos de factura, donde la fecha de uso es anterior al mes de la factura. Esta consulta devuelve los totales de costes y créditos por servicio de las correcciones o del uso monetizado tardío (cargos que deberían haber aparecido 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 del 2024 (en el formato YYYYMM) y, a continuación, acota los resultados para que solo se devuelvan los cargos con un mes de facturación que tengan una fecha de uso anterior al 1 de marzo del 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:

Acceso Día Descripción del servicio Coste según catálogo Ahorros negociados Descuentos Créditos promocionales y otros 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 Redes 0,010972 0 -0,006691 0 0,004281

Ejemplos de consultas de costes de uso detallados

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

Como el esquema de costes de uso detallado incluye todos los campos del esquema de costes de uso estándar, los ejemplos de consultas proporcionados para los datos estándar exportados a BigQuery también funcionan con los datos detallados exportados. Las consultas estándar no se han escrito para obtener ninguna de las informaciones a nivel de recurso que se proporcionan con la opción de exportación de costes de uso detallada. Cuando crees consultas para los datos detallados, puedes usar una consulta estándar como plantilla, actualizar el nombre de la tabla y añadir cualquiera de los campos disponibles en el esquema de costes de uso detallado.

Para obtener más información sobre los requisitos y las limitaciones de los datos detallados exportados, consulta el esquema de los datos de costes de uso detallados.

Valores comunes usados en las consultas de costes detalladas de ejemplo

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

Devolver los costes a nivel de recurso de una factura

Las siguientes consultas muestran dos formas de ver los valores de costes y créditos a nivel de recurso en una factura mediante los datos de facturación exportados.

  • El campo total suma directamente los valores de coste y crédito de coma flotante, lo que puede provocar errores de redondeo de coma flotante.
  • El campo total_exact convierte los costes y los valores de crédito a micro antes de sumarlos y, después, los vuelve a convertir a dólares para evitar el error de redondeo de coma flotante.

Suma de los costes de cada recurso por factura

Esta consulta muestra el total de la factura de cada resource.name al mes, como suma de los costes normales, los impuestos, los ajustes y los errores de redondeo. Los costes que no estén asociados a un elemento de nivel de recurso se agregan 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:

Acceso mes name total total_exact
1 201901 null 1005,004832999999984 USD $1005.00
2 201901 backend1 $781.8499760000028 781,85 USD
3 201902 null 953,0034923645475983 USD 953,03 USD
4 201902 backend1 992,3101739999999717 USD 992,31 $
5 201902 bitnami-launchpad-wordpress-1-wordpress 1,2817819999999998 USD 1,28 USD

Devuelve los detalles por tipo de coste de cada recurso por mes de facturación.

Esta consulta muestra los totales de cada cost_type de cada resource.name por mes. Los tipos de costes incluyen los costes normales, los impuestos, los ajustes y los errores de redondeo. Los costes que no estén asociados a un elemento de nivel de recurso se agregan 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:

Acceso mes cost_type name total total_exact
1 201901 normal null 1000,501209987994782 USD 1000,50 USD
2 201901 rounding_error null –$0.500489920049387 –0,50 USD
3 201901 impuestos null 10,000329958477891 USD 10,00 USD
4 201901 ajuste null –5,002572999387045 $ –5,00 USD
5 201901 normal backend1 410,998795012082947 USD 411,00 $
2 201901 rounding_error backend1 –0,2404900489920378 USD –0,24 USD
3 201901 impuestos backend1 4,105840329977189 USD 4,11 USD

Obtener un desglose de los costes de los clústeres de Google Kubernetes Engine (GKE)

En esta sección se proporcionan ejemplos de cómo filtrar los costes de los clústeres de GKE en los informes de exportación de BigQuery. Para obtener más información sobre los costes de los clústeres de GKE, consulta el artículo Ver el desglose de los costes de los clústeres.

Filtrar costes de GKE

En las siguientes consultas de ejemplo se muestra cómo filtrar y agrupar los costes de GKE de los tipos de recursos admitidos por nombre de clúster, espacio de nombres y etiqueta.

Costes de los clústeres de GKE antes de aplicar 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
;

Costes de GKE después de aplicar los 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
;

Costes 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 ofrecen diferentes ejemplos de cómo consultar los datos de precios de Facturación de Cloud exportados a BigQuery.

Valores habituales 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-ID.dataset.cloud_pricing_export
  • ID de SKU: 2DA5-55D3-E679 (Cloud Run - Requests)

Obtener los precios de lista de un SKU específico

En este ejemplo se muestra una consulta básica que devuelve el list_price de cada nivel de precios de un SKU concreto.

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 genera automáticamente BigQuery 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 explícitamente, 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

Acceso 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 MENSUAL 1000000 0 0 0
          1000000 2000000 0,4 0,4

Obtener los precios según catálogo de un SKU específico e incluir la descripción del servicio

Los dos ejemplos de esta sección muestran consultas que devuelven el list_price de cada nivel de precios de un SKU específico e incluyen la descripción del SKU y la descripción del servicio.

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

Ejemplo 1: Devuelve datos anidados

En este ejemplo se consulta un solo SKU para devolver los datos de list_price. Este SKU tiene varios niveles de precios. Los valores del campo de precio de venta se muestran en filas individuales anidadas en la fila del ID de 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:

Acceso 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: Devuelve datos sin anidar combinados con la misma tabla

En este ejemplo, se consulta un solo SKU para devolver el list price. El SKU tiene varios niveles de precios. La consulta muestra cómo usar el operador UNNEST para aplanar la matriz tiered_rates y unir los campos con la misma tabla, lo que da como resultado 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:

Acceso 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 1.000.000,0 0,0 0,0 0,0
2 2DA5-55D3-E679 Solicitudes 152E-C115-5142 Cloud Run 1.000.000,0 2000000,0 0,4 0,4

Usar taxonomías de producto y geográficas para consultar SKUs

  • La taxonomía de productos es una lista de categorías de productos que se aplican al SKU, como Sin servidor, Cloud Run o Máquinas virtuales bajo demanda.
  • La taxonomía geográfica es los metadatos geográficos que se aplican a un SKU y que constan de valores de tipo y región.

Obtener la taxonomía de producto de un SKU

En este ejemplo se muestra una consulta que devuelve la lista product_taxonomy de un SKU específico, donde el ID de SKU es 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:

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

Obtener todos los SKUs de una taxonomía de producto específica

En este ejemplo se muestra una consulta que devuelve todos los SKUs que coinciden con un product_taxonomy especificado. En esta consulta, defina Serverless como valor de 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:

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

Obtener todos los SKUs de una taxonomía geográfica y una taxonomía de producto específicas

En este ejemplo se muestra una consulta que devuelve todos los SKUs que coinciden con una geo_taxonomy región y un product_taxonomy especificados, donde region = us-east4 y product_taxonomy = VMs On Demand.

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:

Acceso sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B Prima de único cliente para RAM de instancia de único cliente que se ejecuta en Virginia 6F81-5844-456A Compute Engine REGIONAL us‑east4 GCP
            Computación
            GCE
            VMs On Demand
            Memoria: por GB
2 C3B9-E891-85ED RAM de instancia de aislamiento de un solo inquilino que se ejecuta en Virginia 6F81-5844-456A Compute Engine REGIONAL us‑east4 GCP
            Computación
            GCE
            VMs On Demand
            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
            Computación
            GCE
            VMs On Demand
            Memoria: por GB

Combinar datos de precios con datos de costes de uso detallados

Esta consulta muestra cómo combinar las exportaciones de datos de precios y costes para ver información detallada sobre los precios en consonancia con sus costes. Puedes configurar esta consulta para extraer los datos exportados de tus datos de costes de uso detallados (como Exports) y combinar tus datos de costes de uso con tus datos de precios exportados (como Prices).

Usa el nombre de la tabla de costes de uso detallado para obtener 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 Coste uso pricing_unit_description account_currency_amount account_currency_code
Capacidad de disco persistente balanceado 0,001345 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte al mes 0,1 USD
Capacidad de disco persistente balanceado 0,001344 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte al mes 0,1 USD
Capacidad de disco persistente balanceado 0,001346 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte al mes 0,1 USD