我们经常把文本文件的数据导入到数据库中。将文本文件加载到内存通常是提高数据分析性能的难点。我们可以通过并行加载文件的方式提高数据加载的速度。
在下面的例子中,我们将经常使用USstocks.csv文本文件。它包含从1990年到2016年的上千个美国股票的每日交易记录。用户可以从多个渠道获得这些数据。最常用的美国股票历史数据资源来自芝加哥大学的证券价格研究中心(CRSP)。
我们将会使用USstocks.csv中的以下列:
列名 |
描述 |
PERMNO |
安全标识号 |
TICKER |
股票代码 |
date |
日期 |
PRC |
每股价格 |
SHROUT |
流通股 |
RET |
股票日收益 |
VOL |
每日库存 |
并行加载 USstocks.csv 文件:
USstocks = ploadText("C:/DolphinDB/Data/USstocks.csv");
非并行加载 USstocks.csv 文件:
USstocks = loadText("C:/DolphinDB/Data/USstocks.csv");
并行加载通常比非并行方式快。
>timer USstocks = ploadText("C:/DolphinDB/Data/USstocks.csv");
Time elapsed: 22415.377 ms
>timer USstocks = loadText("C:/DolphinDB/Data/USstocks.csv");
Time elapsed: 59841.574 ms
并行加载文本文件需要的内存至少是表大小的两倍,而非并行加载文件需要的内存要大于表的大小。如果需要导入的文本文件产生的数据表比可用内存大,我们可以把数据保存在分布式文件系统的分区表中。详情请参考Example 2.
当加载外部文件时,系统会对每列随机抽样,然后推断每列的数据类型。
我们推荐用户使用extractTextSchema函数检查文本文件中的数据类型。在下面例子中,RET字段的某些值是“C”,系统认为RET字段的数据类型是STRING.
schema = extractTextSchema("c:/DolphinDB/Data/USstocks.csv");
schema;
name type
------- ------
PERMNO INT
date DATE
SHRCD INT
TICKER SYMBOL
TRDSTAT CHAR
PERMCO INT
HSICCD INT
CUSIP SYMBOL
DLSTCD SYMBOL
DLPRC SYMBOL
DLRET SYMBOL
BIDLO DOUBLE
ASKHI DOUBLE
PRC DOUBLE
VOL INT
RET STRING
BID DOUBLE
ASK DOUBLE
SHROUT INT
CFACPR DOUBLE
CFACSHR DOUBLE
OPENPRC DOUBLE
以下脚本把RET字段的数据类型转换为DOUBLE,然后以正确的表结构把文本文件加载到DolpbinDB中。
update schema set type=`DOUBLE where name=`RET;
USstocks = ploadText("c:/DolphinDB/Data/USstocks.csv", , schema);
在数据浏览器中显示 USstocks 表的前20条记录: