【问题标题】:Export Bigquery Logs导出 Bigquery 日志
【发布时间】:2016-07-26 14:09:35
【问题描述】:

我想分析过去一个月在 BigQuery 上的活动。

我去了云控制台和(非常不方便的)日志查看器。我将导出设置为 Big-query,现在我可以对日志运行查询并分析活动。这里甚至还有非常方便的指南:https://cloud.google.com/bigquery/audit-logs

但是,所有这些都有助于查看从现在开始收集的数据。我需要分析过去一个月。

有没有办法将现有日志(而不是新日志)导出到 Bigquery(或导出到平面文件,然后将它们加载到 BQ)?

谢谢

【问题讨论】:

    标签: google-bigquery stackdriver


    【解决方案1】:

    虽然您无法“回溯”BigQuery 过去的日志,但您仍然可以执行一些操作,具体取决于您要查找的信息类型。如果您需要有关查询作业的信息(作业统计信息、配置等),您可以调用 BigQuery API 的 Jobs: list 方法来列出项目中的所有作业。数据会在那里保留 6 个月,如果您是项目所有者,则可以列出所有用户的工作,而不管实际运行它的人是谁。

    如果您不想编写任何代码,甚至可以使用API Explorer 调用该方法并将输出保存为json 文件,然后将其加载回BigQuery 的表中。

    Sample code 列出使用 BigQuery API 的作业。它需要一些修改,但应该很容易完成。

    【讨论】:

    • 使用“Jobs:List”,您将如何提取用户电子邮件或对生成该工作的用户的任何其他引用??
    • @N.N.实际上,它是输出的一部分。
    • 您可以将其配置为输出的一部分,但它不会返回(至少对我来说不是)......而且,使用 API 资源管理器,我只能得到分布在许多页面上的结果.知道如何在一次调用中检索所有数据(无需手动分页数百页)?
    • 您需要将“投影”设置为“完整”,如我的屏幕截图所示。查找名为“电子邮件”之类的字段(我现在不在笔记本电脑旁)。您还可以指定每个“页面”要获得多少个结果。不过,每页最多有 1000 个作业。
    • 谢谢。投影“完整”整理出了丢失的电子邮件……复杂的部分是如何在不编写对所有作业进行分页的脚本的情况下将其全部提取出来。有什么想法吗?
    【解决方案2】:

    您可以使用Jobs: list API收集职位信息并上传到GBQ
    由于它位于 GBQ 中 - 您可以使用 BigQuery 的强大功能以任何方式对其进行分析
    您可以展平结果或使用原始结果 - 我建议使用原始结果,因为在加载到 GBQ 之前没有任何转换(您只需上传从 API 获得的任何内容),因此不那么令人头疼。当然,所有这些都在您仍然需要编写的简单应用程序/脚本中

    注意:确保使用full 值作为projection 参数

    【讨论】:

    • 谢谢,我希望避免编写脚本。我发现谷歌云人员避免向他们的日志提供“下载”功能真的很奇怪。
    • 我为什么喜欢脚本(至少是合理的数量)是因为它使您能够控制您想要什么、何时以及如何等。我们已经使用上述方法近两年了,并且很高兴:o)
    • 作为一名数据人员,我更喜欢查询而不是编写脚本...我认为让数据专家编写脚本来对低谷结果进行分页,这是在浪费他们的时间和技能。
    • 我认为你错过了我的观点。您使用脚本将工作信息带入 bigquery,然后使用 bigquery 实际查询这些数据并获得您正在寻找的任何见解
    • 同时 - 我明白您的偏好是在这种情况下根本不处理脚本。我明白。与 bq 中提供的谷歌分析类似,我也希望我们的工作日志以类似的方式公开。所以同意!
    【解决方案3】:

    当我发现一篇文章描述了如何使用 INFORMATION_SCHEMA 没有任何脚本或 Jobs: list 来检查 Big Query 时,我遇到了同样的问题,正如其他 OP 所提到的那样。 我能够运行并使其正常工作。

    
    # Monitor Query costs in BigQuery; standard-sql; 2020-06-21
    # @see http://www.pascallandau.com/bigquery-snippets/monitor-query-costs/
    
    DECLARE timezone STRING DEFAULT "Europe/Berlin";
    DECLARE gb_divisor INT64 DEFAULT 1024*1024*1024;
    DECLARE tb_divisor INT64 DEFAULT gb_divisor*1024;
    DECLARE cost_per_tb_in_dollar INT64 DEFAULT 5;
    DECLARE cost_factor FLOAT64 DEFAULT cost_per_tb_in_dollar / tb_divisor;
    
    SELECT
     DATE(creation_time, timezone) creation_date,
     FORMAT_TIMESTAMP("%F %H:%I:%S", creation_time, timezone) as query_time,
     job_id,
     ROUND(total_bytes_processed / gb_divisor,2) as bytes_processed_in_gb,
     IF(cache_hit != true, ROUND(total_bytes_processed * cost_factor,4), 0) as cost_in_dollar,
     project_id,
     user_email,
    FROM 
      `region-us`.INFORMATION_SCHEMA.JOBS_BY_USER
    WHERE
      DATE(creation_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) and CURRENT_DATE()
    ORDER BY
      bytes_processed_in_gb DESC
    

    致谢:https://www.pascallandau.com/bigquery-snippets/monitor-query-costs/

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 2021-10-21
      • 1970-01-01
      • 2018-07-20
      • 2019-12-08
      • 2019-11-26
      • 2018-07-02
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多