【问题标题】:RETENTION TO A TABLE IN SAS VIYA 3.4SAS VIYA 3.4 中的表格保留
【发布时间】:2021-04-07 14:57:19
【问题描述】:

我最近面临一个请求,任何想法都将不胜感激。

我在 SAS Viya 3.4 应用程序中有很多表,我想为所有表设置保留期。 (例如 12 个月)

每个表都包含一个名为“PDATE”的列。 PDATE 列包含字符格式的日期。

一个例子:“20201231”
(上例指的是 2020 年 12 月 31 日)

我有桌子:

  • 在内存中(CAS 表)
  • 在 HDFS CASLIB(CAS 表)中
  • 在服务器上的目录中 (.sas7bdat)

所有这些都包含相同格式的PDATE 列。

我想为所有这些设置一个保留期。

我想

  1. 将每个表格的最大 PDATE 值(即最新的时间)转换为日期格式。
  2. 查找“最新值” - 365
  3. 将步骤 2 的结果转换为字符格式(如“20191231)”
  4. 在创建新表之后编写几行代码,例如:
data mycaslib.tablenew;
  set mycaslib.tableold;
  where PDATE < "foundvalue";
run;
  1. 然后从内存中删除原始表并提升新表。

我知道这是一个解决方案,但我也知道这不是有效的,因为我必须处理超过 1 亿行。

表的分区是一个解决方案吗? 怎么可能实现?

还有其他想法吗?

非常感谢!

【问题讨论】:

  • 我们在积压的数据控制器 (datacontroller.io) 中有类似的请求 -> 我们可以轻松地将其作为受支持的功能提供,请随时在上面的网站上与我联系。

标签: sas


【解决方案1】:

pdate 上添加索引可能比分区更好。分区更多是为了提高按组处理的性能。我建议将pdate 转换为 all 表的 SAS 日期,并在其上添加索引。

CAS 中的索引仅适用于 where 语句,这正是您所需要的。如果您想索引您的数据,请使用 table.Index CAS 操作 请注意,尚不支持 index 选项,需要使用 CAS 操作或 proc casutil 来完成。

cas;
libname casuser cas caslib='casuser';

data casuser.cars;
    set sashelp.cars;
run;

proc cas;
    table.index result=r /
        table={caslib  = 'casuser'
               name    = 'cars'
        }
        casout={caslib    = 'casuser'
                name      = 'cars_indexed'
                indexvars = {'make'}
                replace   = true
        }
    ;
    
    table.tableDetails /
        caslib = 'casuser'
        name   = 'cars_indexed'
    ;
quit;

您可以设置所有这些表,以便在它们加载的索引上使用 SAS 转换后的值 pdate

当您使用 Viya 3.5 或更高版本时,您将能够直接使用 table.deleteRows 操作修改表。这将允许您就地修改所有内容。

proc cas;
    table.deleteRows result=r / 
        table={caslib = 'casuser'
               name   = 'cars'
               where='make = "BMW"'
        }
    ;
    
    simple.numRows result=n
        table={caslib = 'casuser'
               name   = 'cars'
               where='make = "BMW"'
        }
    ;
    
    put n;
quit;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多