SAS HASH :内存失败时,Hash对象添加了***个项

Posted Anni爱摩天轮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS HASH :内存失败时,Hash对象添加了***个项相关的知识,希望对你有一定的参考价值。

处理千万观测数据的小伙伴,辛苦等了一两个小时,结果发现以下报错,心如死灰:

 

ERROR: 内存失败时,Hash 对象添加了 4587504 个项。

FATAL: 内存不足,无法执行 DATA 步程序。 在“EXECUTION”阶段中止。
ERROR: 由于内存不足,SAS 系统停止了对该步的处理。
NOTE: 从数据集 WORK.T_QUERY. 读取了 82425420 个观测
WARNING: 数据集 D.T_QUERY 可能不完整。该步停止时,共有 4587503 个观测和 97 个变量。
NOTE: 压缩的数据集 D.T_QUERY 大小减少了 57.82%。
压缩为 23037 页;不压缩将会要求 54614 页。
WARNING: 数据集 D.T_QUERY 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 1:53:01.74
CPU 时间 1:51:28.01

难道HASH不是像传说中那么好用,也受到内存的限制?即使我的电脑内存是128G,仍然无法避免上述错误,那么告诉你一个简单容易忽略的解决办法:

在DATA步最后添加:H.CLEAR();

H是前面定义的hash名称;

就这么简单,问题解决了!!!!!因为H.CLEAR();释放了前面存储的每个KEY及对应的DATA内存,除非单个key和data的内存达到上限,否则再也不会报上述的错啦

以上是关于SAS HASH :内存失败时,Hash对象添加了***个项的主要内容,如果未能解决你的问题,请参考以下文章

Redis 利用 Hash 存储节约内存

Redis笔记-Hash数据类型

redis之hashes类型及操作

Redis hash数据类型操作命令

Laravel 中的密码验证总是返回失败(Hash::check)

系统学习redis之四——redis数据类型之hash类型及操作