DolphinDB数据导入教程

本页概览 DolphinDB 支持的多种数据导入途径,并指向对应的导入方向与方法条目。

Source: https://dolphindb.cn/blogs/72

What this page covers

技能认证特训营第二期报名活动

页面顶部的活动报名与优惠引导链接。

DolphinDB数据导入教程(作者与发布日期)

文章标题、作者名与发布日期信息。

数据导入方式概览

列出DolphinDB支持的四种数据导入途径。

DolphinDB数据库基本概念和特点

介绍DolphinDB中表的存储形态、分区与数据库分区机制的差异。

通过文本文件导入(loadText/ploadText/loadTextEx)

介绍文本/CSV导入相关函数及其使用场景,并展示示例脚本与性能对比。

通过二进制文件导入(readRecord!/loadRecord)

说明二进制导入函数的差异、schema要求与日期时间字段转换示例。

通过HDF5接口导入(HDF5插件)

介绍HDF5插件方法、插件获取与加载方式,以及导入内存表/分区表的示例脚本。

通过ODBC接口导入(ODBC插件与SQL Server示例)

说明ODBC插件能力、使用前置要求,并用SQL Server连接与导入分区表示例展示步骤。

导入数据实例(股票日K线,分区规划与并行导入)

以约100G的股票日K线CSV目录数据为例,给出复合分区规划与按年度并行导入的实现细节与注意事项。

附录(数据文件与脚本下载项)

列出CSV、二进制、HDF5导入数据文件与案例完整脚本等条目。

Facts index

