SAS VIYA 3.4中表的保留

SAS VIYA 3.4中表的保留,sas,Sas,我最近面临一个请求,任何想法都将不胜感激 我在SAS Viya 3.4应用程序中有很多表,我想为所有表设置一个保留期。(例如12个月) 每个表都包含一个名为“PDATE”的列。 PDATE列包含字符格式的日期 例如:“20201231” (上述示例指2020年12月31日) 我有桌子: 内存中(CAS表) 在HDFS CASLIB中(CAS表) 在服务器(.sas7bdat)上的目录中 它们都包含相同格式的PDATE列 我想为所有这些设置一个保留期 我想 将每个表的最大PDATE值(时间上最

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

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

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

例如:“20201231”
(上述示例指2020年12月31日)

我有桌子:

  • 内存中(CAS表)
  • 在HDFS CASLIB中(CAS表)
  • 在服务器(.sas7bdat)上的目录中
它们都包含相同格式的
PDATE

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

我想

  • 将每个表的最大PDATE值(时间上最新的)转换为日期格式
  • 查找“最新值”-365
  • 将步骤2的结果转换为字符格式(如“20191231”)
  • 然后编写几行代码,创建一个新表,如:
  • data mycaslib.tablenew;
    设置mycaslib.tableold;
    其中PDATE<“foundvalue”;
    跑
    
  • 然后从内存中删除原始表并升级新表
  • 我知道这是一个解决方案,但我也知道这是无效的,因为我必须处理超过1亿行

    表的分区是一种解决方案吗? 如何实现这一点

    还有其他想法吗


    非常感谢!

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

    CAS中的索引只对
    语句起作用,而
    语句正是您所需要的。如果您想索引数据,请使用
    表。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;
    

    对于Data Controller()->我们在backlog中有一个类似的请求,我们可以轻松地将其作为一个受支持的功能提供,请随时在上面的站点上与我联系。
    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;