【发布时间】:2017-02-17 20:39:17
【问题描述】:
我正在尝试将大量数据加载到 redshift 中,加载到单个表中,一旦加载,这对于 Vacuum 来说成本太高。为了避免清理这个表,我使用 COPY 命令从大量预先排序的 CSV 文件中加载数据。我正在加载的文件是根据表中定义的排序键预先排序的。
然而,在加载前两个文件后,我发现 redshift 将表格报告为 ~50% 未排序。我已验证文件中的数据是否按正确的排序顺序排列。为什么 redshift 不会将新传入的数据识别为已排序? 我是否需要做一些特别的事情来让复制命令知道这个新数据已经处于正确的排序顺序?
我正在使用 SVV_TABLE_INFO 表来确定排序百分比(使用未排序的字段)。排序键是三个不同字段(平面、x、y)的复合键。
Redshift 支持的官方回答:
这是我们官方所说的: http://docs.aws.amazon.com/redshift/latest/dg/vacuum-load-in-sort-key-order.html
当您的表定义了排序键时,该表分为 2 地区:
- 已排序,并且
- 未分类
只要您按排序键顺序加载数据,即使数据是 在未排序的区域,它仍然是排序键顺序,所以没有 需要 VACUUM 来确保数据已排序。仍然需要一个 VACUUM 将数据从未排序区域移动到已排序区域, 然而,这不太重要,因为未排序区域中的数据是 已经排序了。
【问题讨论】:
-
如果您不介意,一些问题可以帮助您解决这个问题……您是如何查询未排序数据的比例的?表的
SORTKEY是否设置为包含每条记录的时间戳的列?您是否检查过与每个区块的区域地图关联的最小值和最大值以确定重叠? -
@JohnRotenstein 我查询了 SVV_TABLE_INFO 表的未排序字段。排序键实际上是使用 3 个字段的复合键。我还不知道区域地图。会查的。
-
@JohnRotenstein 您能否指出有关如何查询区域地图的资源。它们看起来很有趣,但谷歌搜索并没有显示查询它们的明显方式。
标签: amazon-redshift