【问题标题】:logging all BigQuery queries记录所有 BigQuery 查询
【发布时间】:2015-07-01 00:05:26
【问题描述】:

是否可以将所有 BigQuery 请求记录到 Cloud Storage 中的文件中(或者更好地记录到 BigQuery 表中)?似乎 bq 中可用的 --apilog 选项主要用于调试目的,但我想做的是跟踪所有查询,就像在 CloudStorage 中的特定文件上记录所有访问请求一样。

更具体地说,我不只是想记录我自己的查询,而是 (a) 同一项目中所有用户的查询,最好还 (b) 任何人 的查询我拥有的数据集中的表。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    我知道它来晚了,但 GCP 在其最新版本中引入了审计日志的这一新功能。

    参考这个 - Audit Logs BQ

    【讨论】:

      【解决方案2】:

      在 CLI 中,您可以运行 bq ls -j -a 来检索项目中所有用户的作业。您可以将所有输出重定向到存储文件。

      然后您可以为每个作业 id 运行 bq show -j <job_id>,为了获得更多详细信息,您将选择使用 json 响应:

      bq show --format=prettyjson -j job_joQEqPwOiOoBlOhDBEgKxQAlKJQ
      

      这将返回以下格式,其中包含您的查询、您的用户和字节处理等...

      {
        "configuration": {
          "dryRun": false, 
          "query": {
            "createDisposition": "CREATE_IF_NEEDED", 
            "destinationTable": {
              "datasetId": "", 
              "projectId": "", 
              "tableId": ""
            }, 
            "query": "", 
            "writeDisposition": "WRITE_TRUNCATE"
          }
        }, 
        "etag": "", 
        "id": "", 
        "jobReference": {
          "jobId": "", 
          "projectId": ""
        }, 
        "kind": "bigquery#job", 
        "selfLink": "", 
        "statistics": {
          "creationTime": "1435006022346", 
          "endTime": "1435006144730", 
          "query": {
            "cacheHit": false, 
            "totalBytesProcessed": "105922683030"
          }, 
          "startTime": "1435006023171", 
          "totalBytesProcessed": "105922683030"
        }, 
        "status": {
          "state": "DONE"
        }, 
        "user_email": ""
      }
      

      使用 API 您需要传递 allUsers 属性来列出来自所有用户 https://cloud.google.com/bigquery/docs/reference/v2/jobs/list#allUsers 的作业

      【讨论】:

      • 如果有一些示例代码用于定期运行该查询并将新结果附加到 BQ 表中,那将是非常棒的。写起来并不难,但我敢肯定有人已经做到了。
      • 您可能需要添加行数 bq ls -j -a -n 1000 以显示超过最后 50 个查询。
      【解决方案3】:

      BigQuery 具有 INFORMATION_SCHEMA.JOBS_BY_* 视图来检索有关 BigQuery 作业的实时元数据。此视图包含当前正在运行的作业,以及过去 180 天已完成作业的历史记录。

      更多信息见Getting jobs metadata using INFORMATION_SCHEMA

      【讨论】:

        【解决方案4】:

        现在使用 INFORMATION_SCHEMA 表有更好的方法。

        以下是获取项目过去 90 天内所有查询的简单方法:

         SELECT
           job_id,
           start_time,
           user_email,
           total_bytes_processed,
           query
        FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
        WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY) 
         AND CURRENT_TIMESTAMP()
         AND job_type = "QUERY"
         AND end_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY) AND CURRENT_TIMESTAMP()
        ORDER BY total_bytes_processed DESC
        

        完整的文档可以在这里找到:https://cloud.google.com/bigquery/docs/information-schema-jobs

        【讨论】:

          猜你喜欢
          • 2018-04-27
          • 2013-02-18
          • 2015-02-02
          • 2021-06-05
          • 1970-01-01
          • 2020-03-11
          • 1970-01-01
          • 1970-01-01
          • 2010-09-23
          相关资源
          最近更新 更多