Kdb 将字符列表列强制转换为符号

Kdb 将字符列表列强制转换为符号,kdb,Kdb,我有一个hdb中有大约30亿行的表。其中一列是char list,我想在加载hdb后将该列转换为symbol。但内存很快就超过了300GB,我负担不起。这可以通过任何方式进行优化吗?您是尝试强制转换为内存中的符号(临时)还是磁盘上的符号(永久)?如果在内存中,您不应该尝试对所有日期强制转换为符号,您可以在选择时强制转换为符号(使用日期过滤器),或者构建一个包装函数来处理此问题。您需要分析字符串的重复性,因为您对符号强制转换的每个字符串都会被插入并消耗内存。如果字符串非常独特(.e.long),则

我有一个hdb中有大约30亿行的表。其中一列是char list,我想在加载hdb后将该列转换为symbol。但内存很快就超过了300GB,我负担不起。这可以通过任何方式进行优化吗?

您是尝试强制转换为内存中的符号(临时)还是磁盘上的符号(永久)?如果在内存中,您不应该尝试对所有日期强制转换为符号,您可以在选择时强制转换为符号(使用日期过滤器),或者构建一个包装函数来处理此问题。您需要分析字符串的重复性,因为您对符号强制转换的每个字符串都会被插入并消耗内存。如果字符串非常独特(.e.long),则可能会创建过多的插入符号,从而导致内存膨胀

如果在磁盘上,您应该使用Kx的dbmaint实用程序——它有一个从字符列表(字符串)转换为枚举符号的具体示例

不过,您必须非常小心-您需要再次分析字符串列,以确保其重复性足以保证转换为symbol(向sym文件中添加尽可能少的新符号)。如果字符串非常独特,则应而不是强制转换为symbol,因为可能会有大量新符号污染sym文件


最终,最有效的方法是在假设字符串重复(例如短)的情况下进行永久性磁盘更改。

您当前如何将其转换为符号?使用dbmaint?@terrylynch,我将更新问题。我正在加载hdb,然后尝试执行cast。我正在内存中加载表,并过滤某个特定日期的数据。问题是,即使是一天,它也有超过30亿行。上述列中的字符串变化非常快,因此,如果我在保存时尝试使其成为符号,它将炸毁sym文件,这将导致加载hdb的延迟,这将解决此问题,但会产生其他问题。我明白了。那么,为什么希望内存中的列是类型符号呢?加快过滤速度?此列是日期筛选器之后的第一个
过滤器吗?(我假设表是日期分区的)