不同数据源的字段类型 以及相互转换

mysql hive hbase oracle postgreSql
clickhouse sql _server  hbase20xsql
修改列值sql语句
UPDATE  tb_condition_meta set source=1,db_name='dm',table_name='dm_user_info' where condition_id=7 ;
删除某行:
delete from table_name where id=1;

一、Mysql

1.1 建表语句

CREATE TABLE IF NOT EXISTS `wentao_test1`(
   `id` INT UNSIGNED AUTO_INCREMENT ,
   `name` VARCHAR(100) NOT NULL comment '名字不为空',
   `age` INT NOT NULL,
   `birthday` DATE,
   `city` VARCHAR(100)  default("china"),
   `onlyid` INT UNIQUE KEY,
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

UNSIGNED:非负约束
NOT NULL:非空约束,表示该字段的值不能为空
DEFAULT:表示如果插入数据时没有给该字段赋值,那么就使用默认值
PRIMARY KEY:主键约束,表示唯一标识,不能为空,且一个表只能有一个主键。一般都是用来约束id
AUTO_INCREMENT:自增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
UNIQUE KEY:唯一值,表示该字段下的值不能重复,null除外。比如身份证号是一人一号的,一般都会用这个进行约束
FOREIGN KEY:外键约束,目的是为了保证数据的完成性和唯一性,以及实现一对一或一对多关系

1.2 数据类型

	布尔类型:
	 boolean 
	数值-整型:
	 int 
     tinyint 					
     smallint 					
     mediumint 					
     tinyint unsigned 			
     smallint unsigned 			
     mediumint unsigned 		
     int unsigned 				
     bigint unsigned 			
     bigint 
    定点型:
    decimal
   	数值-浮点型: 							
     double 					
     float 	
    时间:
     date 	年月日					
     datetime  年月日时分秒
     timestamp 	年月日时分秒毫秒		
     time 	时分秒
     year 						
     month 						
     day 	
    字符串:
     char  最大250						
     varchar 最大60000					
     text 						
     longtext 					
     mediumtext 
     枚举、集合:
     ENUM
     SET 
     
     json
    	

1.3 字段约束条件

约束条件
约束条件就是在给字段加一些约束,使该字段存储的值更加符合我们的预期。

常用约束条件有以下这些

UNSIGNED :无符号,值从0开始,无负数
ZEROFILL:零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED

UNSIGNED:非负约束
NOT NULL:非空约束,表示该字段的值不能为空
DEFAULT:表示如果插入数据时没有给该字段赋值,那么就使用默认值
PRIMARY KEY:主键约束,表示唯一标识,不能为空,且一个表只能有一个主键。一般都是用来约束id
AUTO_INCREMENT:自增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
UNIQUE KEY:唯一值,表示该字段下的值不能重复,null除外。比如身份证号是一人一号的,一般都会用这个进行约束
FOREIGN KEY:外键约束,目的是为了保证数据的完成性和唯一性,以及实现一对一或一对多关系

————————————————

二、Hive

2.1 建表语句

set hive.exec.dynamc.partition=true  //开启动态分区
set hive.exec.dynamc.partition.mode=nonstrick //无限制模式,即不需要必须有一个静态分区
create table if not exists table_name(
	`id` INT UNSIGNED AUTO_INCREMENT ,
   `name` VARCHAR(100) NOT NULL comment '名字不为空',
   `age` INT NOT NULL,
   `birthday` DATE,
   `city` VARCHAR(100)  default"china",
   `onlyid` INT UNIQUE KEY,
)
partitioned by (dt string)
clustered by (age int)  //可以不考虑分桶
row format delimited fields terminated by ","
stored as orc/textfile/parquent
location 'hdfs_path'  //这个表的数据保存在哪个位置

有分区的时候,分区字段是在最后一列;
可以load数据的时候,如果在分区的那一列是有数据的,那么可以直接将那一列作为分区一句进行分区;否则的话就要手动添加分区
load data (local) inpath 'filePath' 
alter table table_name add if not exits partition(dt='20220202')

2.2 数据类型

布尔:
BOOLEAN			true/false	TRUE
数值-整型类型:
TINYINT			1字节的有符号整数 -128~127	1Y
SMALLINT		2个字节的有符号整数,-32768~32767	1S
INT				4个字节的带符号整数	1
BIGINT			8字节带符号整数	1L
数值-浮点型:
FLOAT			4字节单精度浮点数1.0	 
DOUBLE		8字节双精度浮点数	1.0,
DEICIMAL		任意精度的带符号小数	1.0如果不指定参数,则默认是是decimal100)
字符串类型:
STRING			字符串,变长	“a”,’b’
VARCHAR
CHAR
字节数组:
BINARY			字节数组	无法表示
时间类型:
TIMESTAMP		时间戳,纳秒精度	122327493795
DATE			日期	‘2016-03-29’

