从 Redshift 迁移数据到 DolphinDB

news2024/11/25 8:16:58

AWS Redshift 是最早的云数据仓库之一,为用户提供完全托管的 PB 级云中数据仓库服务。用户可以使用标准 SQL 和现有的商业智能工具,经济高效地进行数据分析。但 AWS Redshift 上手难度较大,对知识储备要求较高,设计和优化相当复杂。作为云数据仓库,AWS Redshift 没有本地仓库操作快速便捷。

DolphinDB 是一款国产的高性能分布式时序数据库产品,其综合解决方案具有卓越的性能优势和低维护成本优势。客户无需集成不同供应商的多个系统,极大地降低了大数据管理和分析系统的综合成本。

与 AWS Redshift 相比,DolphinDB 具有以下优势:

操作简单,可扩展性强。具有良好的容错能力及优异的多用户并发访问能力。

部署灵活。可在 Linux 或 Windows 环境、本地或云端、终端设备或服务器上部署。

易于上手。DolphinDB 提供了丰富的文档和用户手册,且有专业技术支持团队在线解答,方便用户快速上手。

本文旨在为有从 Redshift 迁移数据到 DolphinDB 需求的用户提供一份简明的教程参考。

1. 应用需求

AWS Redshift 2013年上线以来,凭借着使用各种创新技术,以快速、成本低、安全和兼容等优势吸引了大量用户。对于大小在 100 GB 到 1 PB 或更高的数据集,拥有很高的查询性能。具有很高的可扩展性,仅需在 AWS 管理控制台中点击几次即可完成配置扩展。对于金融大数据领域,Redshift 有大规模并行处理(MPP)架构,MPP 可以通过将数据分布到各个计算节点来解决海量数据的处理难题,并通过并发扩展与弹性调整处理突发工作负载。

与 Redshift 相比,2018年初发布的 DolphinDB,作为一款国产的高性能分布式数据库产品,凭借功能强大的编程语言和高容量高速度的流数据分析系统,能在满足低延时高吞吐量数据读写的要求的同时,轻松实现因子挖掘、流式计算、股票行情回放、实时计算高频因子等功能,成为国内大部分金融机构的首选方案。如今,如何将数据从其他数据库迁移同步到 DolphinDB 上成为大部分用户面临的一大难题。

2. 实现方法

DolphinDB 的 ODBC (Open Database Connectivity) 插件可帮助用户方便快速地将数据导入,从而实现从 Redshift 迁移数据到 DolphinDB。

ODBC 插件是 DolphinDB 提供的通过 ODBC 接口访问 Redshift 的开源产品。插件配合 DolphinDB 脚本使用,与服务器在同一个进程空间内运行,可以高效快速地完成从 Redshift 导入数据到 DolphinDB。

ODBC 提供了如下函数,函数的具体使用请参考 ODBC

odbc::connect(connStr, [dataBaseType])
odbc::close(conn)
odbc::query(connHandle or connStr, querySql, [t], [batchSize], [tranform])
odbc::execute(connHandle or connStr, SQLstatements)
odbc::append(connHandle, tableData, tablename, [createTableIfNotExist], [insertIgnore])

下表展示了 ODBC 与 DolphinDB 中数据类型的映射关系。

ODBC 数据类型

DolphinDB 数据类型

SQL_BIT

BOOL

SQL_TINYINT / SQL_SMALLINT

SHORT

SQL_INTEGER

INT

SQL_BIGINT

LONG

SQL_REAL

FLOAT

SQL_FLOAT/SQL_DOUBLE/SQL_DECIMAL/SQL_NUMERIC

DOUBLE

SQL_DATE/SQL_TYPE_DATE

DATE

SQL_TIME/SQL_TYPE_TIME

SECOND

SQL_TIMESTAMP/SQL_TYPE_TIMESTAMP

NANOTIMESTAMP

SQL_CHAR(len == 1)

CHAR

其他数据类型

STRING

本文中的实践案例利用 ODBC 插件迁移数据,选择了金融领域具有代表性的深交所数据作为数据源,提供了3日的逐笔成交数据(约3亿数据量),储存于 Redshift 中,真实地模拟用户情况。数据迁移过程中,要注意数据类型的转换,下表提供了从 Redshift 到 DolphinDB 相应表结构数据类型。

Redshift字段含义

Redshift字段

Redshift数据类型

DolphinDB字段含义

DolphinDB字段

DolphinDB数据类型

频道代码

channelno

integer

频道代码

channelno

INT

消息记录号

applseqnum

integer

消息记录号

applseqnum

INT

行情类别

mdstreamid

character varying(256)

行情类别

mdstreamid

SYMBOL