Entity Attribute Value Confidence
DolphinDB数据导入教程publication_date2021-08-05high
DolphinDB数据导入教程authorJunxihigh
DolphinDBprovides多种灵活的数据导入方法,帮助用户把海量数据从多个数据源导入low
DolphinDBdata_import_methods通过文本文件导入high
DolphinDBdata_import_methods通过二进制文件导入high
DolphinDBdata_import_methods通过HDF5接口导入high
DolphinDBdata_import_methods通过ODBC接口导入high
DolphinDBdata_storage_form数据以结构化数据表的方式保存high
DolphinDB 表类型(按存储介质)includes内存表;本地磁盘表;分布式表high
内存表storage_medium数据保存在内存中high
内存表access_speed存取速度最快medium
内存表data_persistence节点关闭会丢失数据high
本地磁盘表storage_medium数据保存在本地磁盘上high
本地磁盘表data_persistence节点关闭也不会丢失数据high
本地磁盘表loadability可以方便地把数据从磁盘加载到内存high
分布式表storage_layout数据分布在不同的节点的磁盘上high
分布式表query_model通过分布式计算引擎,逻辑上仍可像本地表一样做统一查询high
DolphinDB 表类型(按是否分区)includes普通表(未分区表);分区表high
DolphinDBpartition_definition_scope分区是针对数据库定义的;同一个数据库下的数据表只能使用同一种分区机制high
DolphinDBpartitioning_constraint如果两张表要使用不同的分区机制,它们不能放在一个数据库下high
loadTextfunction_purpose将文本文件以 DolphinDB 数据表的形式读取到内存中high
ploadTextfunction_purpose将数据文件作为分区表并行加载到内存中;与loadText相比速度更快high
loadTextExfunction_purpose把数据文件转换为DolphinDB数据库中的分布式表,然后将表的元数据加载到内存中high
loadTextparametersfilename(文件名)、delimiter(字段分隔符,默认",")、schema(导入后字段数据类型;为一个数据表)high
loadTexttype_inference导入时随机提取一部分行以确定各列数据类型;多数文本文件无需手动指定类型high
loadText schema 参数when_needed系统自动识别的数据类型不符合预期/需求时可手动指定(示例:volume 被识别为 INT 但需要 LONG)high
extractTextSchemafunction_purpose从文本文件中提取表结构生成数据类型表;只需修改少数指定字段的数据类型即可得到理想schemahigh
ploadTextperformance_characteristic设计中利用多核CPU并行载入文件;并行程度取决于CPU核数量和节点localExecutors配置high
性能示例(4核8超线程节点)loadText_time_ms39728.393 mshigh
性能示例(4核8超线程节点)ploadText_time_ms10685.838 mshigh
性能示例(4核8超线程节点)relative_performance在此配置下,ploadText 性能约为 loadText 的 4 倍high
loadTextmemory_behavior总是把所有数据导入内存;当文件体积非常庞大时内存易成为制约因素high
loadTextExmemory_behavior将大的文本文件分割成小块,逐步加载到分布式数据表中high
loadTextEx 示例database_pathdfs://dataImportCSVDBhigh
loadTextEx 示例partition_type_and_rangeVALUE 分区;2018.01.01..2018.01.31high
loadTextEx 示例table_name_and_partition_column表名 "cycle";分区列 "tradingDay"high
loadTablefunction_purpose_in_context需要使用数据时先载入分区元数据到内存(示例:loadTable("cycle"))high
DolphinDB 查询执行data_loading_behavior实际执行查询时按需加载所需数据到内存medium
readRecord!function_purpose导入不含有字符串类型字段的二进制文件high
readRecord!string_support不支持导入字符串类型数据high
loadRecordstring_support支持导入字符串类型数据(包括 STRING 和 SYMBOL)high
loadRecordstring_length_requirement要求字符串在磁盘上的长度必须固定;长度不足用ASCII值0填充,加载时去掉末尾0high
readRecord! 示例sample_filebinSample.binhigh
readRecord! 使用方式schema_definition需先创建内存表并为每列指定字段名称和数据类型,然后通过file打开文件并调用readRecord!将数据加载到该表high
temporalParsefunction_purpose_in_context将数值形式存储的date/time列转换为日期和时间类型格式显示high
replaceColumn!function_purpose_in_context用于用转换后的日期/时间列替换表中原有列high
loadRecord 示例sample_filebinStringSample.binhigh
loadRecord schemadefinition_form通过元组(tuple)指定schema,而不是直接定义内存表high
loadRecord schemarules每个字段以tuple指定名称与类型;若为字符串需指定磁盘字符串长度(含结尾0);所有tuple按字段顺序组成元组high
writeRecordfunction_purpose将DolphinDB对象保存为二进制文件high
DolphinDBhdf5_support支持导入HDF5格式数据文件high
DolphinDBhdf5_access_method通过HDF5插件访问HDF5文件high
HDF5插件methodshdf5::ls; hdf5::lsTable; hdf5::hdf5DS; hdf5::loadHDF5; hdf5::loadHDF5Ex; hdf5::extractHDF5Schemahigh
HDF5插件bundled_after_versionDolphinDB 1.00.0版本之后,安装目录 /server/plugins/hdf5 已经包含HDF5插件high
HDF5插件load_commandloadPlugin("plugins/hdf5/PluginHdf5.txt")high
HDF5插件(老版本DolphinDB)installation_note老版本默认不包含插件;可从对应版本分支bin目录下载并部署到节点plugins目录high
HDF5插件调用方式namespace_requirement调用插件方法需要加namespace(如hdf5::loadHDF5);也可 use hdf5 后直接调用medium
HDF5导入示例file_and_dataset文件 candle_201801.h5;Dataset candle_201801;datasetName可通过ls或lsTable获得high
extractHDF5Schemafunction_purpose_in_context可提取schema并修改字段类型后再导入(示例:将volume改为LONG)high
loadHDF5Exuse_case当HDF5文件超过服务器内存时可用于载入数据high
HDF5 loadHDF5Ex 示例dfs_path_and_partition_rangedfs://dataImportHDF5DB;VALUE分区;2018.01.01..2018.01.31high
HDF5 loadHDF5Ex 示例table_and_partition_column表 "cycle";分区列 "tradingDay"high
DolphinDBodbc_support支持ODBC接口连接第三方数据库,将数据表读取为DolphinDB内存数据表high
DolphinDBodbc_plugin官方提供ODBC插件用于连接第三方数据源并迁移数据至DolphinDBhigh
ODBC插件methodsodbc::connect; odbc::close; odbc::query; odbc::execute; odbc::appendhigh
ODBC插件prerequisite使用前需要安装ODBC驱动程序(参考ODBC插件使用教程)high
ODBC示例数据源db_typeSQL Serverhigh
ODBC示例 SQL Serverserver172.18.0.15high
ODBC示例 SQL Serverport1433high
ODBC示例 SQL Serverusernamesahigh
ODBC示例 SQL Serverpassword123456high
ODBC示例 SQL Serverdatabase_nameSZ_TAQhigh
ODBC插件部署step拷贝 plugins\odbc 目录文件到 server 的 plugins/odbc 目录(若安装目录/server/plugins/odbc已包含可略过)high
ODBC插件初始化示例load_commandloadPlugin("plugins/odbc/odbc.cfg")high
ODBC连接字符串示例connection_stringDriver=ODBC Driver 17 for SQL Server;Server=172.18.0.15;Database=SZ_TAQ;Uid=sa;Pwd=123456;high
ODBC导入示例dfs_database_and_rangedfs://dataImportODBC;VALUE分区;2018.01.01..2018.01.31high
ODBC导入示例table_created创建分区表 cycle,分区列 tradingDay,模板来自SQL Server中 candle_201801 的 select top 1 *high
ODBC导入示例import_and_append从SQL Server查询 candle_201801 全表数据并 append! 到 DolphinDB 分区表 cyclehigh
ODBC导入benefit通过ODBC导入数据方便快捷low
ODBC导入 + DolphinDB定时作业机制use_case可作为时序数据定时同步的数据通道medium
导入数据实例data_description股票市场日K线图数据:每个股票一个CSV文件,共约100G,时间范围2008年-2017年,按年度分目录保存high
分区规划purpose导入前需确定分区字段与分区粒度high
分区字段选择建议recommendation以where/group by/context by中常用字段作为分区字段可极大提升数据检索与分析效率medium
股票数据分区字段建议recommended_partition_columnstradingDay 和 symbol 组合(COMPO)分区high
分区大小建议recommended_partition_size_raw_uncompressed100M~1Ghigh
分区规划示例(COMPO)partition_design按交易日期范围分区(每年一个范围)+ 按股票代码范围分区(100个代码范围)high
分区规划示例(COMPO)partition_count10 * 100 = 1000 个分区high
分区规划示例(COMPO)approx_partition_size每个分区大小约100M左右(未说明是否压缩,文本表述为最终每个分区大小约100M左右)medium
分区预制作时间范围suggested_time_range2008-2030年(用于后续进入的数据预先制作分区)high
股票代码分区向量构建design_note增加虚拟代码 999999 作为股票代码上限值,以覆盖未来新增代码可能超过现有最大值的情况high
股票数据分区表创建示例table_name_and_partition_columns分区表 stockData;分区列 tradingDay 与 symbolhigh
导入过程中的time字段处理data_type_issue_and_fix原始time字段以整数(如“9390100000”)表示毫秒级时间;需用 datetimeParse(format(time,"000000000"),"HHmmssSSS") 转换为时间类型high
100GB数据单线程导入time_cost单线程导入100GB数据会耗时很久low
并行导入策略(示例)approach按年度拆分导入任务,发送到各节点任务队列并行执行以提高效率high
并行导入实现(示例)uses_functionsrpc 与 submitJobhigh
后台任务观察(示例)commandpnodeRun(getRecentJobs)high
DolphinDB 分区写入并行注意事项write_locking_behavior分区是database存储数据的最小单位;对分区的写入操作是独占式;并行任务应避免同时向同一分区写入high
案例并行写入正确性(示例说明)no_partition_write_conflict本例每年数据写入由单独任务执行,数据范围不重合,因此不会发生多任务同时写入同一分区high
附录条目includesCSV导入数据文件;二进制导入例1数据文件;二进制导入例2数据文件;HDF5导入数据文件;案例完整脚本high