当前位置:AIGC资讯 > 数据采集 > 正文

数据的增量采集与全量采集

文章目录

前言 1. 传统数据库的增量与全量 1.1 Oracle 1.2 Mysql 2. 大数据框架的增量与全量 2.1 业务数据 2.2 日志数据

前言

本文简单示例传统数据库与大数据系统下数据的增量采集与全量采集

1. 传统数据库的增量与全量

1.1 Oracle

存量:dump文件
建立共享目录

create directory mydump as '/data/sharedata/mydump';
select * from dba_directories;
grant all on directory mydump to system;
grant export full database to system;

dump导入命令(用户名/密码@服务名)

impdp \'/ as sysdba\' directory=mydump dumpfile=mydb.dmp table_exists_action=replace

dump导出命令(用户名/密码@服务名)

expdp \'/ as sysdba\' SCHEMAS=TEST directory=mydump dumpfile=mydb.dmp logfile=mydb.log

增量:sqlloader / merge

编写control文件[xxx.ctl]
LOAD DATA
INTO TABLE "[TABLE_NAME_TMP]"—增量数据先导入到一张临时表-
APPEND
FIELDS TERMINATED BY "|"
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(COLUMNS,COLUMNS,COLUMNS,
COLUMNS "TO_CHAR(TO_DATE(:COLUMNS ,'yyyymmdd'),'yyyymmdd')")
编写xxx.sh文件[xxx.sh]
#!/bin/bash
#每日增量数据
sqlplus -s $username/$passwd@$tns <<EOC
TRUNCATE [TABLE_NAME_TMP];--导入之前先清理增量表,保证数据只是增量
commit;
exit;
EOC
sqlldr $username/$passwd@$tns control=$dir/xxx.ctl log=$dir/xxx.log bad=$dir/xxx.bad data=$dir/$dile_name errors=$errorCount parallel=true bindsize=750000 readsize=750000 streamsize=750000 rows=50000 > /tmp/xxx.result

sqlplus -s $username/$passwd@$tns <<EOC
MERGE INTO [TABLE_NAME_TARGET] A 
USING [TABLE_NAME_TMP] B 
ON (A.MERGE_COLUMN=B.MERGE_COLUMN AND A.MERGE_COLUMN = B.MERGE_COLUMN) 
WHEN MATCHED THEN
UPDATE SET
A.COLUMNS=B.COLUMNS,
A.COLUMNS=B.COLUMNS,
A.COLUMNS=B.COLUMNS
WHEN NOT MATCHED THEN
INSERT VALUES(
B.COLUMNS,
B.COLUMNS,
B. COLUMNS
);
--无变更的合并,有变更的覆盖

1.2 Mysql

存量:load data

load data local infile “/dir/file_name” into table TABLE_NAME([option]);

option 可以是以下选项:

FIELDS TERMINATED BY ‘string’(字段分隔符,默认为制表符’\t’); FIELDS [OPTIONALLY] ENCLOSED BY ‘char’ 字段引用符,如果加 OPTIONALLY 选项则只会做用在char, varchar和text等字符型字段上,其他类型字段默认不使用引用符 FIELDS ESCAPED BY ‘char’(转义字符,默认为’’); LINES STARTING BY ‘string’(每行前都加此字符串,默认’’); LINES TERMINATED BY ‘string’(行结束符,默认为’\n’); IGNORE number LINES(忽略输入文件中的前 n 行数据); (col_name_or_user_var,…) (按照列出的字段顺序和字段数量加载数据); SET col_name = expr,… 将列做一定的数值转换后再加载

增量:canal
CANAL需要开启binlog日志。框架是自动识别binlog中的变更然后同步的。
具体操作详见: https://blog.csdn.net/qq_37067752/article/details/107687306

2. 大数据框架的增量与全量

2.1 业务数据

业务数据从量级上来看是比较偏小的;况且业务数据大多存储在传统关系型数据库中,因此直接参考传统数据库增量与全量采集即可。

2.2 日志数据

存量:flume
flume架构[TailDir Source多目录采集,支持断点续传;Kafka Channel可省略Sink]

配置Flume.conf[示例]

增量:sqoop
[Sqoop可以实现RMDB到大数据之间的数据传递,既可以增量也可以全量。这里只示例RMDB到HDFS的增量采集]

更新时间 2023-11-08