买方委托索引

bidapplseqnum

integer

买方委托索引

bidapplseqnum

INT

卖方委托索引

offerapplseqnum

integer

卖方委托索引

offerapplseqnum

INT

证券代码

securityid

character varying(256)

证券代码

securityid

SYMBOL

证券代码源

securityidsource

character varying(256)

证券代码源

securityidsource

SYMBOL

委托价格

lastpx

double precision

委托价格

lastpx

DOUBLE

委托数量

lastqty

double precision

委托数量

lastqty

DOUBLE

成交类别

extctype

integer

成交类别

extctype

INT

成交时间

transacttime

time without time zone

成交时间

transacttime

TIME

接收时间戳

lacaltime

time without time zone

接收时间戳

lacaltime

TIME

接收序列号

seqno

integer

接收序列号

seqno

INT

交易日期

transactiondate

date

交易日期

transactiondate

DATE

3. 迁移步骤

3.1 环境配置

本次案例中使用了以下数据库及插件,各版本型号如下:

Redshift 版本:国际版 us-west-2区

unixODBC 版本:2.3.1

DolphinDB Serve 版本:2.00.8.7

DolphinDB GUI 版本:1.30.20.1

2.00.8.7 版本 Server 自带 ODBC 插件,位于 Server 的 <HomeDir>/plugins 目录,可直接加载使用。如果 <HomeDir>/plugins 目录下不存在 ODBC 文件夹,则通过如下链接下载:

DolphinDB ODBC 插件 版本:2.00.8

请注意,DolphinDB ODBC 插件版本号必须与 Server 版本号一致,否则可能出现报错。例如,DolphinDB Server 版本号为 2.00.8.X,则必须使用 release200.8 分支的 ODBC 插件。

3.2 ODBC 配置

3.2.1 安装 ODBC

终端输入以下命令安装 ODBC 库

# Ubuntu 安装 ODBC
apt-get install unixodbc unixodbc-dev

# CentOS 安装 ODBC
yum install unixODBC  unixODBC-devel

# 检查是否安装成功
odbcinst -j

期望输出

unixODBC 2.x.x
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: $HOME/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
可以查看到 ODBC 驱动路径(/etc/odbcinst.ini)和系统数据源路径(/etc/odbc.ini)

3.2.2 安装 Redshift.ODBC 驱动

Redshift 配置 ODBC 连接可参考配置 ODBC 连接

下载 ODBC 驱动到本地

Ubuntu 选择 Linux 操作系统 64 位 (.deb),CentOS 选择 Linux 操作系统 64 位 (.deb)

2. 安装 ODBC 驱动

在终端输入以下语句进行安装

#Ubuntu
dpkg -i ./AmazonRedshiftODBC-1.x.x.xxxx-x.x86_64.deb

#CentOS
yum --nogpgcheck localinstall AmazonRedshiftODBC-64-bit-1.x.xx.xxxx-x.x86_64.rpm

安装成功后,会在 /opt/amazon/redshiftodbc/Setup 下生成两个配置文件 odbc.ini 和 odbcinst.ini

将这两个文件复制到上文中提到的 ODBC 驱动路径 /etc/odbcinst.ini 和 /etc/odbc.ini

cp /opt/amazon/redshiftodbc/Setup/odbcinst.ini /etc/
cp /opt/amazon/redshiftodbc/Setup/odbc.ini /etc/

3. ODBC URL 配置

复制 ODBC URL 将其添加到 /etc/odbc.ini 文件中

[Redshift]
Driver=Amazon Redshift (x64); 
Server=Your server; 
Database=Your database

4. 数据库安全组开放

预设情况下,用户创建的任何集群对所有人关闭。IAM 凭证仅控制对 Amazon Redshift API 相关资源的访问 AWS Redshift 控制台、命令行界面 (CLI)、API 和开发工具包。要能够通过 JDBC 或 ODBC 从 SQL 客户端工具访问集群,用户可以使用安全组。

将安全组的 inbound 规则设置如下,开放5439端口给外部。

编辑集群的属性,修改网络和安全设置,设置 VPC 安全组为刚才创建的安全组,并启用可公开访问。

5. 验证 ODBC 连接成功

在终端输入以下命令(使用数据库的实际登录信息)

isql redshift UID PWD

期望返回

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

3.3 利用 DolphinDB 脚本同步数据

运行以下命令加载 ODBC 插件

login("admin","123456")
loadPlugin("./plugins/odbc/PluginODBC.txt")

2. 创建 DolphinDB 相应的分区表

