Exemplo de consultas para exportação de dados do Cloud Billing

Neste documento, apresentamos alguns exemplos de como consultar os dados do Cloud Billing exportados e armazenados no BigQuery.

Para mais informações sobre como exportar seus dados de faturamento para o BigQuery, consulte a visão geral e as limitações.

Gerar uma consulta SQL a partir de um relatório de faturamento

Para escrever rapidamente uma consulta SQL que retorna os resultados equivalentes no BigQuery como os resultados em um relatório de faturamento, use o recurso Gerar consulta nos relatórios de faturamento, disponíveis no console do Google Cloud.

Especificar o nome da tabela a ser usado nas consultas

Nesses exemplos, para consultar os dados exportados do Cloud Billing no BigQuery, você precisa especificar o caminho completo para o nome da tabela na cláusula FROM. O nome da tabela é determinado usando três valores separados por pontos:

project-ID.dataset_name.BQ_table_name

Por exemplo, suponha que você tenha uma conta do Cloud Billing configurada para exportar dados de custo de uso detalhado e que a configuração de exportação de faturamento seja a seguinte:

  • 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 é o ID da conta do Cloud Billing que contém os dados de faturamento que você está exportando. Saiba como encontrar o ID da conta de faturamento.

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

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

Exemplo de consultas por tipo de dados do Cloud Billing

Esta seção fornece exemplos de consulta para seus dados de custo de uso padrão, dados detalhados de custo de uso e dados de preços.

Se você optou por exportar dados de custo de uso detalhado, use os exemplos de consulta de custo de uso padrão, além dos exemplos de consulta de custo de uso detalhado.

Dados de custo de uso padrão Dados de custo de uso detalhados Dados dos preços
Exemplos de consultas de custo de uso padrão Exemplos detalhados de consulta de custo de uso Exemplos de consulta de dados de preços

Exemplos de consulta de custo de uso padrão

Nesta seção, você verá exemplos sobre como consultar os dados de custo de uso padrão do Cloud Billing exportados para o BigQuery.

Esses exemplos de consulta também funcionam com os dados detalhados de custo de uso exportados para o BigQuery, embora não sejam gravados para recuperar qualquer informação no nível do recurso fornecida com a opção de exportação de custo de uso detalhada.

Valores comuns usados nas consultas de custo padrão de exemplo

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

Retornar os custos totais em uma fatura

Nas consultas a seguir, demonstramos 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 acarretar 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 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 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 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

Nesta consulta, mostramos os totais de cada cost_type para cada mês. Os tipos de custos incluem custos regulares, tributos, 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 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 ajuste –US$ 5,002572999387045 –US$ 5,00

Exemplos de consultas com rótulos

Os exemplos a seguir ilustram outras maneiras de consultar dados com rótulos.

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

  • Você tem dois apps (grapefruit-squeezer e chocolate-masher).
  • Para cada app, você 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 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 uma instância sem rótulos que usa para testes.

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

