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
project-ID
é o ID do projeto do Google Cloud configurado que contém o conjunto de dados do BigQuery.dataset_name
é o nome do conjunto de dados do BigQuery configurado para conter as tabelas do BigQuery com os dados exportados do Cloud Billing.BQ_table_name
é o nome da tabela do BigQuery que contém os dados exportados do Cloud Billing que você quer consultar.As tabelas do BigQuery que contêm os dados exportados do Cloud Billing recebem automaticamente um nome com base no tipo de exportação ativado:
Tabela de custos de uso padrão: no conjunto de dados do BigQuery, essa tabela é denominada
gcp_billing_export_v1_<BILLING-ACCOUNT-ID>
.Tabela de custo de uso detalhado: no conjunto de dados do BigQuery, essa tabela é denominada
gcp_billing_export_resource_v1_<BILLING-ACCOUNT-ID>
.Tabela de preços: no conjunto de dados do BigQuery, ela denominada
cloud_pricing_export
.
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 |
Temas relacionados
Tópicos relacionados aos dados exportados do Cloud Billing
- Configurar a exportação de dados do Cloud Billing para o BigQuery
- Noções básicas sobre as tabelas de dados do Cloud Billing no BigQuery
- Visualizar gastos ao longo do tempo com o Looker Studio
Relatórios de custos e preços disponíveis no Console do Google Cloud
- Visualizar relatórios do Faturamento do Cloud e tendências de custo
- Visualizar e fazer o download dos detalhes de custo da fatura ou do extrato
- Visualizar e fazer o download dos preços dos serviços de nuvem do Google
- Noções básicas sobre o valor economizado com os relatórios de detalhamento de custos
- Analisar a eficácia dos descontos por uso contínuo
- Ver o histórico de custos e pagamentos