db=database("dfs://redshift",HASH,[INT,10]);
dt=table(300000000:0,["channelno","applseqnum","mdstreamid","bidapplseqnum","offerapplseqnum","securityid","securityidsource","lastpx","lastqty","exectype","transacttime","localtime","seqno","transactiondate"],[INT,INT,SYMBOL,INT,INT,SYMBOL,SYMBOL,DOUBLE,DOUBLE,INT,TIME,TIME,INT,DATE]);
pt=createPartitionedTable(db,dt,"dfstable","channelno");

3. 运行以下命令建立与 Redshift 的连接

conn = odbc::connect("Driver={Amazon Redshift (x64)}; Server=Your server; Database=Your database;User=UID;Password=PWD;")

4. 运行以下脚本将数据迁移到 DolphinDB 中

# pt 为创建的分区表
odbc::query(conn, "select * from trades_sz",pt)

startTime                        endTime
2022.12.20 17:22:12.644          2022.12.20 17:48:09.618

最终迁移3亿条数据,耗时仅为1610秒。该迁移案例测试的硬件环境为:

CPU:11th Gen Inter(R) Core(TM) i5-11500 @2.70GHz

处理器个数:12 个

单个处理器核数:6 核

内存大小:32 GB

网络传输速率:21508 MiB/s

5. 查看表中数据

select top 10 * from pt

4. 总结

本教程基于深交所3日逐笔成交数据,为大家介绍了如何将 Redshift 中的数据导入到 DolphinDB 中,DolphinDB 提供了 ODBC 插件,可以方便快捷地将数据进行导入。

DolphinDB 具有强大的金融数据处理能力,包含丰富的预定义函数功能,以及具备自带的持久化数据存储。既有非常高的吞吐量,又有较低的延时;既能够实时处理流数据,又能够处理海量的历史数据;既能满足简单的点查询的要求,又能满足批量数据复杂分析的要求。本教程中的数据迁移模拟操作充分地显示了 DolphinDB 的这些优势。

附录

完整脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCB设计中的屏蔽罩设计

屏蔽罩是一个合金金属罩&#xff0c;是减少显示器辐射至关重要的部件&#xff0c;应用在MID或VR产品中可以有效的减少模块与模块之间的相互干扰&#xff0c;如图3-54所示&#xff0c;常见于主控功能模块和电源模块及Wifi模块之间的隔离。图3-54 屏蔽罩的使用 01 屏蔽罩夹子一般…

前端沙箱浅析

前言 沙箱&#xff0c;即sandbox。 通常解释为&#xff1a;沙箱是一种安全机制&#xff0c;为运行中的程序提供隔离环境。常用于执行未经测试或者不受信任的程序或代码&#xff0c;它会为待执行的程序创建一个独立的执行环境&#xff0c;内部程序的执行不会影响外部程序的运行…

Go第 7 章:数组与切片

Go第 7 章&#xff1a;数组与切片 7.1 为什么需要数组 7.2 数组介绍 数组可以存放多个同一类型数据。数组也是一种数据类型&#xff0c;在 Go 中&#xff0c;数组是值类型。 7.3 数组的快速入门 我们使用数组的方法来解决养鸡场的问题. 7.4 数组定义和内存布局 对上图的总…

QA | 关于信号发生器的扫频功能,您了解多少?

在上期文章中&#xff0c;我们介绍了可编程信号发生器使用中的相关问题&#xff0c;那么关于便携式信号发生器的扫频功能您是否有很多问题呢&#xff0c;今天我们将围绕信号源扫频功能详细解答大家感兴趣的几个问题&#xff0c;快来看看吧&#xff01;Q1&#xff1a;信号源是否…

Linux操作系统--文件管理(保姆级教程)

文件系统类型的含义 文件系统类型式指文件在存储介质上存放及存储的组织方法和数据结构。 Linux采用虚拟文件系统技术&#xff08;virtual file system)-VFS 一个世纪的文件系统想要被Linux支持&#xff0c;就必须提供一个符合VFS标准的接口&#xff0c;才能与VFS协同工作&am…

线程的创建与同步

线程的创建与同步线程的概念与实现方式线程的概念进程线程的区别线程使用线程相关的接口函数多线程代码线程并发线程的实现方式线程的同步信号量互斥锁读写锁条件变量线程的安全线程与fork线程的概念与实现方式 线程的概念 进程是正在执行的程序。线程是进程内部的一条执行路…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《4》

这篇主要了解语义分割(semantic segmentation)&#xff0c;语义分割是分类中的一个核心知识点&#xff0c;而且这些语义区域的标注和预测都是像素级的。在语义分割中有两个很相似的重要问题&#xff0c;需要注意下&#xff1a;图像分割(image segmentation)&#xff1a;将图像分…

一文解决用C语言实现一个链表(全都是细节)

