Exemplos de consultas para a exportação de dados de faturação do Google Cloud

Este documento fornece alguns exemplos de como consultar os dados de faturação do Google Cloud exportados para o BigQuery e armazenados no mesmo.

Para mais informações sobre a exportação dos dados de faturação para o BigQuery, consulte a vista geral e as limitações.

Gere uma consulta SQL a partir de um relatório de custos

Para escrever rapidamente uma consulta SQL que devolva os resultados equivalentes no BigQuery aos resultados num relatório de faturação, pode usar a funcionalidade Gerar consulta nos relatórios de faturação, disponíveis na consola Google Cloud .

Especifique o nome da tabela a usar nas suas consultas

Nestes exemplos, para consultar os dados de faturação do Google Cloud exportados no BigQuery, tem de especificar o caminho completo para o nome da tabela na cláusula FROM. O nome da tabela é determinado através de três valores separados por pontos:

project-ID.dataset_name.BQ_table_name

Por exemplo, suponha que tem uma conta de faturação do Google Cloud configurada para exportar dados de custos de utilização detalhados e que os componentes da configuração de exportação de faturação são os seguintes:

  • 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: este é o ID da conta do Cloud Billing que contém os dados de faturação que está a exportar. Saiba como encontrar o ID da conta de faturação.

Com base nos valores de exemplo, escreveria a cláusula FROM da seguinte forma:

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

Exemplos de consultas por tipo de dados do Cloud Billing

Esta secção fornece exemplos de consultas para os seus dados de custos de utilização padrão, dados de custos de utilização detalhados, e dados de preços.

Se optou por exportar dados de custos de utilização detalhados, pode usar os exemplos de consultas de custos de utilização padrão, além dos exemplos de consultas de custos de utilização detalhados.

Dados de custos de utilização padrão Dados de custos de utilização detalhados Dados de preços
Exemplos de consultas de custos de utilização padrão Exemplos de consultas de custos de utilização detalhados Exemplos de consultas de dados de preços

Exemplos de consultas de custos de utilização padrão

Esta secção fornece exemplos de como consultar os dados de custos de utilização padrão da faturação do Google Cloud exportados para o BigQuery.

Estes exemplos de consultas também funcionam com os dados de custos de utilização detalhados exportados para o BigQuery, embora não sejam escritos para obter nenhuma das informações ao nível do recurso fornecidas com a opção de exportação de custos de utilização detalhados.

Valores comuns usados nos exemplos de consultas de custo padrão

Os exemplos de consultas nesta secção usam o seguinte valor para Nome da tabela: project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX

Devolva os custos totais numa fatura

As consultas seguintes demonstram duas formas de ver os valores de custos e créditos através dos dados de faturação exportados.

  • O campo total soma diretamente os valores de custo e crédito de vírgula flutuante, o que pode resultar em erros de arredondamento de vírgula flutuante.
  • O campo total_exact converte os custos e os valores de crédito em micros antes de os somar e, em seguida, converte-os novamente em dólares após a soma, evitando o erro de arredondamento de ponto flutuante.

Exemplo 1: soma de todos os custos, por fatura

Esta consulta mostra o total da fatura de cada mês, como uma soma dos custos normais, 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 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 exemplo, o resultado da consulta anterior pode ser:

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

Exemplo 2: devolva detalhes por tipo de custo, por mês de faturação

Esta consulta mostra os totais de cada cost_type para cada mês. Os tipos de custos incluem custos normais, 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 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 exemplo, o resultado da consulta anterior pode ser:

Linha mês cost_type total total_exact
1 201901 regular $1000.501209987994782 1000,50 $
2 201901 rounding_error –$0.500489920049387 –$0,50
3 201901 tax $10.000329958477891 10,00 €
4 201901 ajuste –$5.002572999387045 –$5.00

Exemplos de consultas com etiquetas

Os exemplos seguintes ilustram outras formas de consultar os seus dados com etiquetas.

Para os exemplos nesta secção, considere o seguinte:

  • Tem duas apps (grapefruit-squeezer e chocolate-masher).
  • Para cada app, tem dois ambientes (desenvolvimento e produção).
  • O ambiente de desenvolvimento tem uma pequena instância por app.
  • O ambiente de produção tem uma instância pequena nas Américas e uma instância pequena na Ásia.
  • Cada instância é etiquetada com a app e o ambiente.
  • Tem uma instância sem etiquetas que usa para experimentação.

