gpt4 book ai didi

amazon-web-services - 我应该使用列作为 distkey 和 sortkey

转载 作者:行者123 更新时间:2023-12-02 00:36:50 25 4
gpt4 key购买 nike

我在 redshift 中有一个表,其中包含十亿条记录(日志文件条目)。它有一个时间戳列 ts,上面有 distkey 和 sortkey。以下查询:

 select ts from apilogs where date(ts) = '2016-09-08'  limit 10;

当我查询旧日期时,运行速度非常快;但不适用于最新日期!不知道为什么!感谢任何帮助

我如何放置日志:我已将所有旧日志文件一次性放入此表中;而我每小时放置的每个增量日志文件。

当我在AWS控制台查看详细计划时;我可以看到查询花费很长时间扫描所有十亿行;而花费几毫秒的查询只扫描几千行(即与该日期对应的行)..

所以,现在的问题是为什么它要扫描整个表以获取最新时间戳!

最佳答案

分布键和排序键可以位于同一列上。没问题!
您的日志表中最新加载的数据是根据排序键排序的吗?如果没有,您将必须在日志表上运行 Vacuum,以便您的排序键列按该顺序排序,并且 Redshift 不必扫描不必要的行。

运行以下查询来检查表中是否有任何未排序的区域。
选择trim(pgdb.datname)作为数据库,
修剪(a.name)作为表,((b.mbytes/part.total::decimal)*100)::decimal(5,2)作为pct_of_total,b.mbytes,b.unsorted_mbytes,(unsorted_mbytes/mbytes::十进制)*100 作为 unsorted_pct
来自 stv_tbl_perm a
将 pg_database 作为 pgdb 加入 pgdb.oid = a.db_id
join (select tbl, sum(decode(unsorted, 1, 1, 0)) as unsorted_mbytes, count(*) as mbytes
来自 stv_blocklist group by tbl) b on a.id=b.tbl
加入(选择总和(容量)作为总计
来自 stv_partitions 其中 part_begin=0 ) 作为 1=1 的一部分
其中 a.slice=0 和 a.name 在 ('apilogs')
按 3 desc、db_id、名称排序;


如果您有未排序的区域,请运行
将 apilog 真空至 100%

关于amazon-web-services - 我应该使用列作为 distkey 和 sortkey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39381688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com