目录前言单链表1.链表中的结点2.链表中的常见操作&#xff08;1&#xff09;相关声明格式&#xff08;2&#xff09;常见操作的实现&#xff08;定义&#xff09;&#xff08;5&#xff09;测试前言 链表是指数据使用一个一个的结点连接起来的数据结构&#xff0c;这样的数据结…

(框架)Deepracer Local - 001: 搭建本地环境

Deepracer - 阿里云1. 安装环境2. 预安装脚本3. 从 github 下载 deepracer 代码 并初始化4. 首次运行deepracer1. 安装环境 推荐本地环境: Ubuntu (如果windowns必要的话&#xff0c;就装双系统&#xff0c;我的台式机就是双系统) 云环境: 阿里云&#xff0c;配置如下&#xf…

python简单介绍及基础知识(二)

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;…

Codeforces Round #839 (Div. 3)(A~F)

A. AB?给出长度为3的字符串&#xff0c;计算字符串表示的表达式的值。思路&#xff1a;。AC Code&#xff1a;#include <bits/stdc.h>typedef long long ll; const int N 2e5 5; int t; std::string s;int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);…

立即放弃 TypeScript 的 17 个理由

如果你和我一样&#xff0c;你可能会因为被迫而使用 Typescript。你的公司决定它会成为未来的语言&#xff0c;所以你被迫学习它。起初&#xff0c;您很高兴使用 Typescript。你知道它有很大的潜力&#xff0c;可以帮助你制作更强大的应用程序。但在使用了一段时间后&#xff0…

3.深度学习前的预备知识

3.预备知识 目录 数据操作 N维数组创建数组访问元素 数据预处理读取数据集 处理缺失值转换为张量格式小结 练习线性代数 标量向量矩阵张量张量算法的基本性质降维非降维求和点积矩阵-向量积矩阵-矩阵乘法范数范数和目标 微积分 导数和微分偏导数梯度链式法则 自动微分 一个简…

万字讲解!进阶指针!

今天我们来看进阶指针&#xff0c;还没有看过初阶指针的话建议先看看初阶 (3条消息) 初阶指针---从入门到入坟_KLZUQ的博客-CSDN博客 目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 …

使用Sivarc使PLC程序标准化

前言 由于公司最近做的项目都是同样的&#xff0c;并且都采用S7-1500/S7-1200 与G120 系列做为主控系统&#xff0c;所以我一直在思考一个问题&#xff1a;如何标准化并且快速的编程调试。这样可以极大的缩短项目的调试周期&#xff0c;减少公司工程成本&#xff0c;同时也免去…

英伟达发布528.02 WHQL 新驱动,支持4070 Ti

昨日&#xff0c;英伟达正式发布RTX 4070 Ti显卡&#xff0c;并马不停蹄发布了528.02 WHQL 驱动&#xff0c;支持4070 Ti&#xff0c;新硬件新驱动一次性齐活。 RTX 4070 Ti显卡在光线追踪游戏中的性能表现良好&#xff0c;在现代游戏如《瘟疫传说:安魂曲》&#xff0c;《战锤…

php如何接收支付宝应用网关发送的post请求

php如何接收支付宝应用网关发送的POST请求方式,参数又是GET请求的数据格式配置支付宝应用网关如何接收支付宝异步通知(应用网关接收请求)将&连接的参数分割成数组实例&#xff1a;难点配置支付宝应用网关 首先要在服务器上写一个接口,然后将接口的访问地址设置在支付宝应用…

Java中常用API总结(2)—— System类(含实例解读)

System类一、前言二、概述1.API帮助文档2.概述3.使用方式三、常用方法1.获取当前时间所对应的毫秒值1️⃣格式2️⃣实例3️⃣具体应用2.终止当前正在运行的Java虚拟机1️⃣格式2️⃣实例3.进行数值元素copy1️⃣格式2️⃣实例3️⃣注意事项四、结语一、前言 本文将讲述System类…

springsecurity认证流程

Authentication AuthenticationManager : 认证管理器 实现类&#xff1a; ProviderManager AuthenticationProvider &#xff1a; 实现类: DaoAuthenticationProviderRememberMeAuthenticationProvider 方法: authenticate()supports() : 判断当前AuthenticationProvider是…

dubbo学习笔记2(小d课堂)

dubbo核心架构及流程 企业中dubbo常见的多种开发方式 详解dubbo服务注册中心 Dubbo整合zookeeper 我们主要是改这部分&#xff1a; 然后我们启动本地的zookeeper&#xff0c;再去启动它&#xff1a; 会报错&#xff0c;这是说我们缺少响应的jar包&#xff1a; 就可以了。 我们提…