文本描述
中软广发 广州
数据同步怎么同步?使用的工具、技术、脚本是哪些?
全量同步或者增量同步;使用kettle、sqoop或者写存储过程;
全量抽取:将目标表的全部诗句删除,再将源系统的数据全部插入目标表,但数据量大 的时候,性能太差
增量同步:只抽取新增的或修改的数据。但源表有更新的字段,在目标表中不存在,则 不需要更新,以时间戳取增量,对源表删除的数据无能为力。
方法一:merge(不是所有数据库都通用)若数据量大时merge删除比delete好
方法二:先将目标表的记录在增量范围之内的删除,然后再将增量插入
方法三:使用游标,逐一判断每一条增量纪录是需要更新还是插入
方法四:将增量记录逐一插入目标表,如果违反唯一索引则更新
如果源表的记录删除了怎么办?
源表的记录一般不会被删除,通常后面会加一个删除标识字段,用来标记这条记录是否失效;如果源表有数据删除了,可以查看源表的日志,看哪些记录被删除了,在目标表相应记录上加上删除标识,但是代价大,成本高。
存储过程的结构?
业务角度:1.处理逻辑;2.异常处理;3.日志,把运行过程记录到日志里面;
语法角度:1.过程名称、参数;2.包含在begin/and之间的代码3.存储过程的调用
存储过程怎么往日志表里去写?实现的原理?写的内容?怎么实现呢?
日志是用来记录错误和追溯问题、记录程序运行的情况,对程序进行修改和优化,提高性能;
1.先创一个日志表来记录日志;2.创建存储过程,来往日志表中插入日志信息;3.在其他存储过程执行的时候,调用日志的存储过程来记录具体的信息;
创建自定义函数?
Create or raplace function 函数名(参数1 数据类型,参数2 [in|out|in out]数据类型……)
Return 返回的数据类型
Is|as
PL/SQL 函数体;--里面必须要有一个return子句
存储过程和函数的区别?
返回值的区别:函数有1个返回值,存储过程是通过参数返回,可以有多个或者没有;
调用的区别:函数可以在查询语句中直接调用,而存储过程必须单独调用
函数一般是用来计算并返回一个计算结果,存储过程一般是用来完成特定的数据操作(如修改、插入数据库表或执行DDL语句)
异常处理or存储过程遇到过的报错
PL/SQL中用exception关键字开始异常处理,异常发生时,进入异常处理部分,具体的异常与若干个when子句中知名的异常名称匹配,匹配成功就进入对应的异常处理部分,如果对应不成功,则进入others进行处理。
PL/SQL中预定义异常:--存储过程遇到过的报错
试图向唯一索引列插入重复值
试图进行非法游标操作
试图将字符串转换为数字
select into 中没有返回任何记录
select into 中返回多于1条记录
试图用0作为除数
试图打开一个已经打开的游标
ETL掌握的技能,或者掌握了什么技术?
数据库oracle、mysql、hive
ETL工具kettle、DataStage、infa、sqoop、datax
数据转换是ETL的核心环节,主要目标是将抽取到的各种数据进行数据的清洗、格式 的转换、缺失值填补
ETL单词:数据抽取extract-数据转换transform-数据加载load
Sqoop抽到哪里?
Sqoop主要用于在Hadoop和关系型数据库或大型机之间传输数据,可以将数据从关系型数据库管理系统导入(import)到Hadoop分布式文件系统中,或者将Hadoop中的数据转换导出(export)到关系数据库管理系统。
Hive里面的Metastore是拿来干嘛的?
客户端链接Metastore服务器,Metastore再去链接Mysql数据库才存取元数据。有了Metastore服务,就可以有多个客户端同时链接,而且这些