BigQueryを運用していると、どのユーザがどれだけコストを使用しているのか知りたいことがある。
そこで、その方法について以下のページに記載されているので実際に試してみる。
https://cloud.google.com/bigquery/audit-logs
Cloud Audit Loggingを有効にする
Cloud Audit LoggingはGCPによって提供される使用率のログを収集する。BigQueryのAuditログは"Administrative Activity"と”Data Access”のログから構成されている。
GCPコンソールでLogsViewerからExportを選択し、出力先のBigQuery Datasetを指定する。これにより、AuditLogがBigQueryに出力されるようになる。
AuditLogに対してクエリを実行し、ユーザ毎の使用コストを算出
クエリのコストは以下に記載されているように、5ドル/TBである。
https://cloud.google.com/bigquery/pricing?hl=ja
| カラム | 概要 | 
|---|---|
| protoPayload.serviceData.jobCompletedEvent.eventName | query_job_completedだとジョブが正常に終了したことを示す | 
| protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes | ジョブ使用した課金対象のデータ容量 | 
以下のクエリを実行するとユーザ毎のコストが出力される。
SELECT
  protoPayload.authenticationInfo.principalEmail User,
  ROUND((total_bytes*5)/1000000000000, 2) Total_Cost_For_User,
  Query_Count
FROM (
  SELECT
    protoPayload.authenticationInfo.principalEmail,
  SUM(protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes) AS total_bytes,
    COUNT(protoPayload.authenticationInfo.principalEmail) AS query_count,
  FROM
    TABLE_DATE_RANGE(データセット名.cloudaudit_googleapis_com_data_access_, DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'), CURRENT_TIMESTAMP())
  WHERE
    protoPayload.serviceData.jobCompletedEvent.eventName = 'query_job_completed'
  GROUP BY
    protoPayload.authenticationInfo.principalEmail)
ORDER BY
  2 DESC