O valor total da fatura é de 24 $, com a seguinte discriminação:

Instância Etiquetas Custo total
Instância pequena com 1 VCPU em execução nas Américas Nenhum 4 €
Instância pequena com 1 VCPU em execução nas Américas app: chocolate-masher
environment: dev
2 €
Instância pequena com 1 VCPU em execução nas Américas app: grapefruit-squeezer
environment: dev
3 €
Instância pequena com 1 VCPU em execução nas Américas app: chocolate-masher
environment: prod
3,25 USD
Instância pequena com 1 VCPU em execução na Ásia app: chocolate-masher
environment: prod
3,75 $
Instância pequena com 1 VCPU em execução nas Américas app: grapefruit-squeezer
environment: prod
3,50 USD
Instância pequena com 1 VCPU em execução na Ásia app: grapefruit-squeezer
environment: prod
4,50 €

Consultar todas as linhas sem agrupar

A vista mais detalhada destes custos seria consultar todas as linhas sem agrupamento. Suponha que todos os campos, exceto as etiquetas e a descrição do SKU, são iguais (projeto, serviço, etc.).

SQL padrão

SELECT
  sku.description,
  TO_JSON_STRING(labels) as labels,
 cost as cost
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`;

SQL antigo

TO_JSON_STRING not supported.
Linha sku.description etiquetas custo
1 Instância pequena com 1 VCPU em execução nas Américas [] 4 €
2 Instância pequena com 1 VCPU em execução nas Américas [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] 2 €
3 Instância pequena com 1 VCPU em execução nas Américas [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] 3 €
4 Instância pequena com 1 VCPU em execução nas Américas [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] 3,25 USD
5 Instância pequena com 1 VCPU em execução na Ásia [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] 3,75 $
6 Instância pequena com 1 VCPU em execução nas Américas [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] 3,50 USD
7 Instância pequena com 1 VCPU em execução na Ásia [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] 4,50 €
TOTAL 24 $

Agrupar por mapa de etiquetas como uma string JSON

Esta é uma forma básica de discriminar o custo por cada combinação de etiquetas.

SQL padrão

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 antigo

TO_JSON_STRING not supported.
Linha etiquetas custo
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 USD
TOTAL 24 $

Agrupe por valor da etiqueta para uma chave específica

A discriminação dos custos para valores de uma chave de etiqueta específica é um exemplo de utilização comum. Se usar um LEFT JOIN e colocar o filtro de chave na condição JOIN (em vez de WHERE), inclui o custo que não contém esta chave e, por isso, recebe uma vista completa do seu custo.

SQL padrão

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 antigo

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

Agrupe por pares de chave/valor

Tenha cuidado ao interpretar ou exportar estes resultados. Uma linha individual aqui mostra uma soma válida sem contagem duplicada, mas não deve ser combinada com outras linhas (exceto possivelmente se a chave for a mesma ou se tiver a certeza 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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
GROUP BY key, value;

SQL antigo

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;
Linha chave valor custo
1 nulo nulo 4 €
2 app chocolate-masher 9 €
3 app grapefruit-squeezer 11 €
4 ambiente dev 5 €
5 ambiente prod 15 $
TOTAL 44 $

Tenha em atenção que a soma total é superior à sua fatura.

Consultas sobre descontos de fidelidade

As seguintes consultas demonstram formas de ver as taxas e os créditos associados aos descontos por utilização garantida nos dados de faturação exportados. Para compreender como as taxas de compromisso e os créditos são atribuídos à sua conta do Cloud Billing e aos projetos, consulte o artigo Atribuição de descontos por utilização comprometida.

Visualizar taxas de compromisso

Para ver as taxas de compromisso dos seus descontos por utilização comprometida na exportação de dados de faturação, use a seguinte consulta de exemplo.

SQL padrão

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 créditos de compromisso

Para ver os créditos do desconto por utilização garantida na exportação de dados de faturação, use a seguinte consulta de exemplo.

SQL padrão

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

Use filtros de hierarquia de recursos para rever a ascendência

Pode usar filtros de hierarquia de recursos para agregar custos por elementos da hierarquia, como projetos, pastas e organizações. Estes exemplos de consultas mostram métodos para somar custos filtrados por elementos da hierarquia de recursos e apresentar as hierarquias dos projetos.

Exemplo 1: filtre pelo nome do recurso

Este exemplo demonstra consultas que agrupam os custos pela hierarquia do projeto e filtram apenas os custos gerados num elemento de hierarquia especificado, identificado pelo nome do recurso relativo.

Método de string

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

Exemplo 2: filtre por nome a apresentar

Este exemplo demonstra consultas que agrupam os custos pela hierarquia do projeto e filtram apenas os custos gerados num elemento de hierarquia especificado, identificado pelo nome a apresentar fornecido pelo utilizador.

Método de correspondência de strings

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

Exemplos de consultas com etiquetas

Os exemplos seguintes ilustram formas de consultar os seus dados com etiquetas.

Calcule os custos por mês de faturação com etiquetas

A consulta seguinte demonstra como pode usar os custos de devolução por mês de faturação para a 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 exemplo, o resultado da consulta anterior pode ser:

Linha 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 personalização 16,08

Veja os custos dos recursos não etiquetados

Esta consulta mostra o total da fatura para recursos não etiquetados, agrupados por mês da fatura.

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

Linha 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

Exemplos de consultas adicionais

Consulte os custos e os créditos por projeto para um mês de faturação especificado

Ao fornecer um mês de faturação específico de junho de 2020 (no formato AAAAMM), esta consulta devolve uma vista dos custos e créditos agrupados por projeto, juntamente com a apresentação das etiquetas de projeto.

SQL padrão

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;
Linha nome 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 - Armazenamento [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"data"}] 7,645793 -0,003761

Consulte os custos para ver correções ou a utilização monetizada tardiamente para um mês de faturação especificado

Ao fornecer um mês de faturação específico e filtrar por data em que a data de utilização ocorreu antes do mês de faturação, esta consulta simplificada devolve os totais de custos das correções ou da utilização monetizada tardiamente (cobranças que deveriam ter sido incluídas numa fatura anterior).

SQL padrão

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

Linha total
1 3.531752

Consulte os detalhes dos custos para ver correções ou a rentabilização tardia da utilização por serviço para um mês de faturação especificado

Este exemplo demonstra uma consulta que devolve uma discriminação de custos por serviço, para encargos de fatura, em que a data de utilização ocorreu antes do mês da fatura. Esta consulta devolve os totais de custos e créditos por serviço para correções ou utilização monetizada tardiamente (cobranças que deveriam ter sido incluídas numa fatura anterior).

Neste exemplo de consulta, a cláusula WHERE filtra todas as cobranças com um mês da fatura de março de 2024 (no formato AAAAMM) e, em seguida, refina ainda mais os resultados para devolver apenas as cobranças do mês da fatura que tenham uma data de utilização anterior a 1 de março 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 exemplo, o resultado da consulta anterior pode ser:

Linha Dia Descrição do serviço Custo de tabela Poupanças negociadas Descontos Promoções e outros Subtotal
1 2024-02-29 Compute Engine 4.39916 0 -1,00916 0 3,39000
2 2024-02-29 Apoio técnico 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

Exemplos de consultas de custos de utilização detalhados

Esta secção fornece exemplos de como consultar os dados de custos de utilização detalhados da faturação do Google Cloud exportados para o BigQuery.

Uma vez que o esquema de custos de utilização detalhado inclui todos os campos do esquema de custos de utilização padrão, os exemplos de consultas fornecidos para os dados padrão exportados para o BigQuery também funcionam com os dados detalhados exportados. Os exemplos de consultas padrão não são escritos para obter nenhuma das informações ao nível do recurso fornecidas com a opção de exportação de custos de utilização detalhada. Quando criar consultas para os dados detalhados, pode usar um exemplo de consulta padrão como modelo, atualizar o nome da tabela e adicionar qualquer um dos campos disponíveis no esquema de custos de utilização detalhado.

Para ver mais requisitos e limitações dos dados detalhados exportados, consulte o esquema dos dados de custos de utilização detalhados.

Valores comuns usados nos exemplos de consultas de custos detalhadas

Os exemplos de consultas nesta secção usam o seguinte valor para Nome da tabela: project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX

Devolva os custos ao nível do recurso numa fatura

As consultas seguintes demonstram duas formas de ver os valores de custos e créditos ao nível do recurso numa fatura através de dados de faturação exportados.

  • O campo total soma diretamente os valores de custo e crédito de vírgula flutuante, o que pode resultar em erros de arredondamento de vírgula flutuante.
  • O campo total_exact converte os custos e os valores de crédito em micros antes de os somar e, em seguida, converte-os novamente em dólares após a soma, evitando o erro de arredondamento de ponto flutuante.

Soma dos custos de cada recurso, por fatura

Esta consulta mostra o total da fatura para cada resource.name por mês, como uma soma dos custos normais, impostos, ajustes e erros de arredondamento. Todos os custos não associados a um item ao nível do recurso são agregados no nome null para o mês.

SQL padrão

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

Linha mês nome total total_exact
1 201901 null $1005.004832999999984 1005,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 USD 1,28 €

Devolve detalhes por tipo de custo para cada recurso, por mês de faturação

Esta consulta mostra os totais de cada cost_type para cada resource.name por mês. Os tipos de custos incluem custos normais, impostos, ajustes e erros de arredondamento. Todos os custos não associados a um item ao nível do recurso são agregados no nome null para o mês.

SQL padrão

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

Linha mês cost_type nome total total_exact
1 201901 regular null $1000.501209987994782 1000,50 $
2 201901 rounding_error null –$0.500489920049387 –$0,50
3 201901 tax null $10.000329958477891 10,00 €
4 201901 ajuste null –$5.002572999387045 –$5.00
5 201901 regular backend1 410,998795012082947 $ 411,00 $
2 201901 rounding_error backend1 –$0.2404900489920378 –$0,24
3 201901 tax backend1 $4.105840329977189 4,11 €

Obtenha uma discriminação dos custos do cluster do Google Kubernetes Engine (GKE)

Esta secção fornece exemplos de filtragem dos custos do cluster do GKE nos relatórios de exportação do BigQuery. Para saber mais acerca dos custos dos clusters do GKE, visite o artigo Veja a discriminação dos custos dos clusters.

Filtre os custos do GKE

As consultas de exemplo seguintes mostram como filtrar e agrupar os custos do GKE para tipos de recursos suportados por nome do cluster, espaço de nomes e etiqueta.

Custos do cluster do GKE antes dos 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
;

Custos do GKE após créditos por espaço de nomes

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
;

Custos do 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
;

Exemplos de consultas de dados de preços

Esta secção apresenta diferentes exemplos de como consultar os dados de preços da Faturação do Google Cloud exportados para o BigQuery.

Valores comuns usados nas consultas de preços de exemplo

Os exemplos de consultas nesta secção usam os seguintes valores:

  • Nome da tabela: project-ID.dataset.cloud_pricing_export
  • ID do SKU: 2DA5-55D3-E679 (Cloud Run – Pedidos)

Obtenha preços de tabela para um SKU específico

Este exemplo demonstra uma consulta básica que devolve o list_price para cada nível de preços para um SKU especificado.

SQL padrão

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 é um campo gerado automaticamente pelo BigQuery e representa a data a que os dados pertencem. Em vez de _PARTITIONTIME, pode usar um campo que a exportação do Cloud Billing gera explicitamente, como pricing_as_of_time.

Segue-se a mesma consulta configurada para usar o 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 da consulta

Linha id descrição 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 Pedidos COUNT CONTA MENSALMENTE 1000000 0 0 0
          1000000 2000000 0,4 0,4

Obtenha preços de tabela para um SKU específico e inclua a descrição do serviço

Os dois exemplos nesta secção demonstram consultas que devolvem o list_price para cada nível de preços para um SKU especificado e incluem a descrição do SKU e a descrição do serviço.

  • O exemplo 1 devolve um SKU por linha, com os níveis de preços apresentados como dados aninhados.
  • O exemplo 2 demonstra a anulação da aninhagem dos dados para devolver uma linha por SKU por nível de preços.

Exemplo 1: devolve dados aninhados

Este exemplo consulta um único SKU para devolver os dados de list_price. Este SKU tem vários níveis de preços. Os valores dos campos de preço de tabela são apresentados em linhas individuais aninhadas na linha do ID do SKU.

SQL padrão

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

Linha 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 Pedidos 152E-C115-5142 Cloud Run CONTA MENSALMENTE 1000000 0 0 0
            1000000 2000000 0,4 0,4

Exemplo 2: devolve dados desagrupados combinados com a mesma tabela

Este exemplo consulta um único SKU para devolver o list price. O SKU tem vários níveis de preços. A consulta demonstra a utilização do operador UNNEST para reduzir a matriz tiered_rates e juntar os campos com a mesma tabela, o que resulta numa linha por nível de preços.

SQL padrão

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

Linha sku_id sku_description service_id service_description pricing_unit_quantity start_usage_amount usd_amount account_currency_amount
1 2DA5-55D3-E679 Pedidos 152E-C115-5142 Cloud Run 1000000,0 0.0 0.0 0.0
2 2DA5-55D3-E679 Pedidos 152E-C115-5142 Cloud Run 1000000,0 2000000,0 0,4 0,4

Use a taxonomia de produtos e a taxonomia geográfica para consultar SKUs

  • A taxonomia de produtos é uma lista de categorias de produtos que se aplicam ao SKU, como Sem servidor, Cloud Run ou VMs a pedido.
  • A taxonomia geográfica é o metadados geográficos que se aplicam a um SKU, que consistem em valores de tipo e região.

Obtenha a taxonomia de produtos de um SKU

Este exemplo demonstra uma consulta que devolve a lista de product_taxonomy para um SKU especificado, em que o ID do SKU = 2DA5-55D3-E679 (Cloud Run - Requests).

SQL padrão

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

Linha sku_id sku_description service_id service_description product_taxonomy
1 2DA5-55D3-E679 Pedidos 152E-C115-5142 Cloud Run GCP
        Sem servidor
        Cloud Run
        Outro

Obtenha todas as SKUs para uma taxonomia de produtos específica

Este exemplo demonstra uma consulta que devolve todos os SKUs que correspondem a um product_taxonomy especificado. Nesta consulta, defina Serverless como o valor product taxonomy.

SQL padrão

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

Linha sku_id sku_description service_id service_description product_taxonomy
1 0160-BD7B-4C40 Saída intrarregional de rede do Cloud Tasks F3A6-D7B7-9BDA Cloud Tasks GCP
        Sem servidor
        Cloud Tasks
        Outro
2 FE08-0A74-7AFD Saída GOOGLE-API do Cloud Tasks F3A6-D7B7-9BDA Cloud Tasks GCP
        Sem servidor
        Cloud Tasks
        Outro
3 A81A-32A2-B46D Armazenamento de filas de tarefas em Salt Lake City F17B-412E-CB64 App Engine GCP
        Sem servidor
        GAE
        Outro
        TaskQueue

Obtenha todas as SKUs para uma taxonomia geográfica e uma taxonomia de produtos específicas

Este exemplo demonstra uma consulta que devolve todos os SKUs que correspondem a uma geo_taxonomy região especificada e a um product_taxonomy> tipo de produto especificado, onde region = us-east4 e product_taxonomy = VMs On Demand.

SQL padrão

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

Linha sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B Sole Tenancy Premium para RAM de instância de Sole Tenancy em execução na Virgínia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Computação
            GCE
            VMs a pedido
            Memória: por GB
2 C3B9-E891-85ED Sole Tenancy Instance Ram running in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Computação
            GCE
            VMs a pedido
            Memória: por GB
3 6E2A-DCD9-87ED RAM de instância predefinida N1 em execução na Virgínia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Computação
            GCE
            VMs a pedido
            Memória: por GB

Associe dados de preços a dados de custos de utilização detalhados

Esta consulta mostra como juntar exportações de dados de preços e custos para ver informações de preços detalhadas em conformidade com os seus custos. Pode configurar esta consulta para extrair dados exportados dos seus dados de custos de utilização detalhados (como Exports) e juntar os dados de custos de utilização aos dados de preços exportados (como Prices).

Use o nome da tabela de custos de utilização detalhados para extrair os dados Exports: gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>

Use o nome da tabela de preços para os dados 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 exemplo, o resultado da consulta anterior pode ser:

sku_description custo utilização pricing_unit_description account_currency_amount account_currency_code
Capacidade de AP equilibrada 0,001345 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte-mês 0,1 USD
Capacidade de AP equilibrada 0,001344 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte-mês 0,1 USD
Capacidade de AP equilibrada 0,001346 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte-mês 0,1 USD