【问题标题】:Redshift tables are not preserving the SAS sort order after loading the data into Redshift将数据加载到 Redshift 后,Redshift 表不保留 SAS 排序顺序
【发布时间】:2021-05-15 17:53:31
【问题描述】:

当我使用 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;

【问题讨论】:

  • 您如何将数据加载到数据库中?
  • 通过 S3 使用批量加载到 Redshift
  • 所以不使用SAS代码?如果是,请发布代码,包括您在 libname 端指定的任何选项。
  • 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;运行;
  • Redshift 的文档在哪里说有某种方法可以让它以特定顺序返回具有相同 KEY 值的多个观察值?

标签: sorting sas amazon-redshift columnsorting


【解决方案1】:

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

【讨论】:

  • 感谢您的回复。我认为第二种解决方案是我想要的。
【解决方案2】:

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

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

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

有关更多有用信息,请参阅 SO Why does Redshift not need materialized views or indexes?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2015-08-22
    • 2015-07-24
    • 2018-11-18
    • 2017-07-20
    相关资源
    最近更新 更多