问题描述
当我使用 PROC SORT 将按键(包含重复键)排序的 SAS 数据集加载到 Redshift 中时,Redshift 中不会保留相同的排序顺序。例如。当我将 SAS 数据集与 Redshift 表进行比较时,它们的排序顺序不同,数据在重复键中非常混乱,很难找到数据如何存储在 Redshift 列中的模式或为什么会发生这种情况。
]1在数据从 SAS 加载到 Redshift 后保持相同排序的任何建议或指导都会非常有帮助。谢谢!
使用的代码:
PROC APPEND BASE = Target_Table (bulkload=yes bl_compress=yes bl_bucket='xxx' bl_default_dir = 'xxx' bl_use_escape =YES)
DATA = Source_Table force;
RUN;
解决方法
创建表时需要设置sortkey
,例如:
proc sql;
connect using myredlib as rs;
execute (create table iwant (
key INTEGER,data char(1),load_dttm TIMESTAMP
)
distkey(key)
compound sortkey(key,data) )by rs;
如果您有重复项或者您只需要保留源数据顺序,则在追加之前的数据步骤中创建一个新列(例如 id
),例如:
data iwant;
set ihave;
id=_n_;
run;
proc append .....
,
这取决于追加开始时目标表的状态。
默认情况下,IIRC 新表没有固有的排序顺序,并且仅当 SQL 查询具有 ORDER BY
子句时才能保证排序结果集。
表可以具有 SORT ORDER
和 INTERLEAVED SORT KEYS
等功能,但必须添加通过 Proc SQL pass through EXECUTE BY
或 Amazon Redshift 控制台执行的 RedShift 语句。
有关更多有用信息,请参阅 SO Why does Redshift not need materialized views or indexes?。