用户在特定日期范围内的BigQuery费用明细

时间:2018-07-07 23:12:49

标签: google-cloud-platform google-bigquery google-cloud-stackdriver

我在云控制台中使用Stackdriver Logging创建了BigQuery活动的日志导出。

我在Google文档中找到了以下查询,以按用户提取BigQuery费用明细:

#standardSQL
WITH data as
(
  SELECT
    protopayload_auditlog.authenticationInfo.principalEmail as principalEmail,
    protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent as jobCompletedEvent
  FROM
    `AuditLogsDataSet.cloudaudit_googleapis_com_data_access_YYYYMMDD`
)
SELECT
  principalEmail,
  FORMAT('%9.2f',5.0 * (SUM(jobCompletedEvent.job.jobStatistics.totalBilledBytes)/1000000000000)) as Estimated_USD_Cost
FROM
  data
WHERE
  jobCompletedEvent.eventName = 'query_job_completed'
GROUP BY principalEmail
ORDER BY Estimated_USD_Cost DESC

我无法在标准SQL查询中使用TABLE_DATE_RANGE。 有没有一种方法可以在特定日期范围内执行上述查询?

1 个答案:

答案 0 :(得分:0)

由于@ElliotBrossard的评论,我发现您已经能够通过在标准SQL中使用通配符表来弄清楚;无论如何,我想为对该主题感兴趣的任何其他用户添加更多信息。

为了在BigQuery中一次查询多个表中的数据,使用了通配符功能。在旧版SQL和标准SQL中使用通配符的方法不同,因此让我们分别介绍两个选项(尽管要考虑到Standard SQL is the preferred SQL dialect for BigQuery):

旧版SQL 中,您应使用table wildcard functions,例如您要的TABLE_DATE_RANGE()。这些功能在FROM子句中指定,并且有三种可用的功能,您可以在链接的文档中查看。

作为示例,假设我在数据集wildcard1中有表wildcard2wildcard3project:dataset。运行以下查询(使用现有查询中的通配符函数),将返回ID包含单词通配符的所有表的内容:

#legacySQL
SELECT * FROM (TABLE_QUERY([project:dataset], 'table_id CONTAINS "wildcard"'))

标准SQL 中,您应该使用Wildcard Tables。该功能等效于旧版SQL中的通配符功能之一,其背后的想法是相同的(您将只为查询的数据[与通配符匹配的表]付费),并且就限制而言,以下两种方式均不支持缓存的结果可能性。

与以前相同的示例查询,但是现在在标准SQL中使用通配符表将是:

#standardSQL
SELECT * FROM `project.dataset.wildcard*`