将数据加载到 Redshift 后,Redshift 表不保留 SAS 排序顺序

Redshift tables are not preserving the SAS sort order after loading the data into Redshift

当我使用 PROC SORT 将按键(包含重复键)排序的 SAS 数据集加载到 Redshift 中时,Redshift 中未保留相同的排序顺序。例如。当我将 SAS 数据集与 Redshift table 进行比较时,它们的排序顺序不同,数据确实在重复键中混乱,很难找到数据在 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;

这取决于追加开始时目标table的状态。

IIRC 默认情况下新的 tables 没有固有的排序顺序,只有当 SQL 查询有 ORDER BY 子句时才能保证排序的结果集。

表可以具有 SORT ORDERINTERLEAVED SORT KEYS 等功能,但必须添加通过 Proc SQL 通过 EXECUTE BY 或 Amazon Redshift 执行的 RedShift 语句控制台。

有关更多有用信息,请参阅 SO

创建table时需要设置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 .....