Instância Rótulos Custo total
Pequena instância com uma vCPU em execução nas Américas Nenhum US$ 4
Pequena instância com uma vCPU em execução nas Américas app: chocolate-masher
ambiente: dev
US$ 2
Pequena instância com uma vCPU em execução nas Américas app: grapefruit-squeezer
ambiente: dev
US$ 3
Pequena instância com uma vCPU em execução nas Américas app: chocolate-masher
ambiente: prod
US$ 3,25
Pequena instância com uma vCPU em execução na Ásia app: chocolate-masher
ambiente: prod
US$ 3,75
Pequena instância com uma vCPU em execução nas Américas app: grapefruit-squeezer
ambiente: prod
US$ 3,50
Pequena instância com uma 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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`;

SQL legado

TO_JSON_STRING not supported.
Linha sku.description rótulos custo
1 Pequena instância com uma vCPU em execução nas Américas [] US$ 4
2 Pequena instância com uma vCPU em execução nas Américas [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] US$ 2
3 Pequena instância com uma vCPU em execução nas Américas [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] US$ 3
4 Pequena instância com uma vCPU em execução nas Américas [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] US$ 3,25
5 Pequena instância com uma vCPU em execução na Ásia [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] US$ 3,75
6 Pequena instância com uma vCPU em execução nas Américas [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] US$ 3,50
7 Pequena instância com uma 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 básica 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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
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-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
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-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 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 aqui 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ê tiver 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 legado

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

Observe que a soma total é maior que sua fatura.

Consultas de desconto por uso contínuo

As consultas a seguir demonstram maneiras de visualizar as taxas e os créditos associados aos descontos por uso contínuo nos dados de faturamento exportados. Para entender como as taxas e os créditos de compromisso são atribuídos à sua conta e aos projetos do Cloud Billing, consulte Atribuição de descontos por uso contínuo.

Como visualizar taxas de compromisso

Para visualizar as taxas de compromisso dos descontos por uso contínuo na exportação de dados de faturamento, use a consulta de amostra a seguir.

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

Como visualizar créditos de compromisso

Para visualizar créditos de desconto por uso contínuo na exportação dos dados de faturamento, use a seguinte consulta de amostra.

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

Usar filtros de hierarquia de recursos para analisar a ancestralidade

Os filtros de hierarquia de recursos podem ser usados para agregar custos por elementos de hierarquia, como projetos, pastas e organizações. Estes exemplos de consulta mostram métodos para somar os custos filtrados por elementos da hierarquia de recursos e exibir as ancestralidades do projeto.

Exemplo 1: filtrar por nome de recurso

Este exemplo demonstra consultas que agrupam custos por ancestralidade do projeto e filtram apenas os custos gerados em um elemento de hierarquia especificado, identificado pelo nome do recurso relacionado.

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: filtrar por nome de exibição

Este exemplo demonstra consultas que agrupam custos por ancestralidade do projeto e filtram apenas os custos gerados em um elemento de hierarquia especificado, identificado pelo nome de exibição fornecido pelo usuário.

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 tags

Os exemplos a seguir ilustram formas de consultar seus dados com tags.

Calcular custos por mês da fatura com tags

A consulta a seguir demonstra como usar os custos de devolução por mês da fatura da tag 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

Ver os custos dos recursos sem tags

Essa consulta mostra o total da fatura para recursos sem tag, 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

Outros exemplos de consulta

Consultar custos e créditos por projeto de um mês específico da fatura

Se você fornecer o mês de fatura específico de junho de 2020 (no formato AAAAMM), essa consulta retornará uma visualização dos custos e créditos agrupados por projeto, além de mostrar rótulos 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 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 - Storage [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"data"}] 7.645793 -0,003761

Consultar custos para ver correções ou uso monetizado com atraso em um mês específico da fatura

Ao informar um mês específico da fatura e filtrar por data em que a data de uso ocorreu antes do mês da fatura, essa consulta simplificada retorna os custos totais para correções ou uso monetizado com atraso (cobranças que deveriam ter sido feitas em uma 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

Consultar detalhes de custo para ver correções ou uso monetizado com atraso por serviço em um mês específico da fatura

Neste exemplo, demonstramos uma consulta que retorna um detalhamento de custos por serviço para cobranças de fatura, em que a data de uso ocorreu antes do mês da fatura. Essa consulta retorna os totais de custo e crédito por serviço para correções ou uso monetizado com atraso (cobranças que deveriam ter sido feitas em uma fatura anterior).

Neste exemplo de consulta, a cláusula WHERE filtra todas as cobranças com o mês da fatura de março de 2024 (no formato AAAAMM) e, em seguida, refina ainda mais os resultados para retornar apenas as cobranças do mês da fatura que têm uma data de uso antes de 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 Preço de lista Economia negociada Descontos Promoções e outros créditos Subtotal
1 2024-02-29 Compute Engine 4,39916 0 -1,00916 0 3,39000
2 2024-02-29 Suporte 0,131969 0 0 0 0,131969
3 2024-02-29 BigQuery 0,005502 0 0 0 0,005502
4 2024-02-29 Rede 0,010972 0 -0,006691 0 0,004281

Exemplos detalhados de consultas de custo de uso

Nesta seção, você verá exemplos sobre como consultar os dados de custo de uso detalhado do Cloud Billing exportados para o BigQuery.

Como o esquema de custo de uso detalhado inclui todos os campos do esquema de custo de uso padrão, os exemplos de consulta fornecidos para os dados padrão exportados para o BigQuery também funcionam com os dados detalhados exportados. Os exemplos de consulta padrão não são gravados para recuperar qualquer informação no nível do recurso fornecida com a opção de exportação de custo de uso detalhada. Ao criar consultas para dados detalhados, você 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 custo de uso detalhado.

Para mais requisitos e limitações para os dados detalhados exportados, consulte Esquema dos dados de custo de uso detalhado.

Valores comuns usados no exemplo de consultas de custo detalhadas

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

Retornar os custos no nível do recurso em uma fatura

As consultas a seguir demonstram duas maneiras de visualizar valores de custo e crédito no nível do recurso em uma fatura usando dados de faturamento exportados.

  • O campo total soma diretamente o custo de ponto flutuante e os valores de crédito, o que pode acarretar 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.

Soma dos custos de cada recurso, por fatura

Essa consulta mostra o total da fatura de cada resource.name por mês, como uma soma de custos regulares, impostos, ajustes e erros de arredondamento. Todos os custos não associados a um item no nível do recurso são agregados com o nome null do 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 US$ 1005,004832999999984 US$ 1005,00
2 201901 backend1 US$ 781,8499760000028 US$ 781,85
3 201902 null US$ 953,0034923645475983 US$ 953,03
4 201902 backend1 US$ 992,3101739999999717 US$ 992,31
5 201902 bitnami-launchpad-wordpress-1-wordpress US$ 1,2817819999999998 US$ 1,28

Retornar detalhes por tipo de custo para cada recurso, por mês da fatura

Nesta consulta, mostramos os totais de cada cost_type para cada resource.name mês. Os tipos de custos incluem custos regulares, tributos, ajustes e erros de arredondamento. Todos os custos não associados a um item no nível do recurso são agregados de acordo com o nome null do 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 US$ 1000,501209987994782 US$ 1000,50
2 201901 rounding_error null –US$ 0,500489920049387 –US$ 0,50
3 201901 tax null US$ 10,000329958477891 US$ 10,00
4 201901 ajuste null –US$ 5,002572999387045 –US$ 5,00
5 201901 regular backend1 US$ 410,998795012082947 US$ 411,00
2 201901 rounding_error backend1 –US$ 0,2404900489920378 –US$ 0,24
3 201901 tax backend1 US$ 4,105840329977189 US$ 4,11

Veja um detalhamento dos custos do cluster do Google Kubernetes Engine (GKE)

Nesta seção, apresentamos exemplos de filtragem dos custos do cluster do GKE nos relatórios de exportação do BigQuery. Para saber mais sobre os custos do cluster do GKE, acesse Ver o detalhamento dos custos do cluster.

Filtrar custos do GKE

Os exemplos de consultas a seguir mostram como filtrar e agrupar os custos do GKE de acordo com os tipos de recursos compatíveis por nome, namespace e rótulo do cluster.

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 namespace

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 consulta de dados de preços

Nesta seção, apresentamos exemplos diferentes de como consultar os dados de preços do Cloud Billing exportados para o BigQuery.

Valores comuns usados nas consultas de preços de exemplo

Os exemplos de consulta nesta seção usam os seguintes valores:

  • Nome da tabela: project-ID.dataset.cloud_pricing_export
  • ID da SKU: 2DA5-55D3-E679 (Cloud Run - Solicitações)

Ver os preços de tabela de uma SKU específica

Neste exemplo, demonstramos uma consulta simples que retorna o list_price para cada nível de preços de uma SKU especificada.

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 referente aos dados. Em vez de _PARTITIONTIME, é possível usar um campo que a exportação do Cloud Billing gera explicitamente, como pricing_as_of_time.

Esta é 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 Solicitações COUNT CONTA MENSAL 1000000 0 0 0
          1000000 2000000 0,4 0,4

Ver os preços de tabela de uma SKU específica e incluir a descrição do serviço

Os dois exemplos nesta seção demonstram consultas que retornam o list_price para cada nível de preços de uma SKU especificada, além de incluir a descrição da SKU e do serviço.

  • O exemplo 1 retorna uma SKU por linha, com os níveis de preços exibidos como dados aninhados.
  • O exemplo 2 demonstra como desaninhar os dados para retornar uma linha por SKU por nível de preço.

Exemplo 1: retorna dados aninhados

Este exemplo consulta uma única SKU para retornar os dados do list_price. Essa SKU tem vários níveis de preços. Os valores do campo de preço de tabela são exibidos em linhas individuais aninhadas na linha do ID da 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 Solicitações 152E-C115-5142 Cloud Run CONTA MENSAL 1000000 0 0 0
            1000000 2000000 0,4 0,4

Exemplo 2: retorna dados não aninhados que foram mesclados com a mesma tabela

Neste exemplo, consultamos uma única SKU para retornar o list price. A SKU tem vários níveis de preços. A consulta demonstra o uso do operador UNNEST para nivelar a matriz de tiered_rates e mesclar os campos com o mesma tabela, o que resulta em uma linha por nível de preço.

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 Solicitações 152E-C115-5142 Cloud Run 1000000.0 0,0 0,0 0,0
2 2DA5-55D3-E679 Solicitações 152E-C115-5142 Cloud Run 1000000.0 2000000.0 0,4 0,4

Usar a taxonomia do produto e taxonomia geográfica para consultar SKUs

  • A taxonomia do produto é uma lista de categorias de produtos que se aplicam à SKU, como sem servidor, Cloud Run ou VMs sob demanda.
  • Taxonomia geográfica são os metadados geográficos que se aplicam a uma SKU e consiste em valores de tipo e região.

Ver a taxonomia do produto de uma SKU

Este exemplo demonstra uma consulta que retorna a lista product_taxonomy para uma SKU especificada, em que o ID da SKU = 2DA5-55D3-E679 (Cloud Run - Solicitações).

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 Solicitações 152E-C115-5142 Cloud Run GCP
        Sem servidor
        Cloud Run
        Outro

Ver todas as SKUs para uma taxonomia de produto específica

Este exemplo demonstra uma consulta que retorna todas as SKUs que correspondem a um product_taxonomy especificado. Nesta consulta, defina Serverless como o valor de 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 de intraregião da rede do Cloud Tasks F3A6-D7B7-9BDA Cloud Tasks GCP
        Sem servidor
        Cloud Tasks
        Outro
2 FE08-0A74-7AFD Saída da API GOOGLE do Cloud Tasks F3A6-D7B7-9BDA Cloud Tasks GCP
        Sem servidor
        Cloud Tasks
        Outro
3 A81A-32A2-B46D Armazenamento de fila de tarefas de Salt Lake City F17B-412E-CB64 App Engine GCP
        Sem servidor
        GAE
        Outro
        Fila de tarefas

Ver todas as SKUs de taxonomias geográficas e de produto específicas

Este exemplo demonstra uma consulta que retorna todas as SKUs correspondentes a uma região geo_taxonomy especificada e um product_taxonomy especificado, em que region = us-east4 e product_taxonomy = VMs sob demanda.

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 Premium de locatário única para instância de locatário única em execução na Virgínia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Computação
            GCE
            VMs sob demanda
            Memória: por GB
2 C3B9-E891-85ED RAM da instância de locatário individual em execução na Virgínia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Computação
            GCE
            VMs sob demanda
            Memória: por GB
3 6E2A-DCD9-87ED RAM da instância pré-definida N1 em execução na Virgínia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Computação
            GCE
            VMs sob demanda
            Memória: por GB

Mesclar dados de preços com dados detalhados de custo de uso

Esta consulta mostra como mesclar exportações de dados de preços e custo para ver informações detalhadas de preços de acordo com seus custos. É possível configurar essa consulta para extrair dados exportados dos dados de custo de uso detalhado (como Exports) e mesclar os dados de custo de uso com osdados de preços (como Prices).

Use o nome da tabela de custo de uso detalhado para extrair os dados de Exports: gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>

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

sku_description custo uso pricing_unit_description account_currency_amount account_currency_code
Capacidade de DP equilibrada 0.001345 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte por mês 0,1 USD
Capacidade de DP equilibrada 0.001344 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte por mês 0,1 USD
Capacidade de DP equilibrada 0.001346 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } gibibyte por mês 0,1 USD