sqlserver数据迁移

说明

hubble支持PostgreSQL协议和大多数 PostgreSQL语法,这意味着在 PostgreSQL上构建的现有应用程序通常可以迁移到hubble。

导出test数据库里面的所有表结构

[root@ty-bj01-gf01 opt]#mssql-scripter -S 192.168.100.123 -d test -U sa -P 1qaz2WSX  --display-progress > ss.sql

导出后的sql文件,包括了用户所拥有的的权限,建表语句、主键、索引、表之间的主外键关系,视图等一些信息。但是对应到hubble上的话仍然需要修改,注意事项包括:

  • 表的主键和表之间的主外键关系在create table语句中创建。

  • sqlserver数据类型转换成hubble的数据类型。

数据类型映射

  • 使用下表进行数据类型映射:
sqlserver数据类型hubble数据类型
INTINT
NVARCHAR(n)VARCHAR(n)
VARCHAR(n)VARCHAR(n)
NCHAR(n)CHAR(n)
CHAR(n)CHAR(n)
TEXTTEXT
TIMETIME
DATEDATE
DATETIMEDATETIME
DATETIMEOFFSETTIMESTAMP WITH TIME ZONE
BIGINTBIGINT
DECIMALNUMERIC
TIMESTAMP(p)TIMESTAMP
DATETIME2TIMESTAMP
SMALLTIMESTAMP(p)TIMESTAMP
FLOAT(n)DECIMAL(n)
MONEYNUMERIC
SMALLMONEYNUMERIC
TINYINTSMALLINT
IMAGEBYTE
UNIQUEIDENTIFIERUUID
XMLJSON

函数类型转换

sqlserverhubble
leg()length
isnull()coalesce()
ltirm()tirm()
rtirm()tirm()
str1+str2str1
exists()exists()
lower()lower()
upper()upper()
round(age1,0)round(age1)
floor()floor()
ceil()ceil()
getdate()now()
dateadd()now () +interval '1 months'

导出csv文件

  • 本步骤用以导出表中的数据(不推荐导出SQL文件,改动量大)

sqlserver的文件导出建议使用dbeaver工具,导出的数据不需要改动

数据导入

  • 更改ss.sql文件里面表结构,以两张表cust_info和trans为例在hubble数据库中建表,对应字段类型参考数据类型映射表
create table  cust_info(cust_no varchar(40) primary key,cust_name varchar(40) ,cust_card_no  varchar(20),age  DECIMAL);
create table trans (cust_id varchar(20) primary key,cust_no varchar(30),trans_date timestamp,trans_aml DECIMAL(10,2));
  • 将csv文件放置集群在可访问的位置
[hubble@poc-hubble01 ~]$ cd /data_shares/cus
[hubble@poc-hubble01 cus]$ ls
cust_info.csv  trans.csv
  • 导入cust_info
IMPORT into cust_info ( cust_no ,cust_name, cust_card_no, age
) CSV DATA ( 'nodelocal://1/cus/cust_info.csv' ) 
WITH 
    DELIMITER = ','
;
        job_id       |  status   | fraction_completed | rows | index_entries | bytes
---------------------+-----------+--------------------+------+---------------+--------
  748594745725714433 | succeeded |                  1 |    2 |             0 |   114
  • 导入trans
IMPORT into trans ( cust_id ,cust_no,trans_date, trans_aml
) CSV DATA ( 'nodelocal://1/cus/trans.csv' ) 
WITH 
    DELIMITER = ','
;
        job_id       |  status   | fraction_completed | rows | index_entries | bytes
---------------------+-----------+--------------------+------+---------------+--------
  748595201171456001 | succeeded |                  1 |    2 |             0 |   102