Exemplos de consulta de exportação de faturamento para o BigQuery

Veja a seguir alguns exemplos de como você pode usar consultas do BigQuery em dados de faturamento exportados.

Retornar os custos totais em uma fatura

As consultas a seguir demonstram duas maneiras de visualizar valores de custo e crédito usando dados de faturamento exportados.

  • O campo total soma diretamente o custo de ponto flutuante e os valores de crédito, o que pode resultar em erros de arredondamento de ponto flutuante.
  • O campo total_exact converte custos e valores de crédito em micros antes de somar, depois reconverte para dólares após a soma, o que evita o erro de arredondamento de ponto flutuante.

Exemplo 1: soma de todos os custos, por mês da fatura

Essa consulta mostra o total da fatura de cada mês, como uma soma de custos regulares, impostos, ajustes e erros de arredondamento.

SQL padrão

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 exemplo, o resultado da consulta acima pode ser:

Linha mês total total_exact
1 201901 US$ 1005,004832999999984 US$ 1005,00
2 201902 US$ 992,3101739999999717 US$ 992,31
3 201903 US$ 1220,761089999999642 US$ 1220,76

Exemplo 2: retornar detalhes por tipo de custo, por mês da fatura

Esta consulta mostra os totais de cada cost_type por mês. Os tipos de custos incluem custos regulares, impostos, ajustes e erros de arredondamento.

SQL padrão

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 exemplo, o resultado da consulta acima pode ser:

Linha mês cost_type total total_exact
1 201901 regular US$ 1000,501209987994782 US$ 1000,50
2 201901 rounding_error –US$ 0,500489920049387 –US$ 0,50
3 201901 tax US$ 10,000329958477891 US$ 10,00
4 201901 adjustment –US$ 5,002572999387045 –US$ 5,00

Exemplos adicionais de consulta

Veja nos exemplos a seguir algumas maneiras de consultar seus dados.

Para os exemplos nesta seção, pressuponha o seguinte:

  • Você tem 2 aplicativos (grapefruit-squeezer e chocolate-masher).
  • Para cada aplicativo, você tem 2 ambientes: desenvolvimento (dev) e produção (prod).
  • O ambiente de desenvolvimento tem uma pequena instância por aplicativo.
  • O ambiente de produção tem uma pequena instância nas Américas e uma pequena instância na Ásia.
  • Cada instância é rotulada com o aplicativo e o ambiente.
  • Você tem 1 instância sem rótulos utilizada para testes.

Sua conta total é de US$ 24, detalhada da seguinte maneira:

Instância Rótulos Custo total
Pequena instância com 1 vCPU em execução nas Américas Nenhum US$ 4
Pequena instância com 1 vCPU em execução nas Américas app: chocolate-masher
ambiente: dev
US$ 2
Pequena instância com 1 vCPU em execução nas Américas app: grapefruit-squeezer
ambiente: dev
US$ 3
Pequena instância com 1 vCPU em execução nas Américas app: chocolate-masher
ambiente: prod
US$ 3,25
Pequena instância com 1 vCPU em execução na Ásia app: chocolate-masher
ambiente: prod
US$ 3,75
Pequena instância com 1 vCPU em execução nas Américas app: grapefruit-squeezer
ambiente: prod
US$ 3,50
Pequena instância com 1 vCPU em execução na Ásia app: grapefruit-squeezer
ambiente: prod
US$ 4,50

Consultar cada linha sem agrupar

A visão mais granular desses custos seria consultar cada linha sem agrupar. Suponha que todos os campos, exceto os rótulos e a descrição do SKU, sejam os mesmos (projeto, serviço etc.).

SQL padrão

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

SQL legado

TO_JSON_STRING Not supported.
Linha sku.description rótulos custo
1 Pequena instância com 1 vCPU em execução nas Américas [] US$ 4
2 Pequena instância com 1 vCPU em execução nas Américas [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] US$ 2
3 Pequena instância com 1 vCPU em execução nas Américas [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] US$ 3
4 Pequena instância com 1 vCPU em execução nas Américas [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] US$ 3,25
5 Pequena instância com 1 vCPU em execução na Ásia [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] US$ 3,75
6 Pequena instância com 1 vCPU em execução nas Américas [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] US$ 3,50
7 Pequena instância com 1 vCPU em execução na Ásia [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] US$ 4,50
TOTAL US$ 24

Agrupar por mapa de rótulos como uma string JSON

Esta é uma maneira rápida e fácil de detalhar os custos por combinação de rótulos.

SQL padrão

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

SQL legado

TO_JSON_STRING Not supported.
Linha rótulos custo
1 [] US$ 4
2 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] US$ 2
3 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] US$ 3
4 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] US$ 7
5 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] US$ 8
TOTAL US$ 24

Agrupar pelo valor do rótulo de uma chave específica

Detalhar custos para valores de uma chave de rótulo específica é um caso de uso comum. Usando um LEFT JOIN e colocando o filtro de chave na condição JOIN (em vez de WHERE), você inclui um custo que não contém essa chave e, assim, recebe uma visão completa dos custos.

SQL padrão

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 legado

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;
Linha ambiente custo
1 prod US$ 15
2 dev US$ 5
3 null US$ 4
TOTAL US$ 24

Agrupar por pares de chave/valor

Tenha cuidado ao interpretar ou exportar esses resultados. Uma linha individual neste caso mostra uma soma válida sem contagem dupla, mas não deve ser combinada com outras linhas (exceto, possivelmente, se a chave for a mesma ou se você estiver certo de que as chaves nunca são definidas no mesmo recurso).

SQL padrão

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 legado

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost)
FROM [project:dataset.table]
GROUP BY key, value;
Linha chave valor custo
1 null null US$ 4
2 app chocolate-masher US$ 9
3 app grapefruit-squeezer US$ 11
4 environment dev US$ 5
5 environment prod US$ 15
TOTAL US$ 44

Observe que a soma total é maior que sua fatura.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Billing
Precisa de ajuda? Acesse nossa página de suporte.