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



>我在云控制台中使用堆栈驱动程序日志记录创建了 BigQuery 活动的日志记录导出。

我在谷歌文档中发现了以下查询,以按用户提取 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。 有没有办法在特定日期范围内执行上述查询?

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

为了在 BigQuery 中一次查询多个表中的数据,使用了通配符功能。在传统 SQL 和标准 SQL 中使用通配符的方法不同,因此让我们分别介绍这两个选项(尽管考虑到标准 SQL 是 BigQuery 的首选 SQL 方言(:

旧版 SQL中,应使用表通配符函数,例如您请求的通配符函数TABLE_DATE_RANGE()。这些函数在FROM子句中指定,并且有三种不同的函数可用,您可以在链接的文档中查看它们。

例如,假设我在数据集project:datasetwildcard1wildcard2wildcard3表。运行以下查询(使用可用通配符函数(将返回 ID 包含单词通配符的所有表的内容:

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

相反,在标准 SQL中,您应该使用通配符表。该功能等同于旧版 SQL 中的通配符函数之一,它们背后的思想是相同的(您只需为查询的数据 [与通配符匹配的表]付费(,并且关于限制,缓存结果在这两种可能性中都不受支持。

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

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

最新更新