复杂类型	
ARRAY			有序的的同类型的集合	array(1,2)
MAP				key-value,key必须为原始类型,value可以任意类型	map(‘a’,1,’b’,2)
STRUCT			字段集合,类型可以不同	struct(1,1,1.0), named_stract(‘col1’,1,’col2’,1,’clo3’,1.0)
UNION			在有限取值范围内的一个值	create_union(1,’a’,63)	

三、HBase

3.1建表语句

create 'nameSpace_name:tableName','cf1'  
建表就是指定名称空间:表名,列族;
如果不指定名称空间的话,就会使用默认的名称空间
列族的话可以就写死(或者传入),但是写死比较好,就使用一个列族
当数据量不断增大的话,region会自动拆分

插入数据:
put 'tableName','rowkey','列族:列名','列值'
若“tableName,rowkey,列族:列名”都相同,则插入的数据会覆盖

3.2 数据类型

hbase类似列式存储,不存在数据类型

四、Oracle

4.1 建表语句

create_table的描述
create [ { global | private } temporary | sharded | duplicated | [ immutable ] blockchain 
  | immutable  ] 
   table
  [ schema. ] table
  [ sharing = { metadata | data | extended data | none } ]
  { relational_table | object_table | xmltype_table }
  [ memoptimize for read ]
  [ memoptimize for write ]
  [ parent [ schema. ] table ] ;
  
  建表语句示例:
  CREATE TABLE employees
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25)
         CONSTRAINT     emp_last_name_nn  NOT NULL
    , email          VARCHAR2(25)
        CONSTRAINT     emp_email_nn  NOT NULL
    , phone_number   VARCHAR2(20)
    , hire_date      DATE
        CONSTRAINT     emp_hire_date_nn  NOT NULL
    , job_id         VARCHAR2(10)
        CONSTRAINT     emp_job_nn  NOT NULL
    , salary         NUMBER(8,2)
    , commission_pct NUMBER(2,2)
    , manager_id     NUMBER(6)
    , department_id  NUMBER(4)
    , CONSTRAINT     emp_salary_min
                     CHECK (salary > 0)
    , CONSTRAINT     emp_email_uk
                     UNIQUE (email)
    ) ;
    
 五种类型约束:
 not null
 check()  可以在check中指定字段的条件约束,CHECK (salary > 0)
 unique   唯一性即不重复性约束
 primary key 主键约束
 foreign key 外键约束
 --
 constraint 约束的使用:可以使用在列级别上和表级别上
 列级别上:
 email  VARCHAR2(25) CONSTRAINT emp_email_nn  NOT NULL
 column type         CONSTRAINT 约束名(自己起)  约束类型
 表级别上:
 , department_id  NUMBER(4)
 , CONSTRAINT     emp_salary_min CHECK (salary > 0)
 , CONSTRAINT     emp_email_uk  UNIQUE (email)
 ) ;

4.2 数据类型

一、字符类型
char()
nchar() 
varchar2() 
nvarchar2() 
通用的数据类型是varchar2(4000)

二、数值类型
number(p,s)类型 p表示有效位数  s表示精度位数 不指定精度则可以包含范围内任意精度
integer
int     是number的子类型,等同于number(38)
smallint是number的子类型,等同于number(38)
decimal() 是number(p,s)的子类型,可以使用decimal(p,s),若p,s未指定,等同于number(38)

float(b)数b表示二进制进度 所以这并不是浮点类型
real 相当于float(63)
binary_float 即为单精度浮点类型 flot
binary_double即为双精度浮点类型 double
三、日期类型  --都对应成string
date             可存年月日时分秒
timestamp()      可存到毫秒后几位小数
timestamp(9) with time zone  with后面是加上了时区的偏移量
INTERVAL 'integer [- integer]' {YEAR | MONTH|DAY} [(precision)][TO {YEAR | MONTH|DAY}]
interval '10-2' year(3) to month 表示102个月一共表示的月份数,是122个月
--3表示前面年份的有效位数最大为3,比如1234-2就不行
interval year(3) to month  表示一个时间段,比如310个月
interval day(3) to second(6)
...


四、long类型与lob大型对象数据类型 --只将long转成string就行了
long   
long raw 可变长二进制数据,不用进行字符集转换的数据,最长2GB。
blob二进制大型对象,存储图片,音乐,视频等信息,通常将文件转为二进制再存进去;存储的最大大小为4G;支持随机存储
clob字符大型对象,存储文章或较长的文字。存储的最大大小为4G。
nclob存储Unicode类型的数据,根据字符集而定的字符类型,最大长度4G。
bfile

五、rowid & urowid类型 --这两种也不用转

五、Clickhouse

5.1建表语句

5.2数据类型

数值:
UInt8,UInt16,UInt32, UInt64, UInt128, UInt256,  数值非负  --对应mysql int unsigned
Int8, tinyint
Int16,smallint
Int32, int
Int64,bigint
//Int128, Int256

