我在云控制台中使用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。 有没有一种方法可以在特定日期范围内执行上述查询?
答案 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
中有表wildcard2
,wildcard3
和project:dataset
。运行以下查询(使用现有查询中的通配符函数),将返回ID包含单词通配符的所有表的内容:
#legacySQL
SELECT * FROM (TABLE_QUERY([project:dataset], 'table_id CONTAINS "wildcard"'))
在标准SQL 中,您应该使用Wildcard Tables。该功能等效于旧版SQL中的通配符功能之一,其背后的想法是相同的(您将只为查询的数据[与通配符匹配的表]付费),并且就限制而言,以下两种方式均不支持缓存的结果可能性。
与以前相同的示例查询,但是现在在标准SQL中使用通配符表将是:
#standardSQL
SELECT * FROM `project.dataset.wildcard*`