gpt4 book ai didi

SAS Viya 3.4 操作内存中的表

转载 作者:行者123 更新时间:2023-12-04 08:02:21 26 4
gpt4 key购买 nike

我将通过下面的示例给出我想要实现的内容。
在此之后,我会给你我的两个方法。
我正在开发 3.4 SAS Viya 平台。
例子:
我有一个表(MYTABLE),这个表是在全局 caslib(CKCAS)上提升的。
此表包含 10 行和 5 列。



第 1 列
第 2 列
第 3 列
第 4 列
日期


啊啊啊
4567
gtt
44
20210201


5535
法阿斯
44
20210202

fd
23
axv
44
20210203

sd
736
阿兹克
44
20210204


9008

44
20210205

lk
3339
wqop
44
20210206

yj
112
便便
44
20210207

trr
3634
piuy
44
20210208

hrfthr
689
iuyt
44
20210209

rt
2345
uio
44
20210210


客户要求我从表中删除几行。
他的目标是保留最新的(按“日期”列)5 天。
以下是“所需”表:


第 1 列
第 2 列
第 3 列
第 4 列
日期


lk
339
wqop
44
20210206

yj
112
便便
44
20210207

尝试
3634
piuy
44
20210208

hrfthr
689
iuyt
44
20210209

rt
2345
uio
44
20210210


重要的!该表需要从所有 session 中升级和访问!
现在,每天都有一项工作为客户收集数据并将其附加到 MYTABLE 上。
这个实现不会改变!
方法 1

cas christos;
libname KAPPA cas caslib="CKCAS";

proc sql;
delete from KAPPA.MYTABLE
where date<20210206;
quit;
cas christos terminate;
如果我执行下面的代码,我会实现目标表吗?
删除行后会提升表 MYTABLE 吗?
方法 1 结束
方法 2
我认为的第二种方法是将内存表保存到服务器的硬盘驱动器。
在那里进行删除,然后在内存中再次提升表。
带代码:
cas christos;
caslib _all_ assign;
casdatalimit=ALL;
libname pathtohd '/tmp/tempo_directory/';
libname KAPPA cas caslib="CKCAS";

data pathtohd.MYTABLE;
set KAPPA.MYTABLE;
run;

proc sql;
delete from pathtohd.MYTABLE
where date<20210206;
quit;

proc casutil;
load data=pathtohd.MYTABLE casout="MYTABLE" outcaslib="CKCAS" replace promote;
run;

cas christos terminate;
方法 2 结束
我客户的表包含数亿行,最重要的是这些表位于生产环境中。
我认为这个实现需要在内存中。
你有更好的主意吗?
我的任何方法都有效吗?
**此实现需要在 100 多个表上 + 这些表每天从 SAS 作业更新。
所以,我的第二种方法似乎不是最合适的。
提前感谢

最佳答案

最好为此使用 CAS 操作;但是,table.deleteRows直到 Viya 3.5 才添加操作。升级表最初的意思是基本上是不可变的:当一个表在 CAS 中为每个人启动并升级时,通常应该只附加好的数据。当然,不良数据有时会进入生产系统,需要对其进行修改。
由于您需要删除行,最安全的方法是在 CASUSER 中创建它的副本,删除旧表,然后提升更新的表。他们的 CAS 集群可能有足够的内存来执行此操作。
在执行此操作之前,请仔细检查它是否以特定方式分区或排序。您可以将分区和顺序语句添加到数据集选项中。如果您需要将表保存到持久存储,请使用 save proc casutil 中的声明也是。
使用此方法,所有更改仅在 CAS 中完成。

data causer.mytable;
set caslib.mytable;
where date < '06FEB2021'd;
run;

proc casutil;
droptable casdata="mytable" incaslib="caslib" outcaslib="caslib";
promote casdata="mytable" incaslib="casuser" outcaslib="caslib";
run;

关于SAS Viya 3.4 操作内存中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66393254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com