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如果不指定参数,则默认是是decimal(10,0)
字符串类型:
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 表示10年2个月一共表示的月份数,是122个月
--3表示前面年份的有效位数最大为3,比如1234-2就不行
interval year(3) to month 表示一个时间段,比如3年10个月
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支持的导数据功能将数据导入到目标数据源。