Float32 — float.
Float64 — double
定点型:
Decimal32(S), Decimal64(S), Decimal128(S), Decimal256(S)  s表示保留的小数的位数

Boolean

String 
FixedString(N)  n表示字符串的长度 固定的字符串长度

UUID

时间类型:
Date  yyyy-mm-dd 
Date32 --转成string
DateTime    2019-01-01 03:00:00
DateTime64  2019-01-01 03:00:00.000

枚举:
Enum    'a'=1
Enum8    可以使用的数字范围是int8
Enum16   可以使用的数字范围是int16

特殊类型:
Array()  --aa Array(String)
Tuple()  --tt Tuple(Int8,String,Int16)
Nested() --props Nested(id Int8,name String,city String)

六、sqlServer

6.1建表语句

建表语句跟oracl、mysql类似

6.2数据类型

数值:
bit  boolean 1-true 0-false存储1 0 null
tinyint byte
smallint 
int
bigint
numeric() decimal
decimal() decimal
smallmoney  decimal
money decimal
浮点型
float(n) double  float(53)-double\float
real     double

时间
date  date yyyy-mm-dd
time  hh-mm-ss.000到四位数的毫秒
datetime 年月日时分秒毫秒
datetime2 年月日时分秒毫秒
smalldatetime 年月日时分
datetimeoffset 年月日时分秒毫秒+时区
timestamp

字符串
char()
varchar()最大7000
text
nchar 存储固定长度的Unicode字符串
nvarchar存储可变长度的Unicode字符串
ntext存储可变长度的Unicode字符串  Unicode即使用unicode编码,当有中文的时候能减少乱码的产生
二进制
binary() 定长
varbinary()可变长度
image 存储可变长度的二进制数据


七、PostGreSql

7.1 建表语句

与mysql、oracle建表语句类似

7.2 数据类型

通用的数据类型 :varchar
数值类型:
smallint		smallint
integer		int		
bigint		bigint
decimal(n,m)	double
numeric(n,m) 相当于decimal如果不指定精度,则可以存储 任何限制内的长度和精度。
real	double
double precision	double
smallserial		自增的小范围整数1-32767	 	int
serial	自增整数大范围		int
bigserial	自增整数大范围		bigint

货币类型:
money	类型存储带有固定小数精度的货币金额。	string

字符类型:
character varying(n) varchar(n)	变长,有长度限制	如果varchar不指定参数,则相当于text
character(n), char(n) 定长,不足补空白		string
text	变长,无长度限制


日期时间类型:
timestamp(p) (with time zone) 日期和时间到毫秒(有无时区)	string
date	年月日		date
time(p)(with time zone)	用于一日内的时间时分秒毫秒		string
interval()	时间间隔	string

布尔类型:
boolean		boolean
枚举类型:
enum	string
几何类型:
point	平面中的点	            (x,y)
line	(无穷)直线(未完全实现)	 ((x1,y1),(x2,y2))
lseg	(有限)线段	            ((x1,y1),(x2,y2))
box	    矩形	                 ((x1,y1),(x2,y2))
path	闭合路径(与多边形类似)	((x1,y1),...)
path	开放路径	            [(x1,y1),...]
polygon	多边形(与闭合路径相似)	((x1,y1),...)
circle	圆	                  <(x,y),r> (圆心和半径)
网址类型:
cidr	IPv4 或 IPv6 网络
inet	IPv4 或 IPv6 主机和网络
macaddr	MAC 
位串类型:
bit(n)         必须是n位		
bit varying(n) 最长是n位
文本搜索类型:
tsvector、tsquery 不做转换
UUID类型:
UUID
xml类型
json类型
数组类型:
integer[]   一维数组
integer[][] 二维数组
复合类型:
可以定义一个tmp类型,然后在建表语句中shiyogntmp类型
对象标识符类型:oid....
伪类型:any....

十、代码

1、根据srcSourceData 创建对应的tagSourceData ,完成类型转换,做好建表语句的转换;
2、传入建表sql语句,根据不同的tagSourceType使用不用的BaseTool,调用executeCreateTableSql
//BaseQueryTool baseQueryTool = QueryToolFactory.getByDbType(datasource);
//baseQueryTool.executeCreateTableSql(createHBaseDDL);

3、在executeCreateTableSql中使用
//PrepareStatement stmt = connection.createStatement();
//stmt.executeUpdate(querySql);
来进行建表sql语句的执行

而connect会先根据srcSourceType从缓存中找(默认缓存时间未4小时),如果缓存中没有,就会使用SpringBoot中的一个框架hikari创建线程池,创建connect,最大线程数默认是10

4、对应目标数据源中有了对应的表,那么就可以使用datax支持的导数据功能将数据导入到目标数据源。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值