Ejemplos de consultas de BigQuery sobre datos de facturación exportados

A continuación dispones de algunos ejemplos de cómo podrías hacer consultas de BigQuery sobre los datos de facturación exportados.

Para estos ejemplos, debes imaginar la siguiente situación:

  • Tienes 2 aplicaciones (por ejemplo, "grapefruit-squeezer" y "chocolate-masher").
  • Cada aplicación tiene 2 entornos (uno de desarrollo y otro de producción).
  • El entorno de desarrollo tiene 1 instancia pequeña en cada aplicación.
  • El entorno de producción tiene 1 instancia pequeña en América y otra igual en Asia.
  • Cada instancia está etiquetada con la aplicación y el entorno.
  • Tienes 1 instancia sin etiquetas que utilizas para hacer experimentos.

El coste total es de 24 $, cuyo desglose es el siguiente:

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 aplicación: chocolate-masher
entorno: dev
2 $
Instancia pequeña con 1 vCPU ejecutándose en América aplicación: grapefruit-squeezer
entorno: dev
3 $
Instancia pequeña con 1 vCPU ejecutándose en América aplicación: chocolate-masher
entorno: prod
3,25 $
Instancia pequeña con 1 vCPU ejecutándose en Asia aplicación: chocolate-masher
entorno: prod
3,75 $
Instancia pequeña con 1 vCPU ejecutándose en América aplicación: grapefruit-squeezer
entorno: prod
3,50 $
Instancia pequeña con 1 vCPU ejecutándose en Asia aplicación: grapefruit-squeezer
entorno: prod
4,50 $

En los siguientes ejemplos se muestran algunas formas de consultar los datos.

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.dataset.table`;

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

Esta es una forma fácil y rápida de desglosar el coste de cada combinación de etiquetas.

SQL estándar

SELECT
  TO_JSON_STRING(labels) as labels,
  sum(cost) as cost
FROM `project.dataset.table`
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. Cuando se usa la combinación LEFT JOIN y se aplica un filtro de la clave en la condición JOIN (en vez de en WHERE), también se incluye el coste que no contiene dicha clave. De este modo, puedes obtener una vista completa del coste.

SQL estándar

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM `project.dataset.table`
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:dataset.table]
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. En este caso, hay una fila que muestra una suma válida sin que se cuente dos veces, pero no debe combinarse con otras filas (salvo si tienen la misma clave o si sabes a ciencia cierta que las claves en cuestión nunca se han establecido en el mismo recurso).

SQL estándar

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost) as cost
FROM `project.dataset.table`
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:dataset.table]
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.

¿Te ha resultado útil esta página? Enviar comentarios: