以 Sortkey 顺序和 VACUUM 加载数据
Posted
技术标签:
【中文标题】以 Sortkey 顺序和 VACUUM 加载数据【英文标题】:Loading Data in Sortkey Order and VACUUM 【发布时间】:2015-05-04 18:48:18 【问题描述】:我正在将一张表的夜间快照加载到 Redshift。 我在表的末尾添加了一个名为“rundate”的列,它仅表示数据是何时通过我的 ETL 流程提取的。它也是主排序键。
每晚的表格越来越长,其中许多有 400 多列。
现在我将 FILLRECORD 与 EMPTYASNULL 结合使用,以便将 NULLS 放入表中,一旦 COPY 命令完成,我就使用
update table set rundate = 'date' where rundate is NULL
为了获得正确的快照日期。
我想知道它是否仍被视为“按排序键顺序加载数据”,我不需要抽真空。除此之外,不会对任何记录进行更新/删除。
【问题讨论】:
【参考方案1】:很遗憾,没有。更新将执行删除/插入,每天将您的整个负载作为需要 VACUUM 的死记录。我建议改为加载到一个空的暂存表中,然后在暂存后插入带有额外运行日期列的数据。
【讨论】:
感谢您的回答。我确实尝试解释一个查询以确定是否需要 vaccum,但我无法弄清楚 - 解释 select max(rundate) from table;或解释 select * from table where rundate = (select max(rundate) from table) 在测试表上的真空前后都进行了全面扫描。这不是访问最新数据的最佳方式吗? 另外,“select * into table from stage_table;”有什么区别吗?和“插入表(从stage_table中选择*);”? select ... from table 将执行完全扫描,因为没有索引。然而,删除将留下必须扫描的死行/块,从而导致更长的查询时间以上是关于以 Sortkey 顺序和 VACUUM 加载数据的主要内容,如果未能解决你的问题,请参考以下文章
来自 SQLiteOpenHelper 的 VACUUM sqlite 数据库