【问题标题】:How do I keep more than 5 day's worth of query logs?如何保留超过 5 天的查询日志?
【发布时间】:2013-11-07 19:20:17
【问题描述】:

在 Redshift 中,有一个 STL_QUERY 表存储过去 5 天内运行的查询。我正在尝试找到一种方法来保存超过 5 天的记录。以下是我考虑过的一些事情:

  1. 是否有针对此的 Redshift 设置?看来不是。
  2. 我可以使用触发器吗?触发器在 Redshift 中不可用,所以这是不行的。
  3. 我能否创建一个 Amazon Data Pipeline 作业来定期“抓取”STL_QUERY 表?我可以,所以这是一个选择。不幸的是,我必须为管道提供一些 EC2 实例来运行这项工作。让一个实例坐在那里每天刮一次这张桌子似乎是一种浪费。
  4. 我可以使用 Amazon Simple Work Flow 作业来刮桌子吗?我可以,但它遇到与 3 相同的问题。

我还缺少其他选项/想法吗?我更喜欢其他不涉及我专用 EC2 实例的选项,即使这意味着支付额外的服务(前提是它比我使用的 EC2 实例便宜)。

【问题讨论】:

    标签: amazon-web-services amazon-redshift


    【解决方案1】:

    保持简单,一切都在 Redshift 中完成。

    首先,使用“CREATE TABLE ... AS”将所有当前历史记录保存到永久表中。

    CREATE TABLE admin.query_history AS SELECT * FROM stl_query;
    

    其次,使用psql 运行它,在您控制的机器上安排一个作业每天运行它。

    INSERT INTO admin.query_history SELECT * FROM stl_query WHERE query > (SELECT MAX(query) FROM admin.query_history);
    

    完成。 :)

    注意事项:

    • 如果您尚未设置,则需要 8.x 版本的 psql
    • 即使您的作业有几天没有运行,stl_query 也会保留足够的历史记录,以便覆盖您。
    • 根据您的评论,使用 starttime 而不是 query 作为条件可能更安全。

    【讨论】:

    • 感谢您的回答!两件事,一:query 字段是否保证增加?我应该改用starttime 吗?二:我不喜欢让它在我的笔记本电脑上运行的想法。在哪里运行这个东西是问题的焦点。我再放一天,但如果没有其他人回答并且你删除了“笔记本电脑”位,我会接受你的回答。
    • 好的,我删除了对笔记本电脑的引用。我怀疑您控制中至少有一台 24/7 全天候运行的机器。一个 cron 工作就可以解决问题。您可以查看 AWS Data Pipeline 之类的东西来按计划运行脚本,但对于这个用例来说,这似乎有点矫枉过正。
    猜你喜欢
    • 2020-11-11
    • 2020-11-25
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多