【问题标题】:Vertica comparison operator with timestamp带时间戳的 Vertica 比较运算符
【发布时间】:2014-08-04 18:21:23
【问题描述】:

我在 Vertica 表中有十亿条记录,timestamp 数据类型为 timestamptz。我想在一个语句中删除超过 90 天的记录。我该怎么做?

【问题讨论】:

    标签: database vertica


    【解决方案1】:

    最佳做法是将日期明确定义为查询的一部分:

    DELETE FROM [schema].table WHERE times_stamp <= '2014-05-06';
    

    但是,您可以使用以下方法动态完成此操作:

    DELETE FROM [schema].table WHERE DATEDIFF(day, times_stamp, SYSDATE()) >= 90;
    

    这将删除日差大于或等于 90 的行。

    我建议在删除这些行之前使用该谓词执行SELECT,以验证被删除的行以及使用事务。

    考虑将来使用分区,因为删除行的成本很高(需要重新组织容器)。例如,如果您按月分区,您将能够立即删除这些容器。

    【讨论】:

    • 我们按周对这些数据进行了分区。我们将在其中保存 90 天的数据。这是好方法吗?
    • 估计大约 13 周的数据,您是否会抽取和转储数据?目前尚不清楚您是否有一个移动窗口,或者在 90 天结束后您只是转储整个表格。
    • 是的,我们会每小时添加新数据并删除超过 90 天的数据
    • 这是一个资源密集型过程。我每周只会在一个分区上删除一次数据。
    • 在周末删除数据:如果您删除分区,这几乎是一个即时且免费的过程,不需要太多资源。到目前为止,每周删除一次分区是最好的选择。
    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多