331全量增量数据、同步ld
-- 数据同步
1 全量数据同步
1.1 不带参数的实现方式
每次更新目标表的时候,先把目标表中的数据清空,然后用源表的数据插入目标表中 。
1.2 通过参数 ,会计期(一个会计期 = 1个月 ,格式为 年-月 )更新目标表的部分数据 ,对会计期内的数据 进行全量的更新
每次更新,只更新目标表最近一个会计期的数据 ,
更新之前先根据 参数 删除 会计期 内的数据,然后查询源表会计期的数据插入到目标表中。
2 增量数据同步
2.1 不带参数的实现方式
更新目标表之前,会判断 源表的数据在目标表中是否存在
存在 则用源表的数据 更新 目标表中的数据。
不存在 那么直接将源表的数据 插入到 目标表中 。
2.2 使用参数的切片全量 ,使用参数 实现 只更新表切片的数据 不做全表的增量同步 。
更新目标表之前,会判断 源表的 切片的范围内的 数据 在目标表 切片的范围内 是否存在
存在 则用源表的数据 更新 目标表中的数据。
不存在 那么直接将源表的数据 插入到 目标表中 。
-------------------------------------- 增量的方式更新 EMP_BAK
增量同步有2种方式实现:
1 游标 CURSOR
2 MERGE INTO
----------- 游标 CURSOR 实现
CREATE OR REPLACE PROCEDURE SP_EMP_BAK_CURSOR
IS
-- 先定义一个游标 指向 源表的结果
CURSOR C_EMP IS SELECT * FROM EMP ;
V_CT NUMBER(4) ;
BEGIN
-- 通过循环 从游标中取数
FOR X IN C_EMP LOOP
-- 循环内 通过条件控制判断 源表的数据 在 目标表中 是否存在
SELECT COUNT(*) INTO V_CT FROM EMP_BAK WHERE EMPNO = X.EMPNO ;
-- V_CT 的结果 只会等于 1 或者 0 , 1 表示存在, 0 不存在。
-- 判断 目标表的数据在 源表中是否存在
IF V_CT = 1 THEN
UPDATE EMP_BAK M
SET
M.ENAME = X.ENAME,
M.JOB = X.JOB,
M.MGR = X.MGR,
M.HIREDATE = X.HIREDATE,
M.SAL = X.SAL,
M.COMM = X.COMM,
M.DEPTNO = X.DEPTNO,
M.DATA_DATE = SYSDATE
WHERE M.EMPNO = X.EMPNO ;
-- 判断 目标表中 在 源表数据 不存在 ,则 插入
ELSIF V_CT = 0 THEN
INSERT INTO EMP_BAK
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DATA_DATE)
VALUES
(X.EMPNO,
X.ENAME,
X.JOB,
X.MGR,
X.HIREDATE,
X.SAL,
X.COMM,
X.DEPTNO,
SYSDATE);
END IF ;
END LOOP ;
COMMIT ;
END SP_EMP_BAK_CURSOR;
--------- 调用存储过程
BEGIN
SP_EMP_BAK_CURSOR;
END ;
SELECT * FROM EMP_BAK ;
--------------- MERGE INTO 实现
CREATE OR REPLACE PROCEDURE SP_EMP_BAK_MERGE
IS
BEGIN
MERGE INTO EMP_BAK M -- 目标表
USING (SELECT *FROM EMP ) X -- 源表
ON (M.EMPNO = X.EMPNO) -- 比较字段
WHEN MATCHED THEN -- 当匹配字段 找到相同的数据 则更新
UPDATE SET -- 这里的 UPDATE SET 之间没有 表名
M.ENAME = X.ENAME,
M.JOB = X.JOB,
M.MGR = X.MGR,
M.HIREDATE = X.HIREDATE,
M.SAL = X.SAL,
M.COMM = X.COMM,
M.DEPTNO = X.DEPTNO,
M.DATA_DATE = SYSDATE
WHEN NOT MATCHED THEN -- 当匹配字段 找 不 到相同的数据 则插入
-- 这里的 INSERT 没有 INTO
INSERT (M.EMPNO ,
M.ENAME ,
M.JOB ,
M.MGR ,
M.HIREDATE ,
M.SAL ,
M.COMM ,
M.DEPTNO ,
M.DATA_DATE )
VALUES(
X.EMPNO ,
X.ENAME ,
X.JOB ,
X.MGR ,
X.HIREDATE ,
X.SAL ,
X.COMM ,
X.DEPTNO ,
SYSDATE );
COMMIT ;
END SP_EMP_BAK_MERGE ;
---------------- 调用
BEGIN
SP_EMP_BAK_MERGE ;
END ;
SELECT * FROM EMP_BAK FOR UPDATE ;
TRUNCATE TABLE EMP_BAK
-- 数据同步
1 全量数据同步
1.1 不带参数的实现方式
每次更新目标表的时候,先把目标表中的数据清空,然后用源表的数据插入目标表中 。
1.2 通过参数 ,会计期(一个会计期 = 1个月 ,格式为 年-月 )更新目标表的部分数据 ,对会计期内的数据 进行全量的更新
每次更新,只更新目标表最近一个会计期的数据 ,
更新之前先根据 参数 删除 会计期 内的数据,然后查询源表会计期的数据插入到目标表中。
2 增量数据同步
有一个目标表 EMP_BAK 字段名称跟 EMP表一样 .
为了方便检查,需要在目标表中 添加 审计字段 DATA_DATE ,LAST_UPDATE_DATE
ALTER TABLE EMP_BAK ADD DATA_DATE DATE ;
--------------------------- 全量数据同步 ----------------------
/*需求 :通过存储过程 全量更新 EMP_BAK */
CREATE OR REPLACE PROCEDURE SP_EMP_BAK
IS
BEGIN
-- 先清空目标表的数据 ,为了支持 重跑
DELETE FROM EMP_BAK WHERE 1 = 1 ;
-- 然后 将源表 EMP 的数据 插入到 目标表 EMP_BAK 中
INSERT INTO EMP_BAK
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DATA_DATE)
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, SYSDATE
FROM EMP;
COMMIT;
END SP_EMP_BAK;
------- 调用存储过程
BEGIN
SP_EMP_BAK;
END ;
SELECT * FROM EMP_BAK;
---------------- 比如 我想一次更新 某一年的数据
CREATE OR REPLACE PROCEDURE SP_EMP_BAK_Y( P_YEAR VARCHAR2)
IS
BEGIN
-- 先清空目标表的数据 ,为了支持 重跑
DELETE FROM EMP_BAK WHERE TO_CHAR(HIREDATE,'YYYY') = P_YEAR ;
-- 然后 将源表 EMP 的数据 插入到 目标表 EMP_BAK 中
INSERT INTO EMP_BAK
(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DATA_DATE)
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, SYSDATE
FROM EMP
WHERE TO_CHAR(HIREDATE, 'YYYY') = P_YEAR;
COMMIT;
END SP_EMP_BAK_Y;
------- 调用存储过程
BEGIN
SP_EMP_BAK_Y('1987');
END ;
SELECT * FROM EMP_BAK ;
-------------------------------------
全量同步 适合数据量不大的小表的更新 。
一般针对 百万行数据以内的小表 我们采用全量方式 ,超过百万以上的表 我们都用 增量的方式更新 。
因为这种方式 准确率非常高。
但是对于大表而言 直接删除表的数据 风险太大 。
于是有了 切片全量 更新方式 ,可以大大提高全量的更新效率,并且可以避免对整张表的操作 。
--
练习1:
/*编写存储过程,更新目标表的数据 目标表字段包括: 部门编号 ,
部门名称,部门人数,部门的平均工资
1 以全量同步的方式更新目标表 ,各部门的数据;*/
create table emp_bak3
as
select e.deptno ,
d.dname ,
count(e.empno)over(partition by e.deptno) AS "CT_EMPNO",
avg(e.sal) over(partition by e.deptno) AS "AVG_SAL",
SYSDATE AS "DATA_DATE"
from emp e
join dept d
on e.deptno = d.deptno
WHERE 1 = 2 ;
---- 创建 SP
CREATE OR REPLACE PROCEDURE SP_EMP_BAK3 IS
BEGIN
DELETE FROM EMP_BAK3 WHERE 1 = 1;
INSERT INTO EMP_BAK3(DEPTNO,
DNAME,
CT_EMPNO,
AVG_SAL,
DATA_DATE)
SELECT E.DEPTNO, D.DNAME, COUNT(E.EMPNO), ROUND(AVG(E.SAL),2), SYSDATE
FROM EMP E
JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
GROUP BY E.DEPTNO, D.DNAME;
COMMIT;
END SP_EMP_BAK3;
--- 调用
BEGIN
SP_EMP_BAK3;
END;
select * from emp_bak3;
/* 2 以部门编号为参数 切片全量更新 目标表 的数据 ;*/
CREATE OR REPLACE PROCEDURE SP_EMP_BAK_3(P_DEPTNO NUMBER) IS
BEGIN
DELETE FROM EMP_BAK3 WHERE DEPTNO = P_DEPTNO;
INSERT INTO EMP_BAK3
(DEPTNO, DNAME, CT_EMPNO, AVG_SAL, DATA_DATE)
SELECT E.DEPTNO, D.DNAME, COUNT(E.EMPNO), ROUND(AVG(E.SAL), 2), SYSDATE
FROM EMP E
JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
WHERE E.DEPTNO = P_DEPTNO
GROUP BY E.DEPTNO, D.DNAME;
COMMIT;
END SP_EMP_BAK_3;
BEGIN
SP_EMP_BAK_3(10);
END;
SELECT * FROM EMP_BAK3;
练习2
----编写存储过程,更新目标表的数据 目标表字段包括: 部门编号 ,部门名称,部门人数,部门的平均工资
---1 以增量同步的方式更新目标表 ,各部门的数据;
select * from emp_bak3
CREATE OR REPLACE PROCEDURE SP_EMP_BAK3_CURSOR IS
-- 定义游标 查询取数的源表的结果集
CURSOR C_EMP IS
SELECT D.DEPTNO , D.DNAME , COUNT(E.EMPNO) CT , AVG(E.SAL) AVG_SAL
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.DEPTNO , D.DNAME ;
-- 定义所需变量
V_CT NUMBER(4); -- 员工的人数
BEGIN
FOR X IN C_EMP LOOP
SELECT COUNT(*) -- 统计目标表中的部门 /数据 在源表中是否存在 ,返回 1 或者 0
INTO V_CT -- 将统计结果 赋值给 变量
FROM EMP_BAK3 -- 查询目标表
WHERE DEPTNO = X.DEPTNO; -- 判断 目标表中的部门/数据 在源表中是否存在
--- 判断 如果 部门编号 在源表的结果集中存在 那么则 更新
IF V_CT = 1 THEN
UPDATE EMP_BAK3 M
SET M.DNAME = X.DNAME, -- 部门名称
M.CT_EMPNO = X.CT , -- 部门人数
M.AVG_SAL = X.AVG_SAL, -- 部门的平均工资
M.DATA_DATE = SYSDATE -- 审计字段
WHERE M.DEPTNO = X.DEPTNO; -- 比较字段 ,条件
--- 判断 如果 部门编号 在源表的结果集中 不存在 那么则 更新
ELSIF V_CT = 0 THEN
INSERT INTO EMP_BAK3
( DEPTNO, -- 部门编号
DNAME , -- 部门名称 EPTNO
CT_EMPNO, -- 部门人数
AVG_SAL, -- 部门的平均工资
DATA_DATE -- 审计字段
)
VALUES
( X.DEPTNO /*部门编号*/
, X.DNAME /*部门名称 EPTNO*/
, X.CT /*部门人数*/
, X.AVG_SAL /*部门的平均工资*/
, SYSDATE); /*审计字段*/
END IF;
END LOOP;
COMMIT;
END SP_EMP_BAK3_CURSOR;
-- 调用
BEGIN
SP_EMP_BAK3_CURSOR ;
END ;
SELECT * FROM EMP_BAK3;
--2 以部门编号为参数 切片增量更新 目标表 的数据 ;
CREATE OR REPLACE PROCEDURE SP_EMP_BAK3_CURSOR_1 (p_deptno number)
IS
-- 定义游标 查询取数的源表的结果集
CURSOR C_EMP IS
SELECT D.DEPTNO , D.DNAME , COUNT(E.EMPNO) CT , AVG(E.SAL) AVG_SAL
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.DEPTNO = p_deptno
GROUP BY D.DEPTNO , D.DNAME ;
-- 定义所需变量
V_CT NUMBER(4); -- 员工的人数
BEGIN
FOR X IN C_EMP LOOP
SELECT COUNT(*) -- 统计目标表中的部门 /数据 在源表中是否存在 ,返回 1 或者 0
INTO V_CT -- 将统计结果 赋值给 变量
FROM EMP_BAK3 -- 查询目标表
WHERE DEPTNO = X.DEPTNO; -- 判断 目标表中的部门/数据 在源表中是否存在
--- 判断 如果 部门编号 在源表的结果集中存在 那么则 更新
IF V_CT = 1 THEN
UPDATE EMP_BAK3 M
SET M.DNAME = X.DNAME, -- 部门名称
M.CT_EMPNO = X.CT , -- 部门人数
M.AVG_SAL = X.AVG_SAL, -- 部门的平均工资
M.DATA_DATE = SYSDATE -- 审计字段
WHERE M.DEPTNO = X.DEPTNO; -- 比较字段 ,条件
--- 判断 如果 部门编号 在源表的结果集中 不存在 那么则 更新
ELSIF V_CT = 0 THEN
INSERT INTO EMP_BAK3
( DEPTNO, -- 部门编号
DNAME , -- 部门名称 EPTNO
CT_EMPNO, -- 部门人数
AVG_SAL, -- 部门的平均工资
DATA_DATE -- 审计字段
)
VALUES
( X.DEPTNO /*部门编号*/
, X.DNAME /*部门名称 EPTNO*/
, X.CT /*部门人数*/
, X.AVG_SAL /*部门的平均工资*/
, SYSDATE); /*审计字段*/
END IF;
END LOOP;
COMMIT;
END SP_EMP_BAK3_CURSOR_1;
-- 调用
BEGIN
SP_EMP_BAK3_CURSOR_1(10) ;
END ;
SELECT * FROM EMP_BAK3;
----创建存储过程并记录日志,增量同步员工的 姓名,入职时间,工资,岗位,部门名称,部门地址,司龄
----分别以 全表增量 和 表的切片增量 方式实现 。
drop table emp_bak4
create table emp_bak4 as
select e.ename,e.hiredate,e.sal,e.job,d.dname,d.loc,
trunc(months_between(sysdate,hiredate)/12) as "TR_SL",
sysdate as "DATA_DATE"
from emp e
join dept d
on e.deptno = d.deptno
WHERE 1 =2 ;
select * from emp_bak4
---全表增量
CREATE OR REPLACE PROCEDURE SP_EMP_BAK4_MERGE IS
BEGIN
MERGE INTO EMP_BAK4 A
USING (SELECT E.ENAME,
E.HIREDATE,
E.SAL,
E.JOB,
D.DNAME,
D.LOC,
TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE) / 12) AS "TR_SL",
SYSDATE AS "DATA_DATE"
FROM EMP E
JOIN DEPT D
ON E.DEPTNO = D.DEPTNO) B
ON (A.ENAME = B.ENAME)
WHEN MATCHED THEN
UPDATE
SET A.HIREDATE = B.HIREDATE, -- 入职日期
A.SAL = B.SAL, -- 工资
A.JOB = B.JOB, -- 岗位
A.DNAME = B.DNAME, -- 部门名称
A.LOC = B.LOC, -- 地址
A.TR_SL = B.TR_SL, -- 司龄
A.DATA_DATE = SYSDATE -- 审计字段 ,数据更新时间
WHEN NOT MATCHED THEN
INSERT
(ENAME, -- 姓名
HIREDATE, -- 入职日期
SAL, -- 工资
JOB, -- 岗位
DNAME, -- 部门名称
LOC, -- 地址
TR_SL, -- 司龄
DATA_DATE) -- 审计字段 ,数据更新时间
VALUES
(B.ENAME, -- 姓名
B.HIREDATE, -- 入职日期
B.SAL, -- 工资
B.JOB, -- 岗位
B.DNAME, -- 部门名称
B.LOC, -- 地址
B.TR_SL, -- 司龄
SYSDATE); -- 审计字段 ,数据更新时间
COMMIT;
END SP_EMP_BAK4_MERGE;
-- 调用
BEGIN
SP_EMP_BAK4_MERGE ;
END ;
SELECT * FROM EMP_BAK4;
---切片增量
CREATE OR REPLACE PROCEDURE SP_EMP_BAK4_MERGE_1( P_DNAME VARCHAR2) IS
BEGIN
MERGE INTO EMP_BAK4 A
USING (SELECT E.ENAME, --
E.HIREDATE, --
E.SAL, --
E.JOB, --
D.DNAME, --
D.LOC, --
TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE) / 12) AS "TR_SL", --
SYSDATE AS "DATA_DATE"
FROM EMP E
JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
WHERE D.DNAME = P_DNAME ) B
ON (A.ENAME = B.ENAME)
-- 此处有注释
WHEN MATCHED THEN
UPDATE
SET A.HIREDATE = B.HIREDATE, -- 入职日期
A.SAL = B.SAL, -- 工资
A.JOB = B.JOB, -- 岗位
A.DNAME = B.DNAME, -- 部门名称
A.LOC = B.LOC, -- 地址
A.TR_SL = B.TR_SL, -- 司龄
A.DATA_DATE = SYSDATE -- 审计字段 ,数据更新时间
-- 此处有注释
WHEN NOT MATCHED THEN
INSERT
(ENAME, -- 姓名
HIREDATE, -- 入职日期
SAL, -- 工资
JOB, -- 岗位
DNAME, -- 部门名称
LOC, -- 地址
TR_SL, -- 司龄
DATA_DATE) -- 审计字段 ,数据更新时间
VALUES
(B.ENAME, -- 姓名
B.HIREDATE, -- 入职日期
B.SAL, -- 工资
B.JOB, -- 岗位
B.DNAME, -- 部门名称
B.LOC, -- 地址
B.TR_SL, -- 司龄
SYSDATE); -- 审计字段 ,数据更新时间
COMMIT;
END SP_EMP_BAK4_MERGE_1;
-- 调用
BEGIN
SP_EMP_BAK4_MERGE_1('SALES') ;
END ;
SELECT * FROM EMP_BAK4;
--作业
销售商表
销售商类型字典
客户信息表,客户类型字典:0-机构,1-个人,2-产品
交易账号表结构
资金方式字典
值 |
名称 |
1 |
普通方式 |
4 |
工行网银 |
6 |
汇付天下 |
A |
农行网银 |
AD |
民生代收付 |
AL |
浦发受托支付 |
AV |
银银平台 |
AW |
招赢通 |
B |
建行网银 |
C |
交行网银 |
G |
招行网银 |
K |
网下转账 |
M |
通联 |
N |
中行网银 |
交易信息表
新的销售商分类规则如下:
代销(销售商编号非244) |
银行 |
券商 |
|
第三方(代销除银行券以外全为第三方) |
|
直销(销售商编号为244) |
机构直销(直销渠道客户类型为机构或产品) |
电商直销(直销渠道客户类型为个人,且交易账号资金方式为非[普通]方式) |
|
柜台零售直销(直销渠道客户类型为个人,且交易账号资金方式为[普通]方式) |
|
其它直销(直销渠道且交易账号资金方式为招赢通) |
新的销售商分类字典如下:
值 |
名称 |
1 |
银行 |
2 |
券商 |
3 |
第三方 |
4 |
机构直销 |
5 |
电商直销 |
6 |
柜台零售直销 |
7 |
其它直销 |
题目:
请写出一个带参函数,用于将交易信息表中的交易按新的销售商分类进行归类,函数返回新的分类值。
从 表 (多张表) 中根据 销售商的编码 以及 销售商分类 (0 ,1,2,3,4 .. )
按照新的分类规则 返回新的 分类编号/值
-- SQL实现
SELECT
CASE /*代销业务 包含 银行 券商 第三方*/
WHEN B.销售商的编码 != '244' AND B.销售商类型 = '0' THEN '1'
WHEN B.销售商的编码 != '244' AND B.销售商类型 = '1' THEN '2'
WHEN B.销售商的编码 != '244' AND B.销售商类型 NOT IN ('0' ,'1') THEN '3'
/*直销业务 包含 机构 电商 柜台 其他 */
WHEN A.销售商的编码 = 244 THEN
CASE WHEN D.资金方式 = 'AW' THEN '7'
WHEN C.客户类型 IN (0 ,2) THEN '4'
WHEN C.客户类型 = 1 AND D.资金方式 != '1' THEN '5'
WHEN C.客户类型 = 1 AND D.资金方式 = '1' THEN '6'
ELSE '新业务_NULL'
END
ELSE '新业务_NULL'
END
INTO V_N_分类
FROM 交易信息表 A, 销售商表 B , 客户信息表 C , ,交易账号表 D -- 销售商字典 和 资金方式
WHERE A.客户编号 = C.客户编号
AND A.销售商编号 = B.销售商编号
AND A.交易账号 = D.交易账号
AND A. 客户编号 = P_客户编号
AND A.销售商编号 = P_销售商编号
AND A.交易账号 = P_交易账号 ;
---------------- 通过自定义函数实现
CREATE OR REPLACE FUNCTION FUN_新销售商分类(P_客户编号 VARCHAR2 ,
P_销售商编号 VARCHAR2
P_交易账号 VARCHAR2)
RETURN VARCHAR2
V_N_分类 VARCHAR2(5) ;
IS
BEGIN
SELECT
CASE /*代销业务 包含 银行 券商 第三方*/
WHEN B.销售商的编码 != '244' AND B.销售商类型 = '0' THEN '1'
WHEN B.销售商的编码 != '244' AND B.销售商类型 = '1' THEN '2'
WHEN B.销售商的编码 != '244' AND B.销售商类型 NOT IN ('0' ,'1') THEN '3'
/*直销业务 包含 机构 电商 柜台 其他 */
WHEN A.销售商的编码 = 244 THEN
CASE WHEN D.资金方式 = 'AW' THEN '7'
WHEN C.客户类型 IN (0 ,2) THEN '4'
WHEN C.客户类型 = 1 AND D.资金方式 != '1' THEN '5'
WHEN C.客户类型 = 1 AND D.资金方式 = '1' THEN '6'
ELSE '新业务_NULL'
END
ELSE '新业务_NULL'
END
INTO V_N_分类
FROM 交易信息表 A, 销售商表 B , 客户信息表 C , 交易账号表 D -- 销售商字典 和 资金方式
WHERE A.客户编号 = C.客户编号
AND A.销售商编号 = B.销售商编号
AND A.交易账号 = D.交易账号
AND A. 客户编号 = P_客户编号
AND A.销售商编号 = P_销售商编号
AND A.交易账号 = P_交易账号 ;
RETURN V_N_分类 ;
END FUN_新销售商分类 ;
--作业另外:
笔试题
Part1:sql语言
题目一:
表C数据如下(列c1,c2), 请编写SQL转换为下面输出格式:
SQL语句:
题目二:
客户信息表【Customer】:
CUST_ID(客户号),CUST_NAME(客户姓名),DEPT(营业部)
委托表【Orders】:
CUST_ID(客户号),ORDERID(委托编号),ORDER_SECU(股票代码);ORDER_NUM(委托数量),ORDER_PRICE(委托价格),ORDER_DATE(委托时间)
请完成以下查询:
1、查询今天所有进行过委托的客户名单,按以下格式:
格式:客户号客户名称
2、查询当天第一笔委托的客户及最后一笔委托的客户,按以下格式:
格式:第一笔委托客户名称 第一笔委托时间 最后一笔委托客户名称 最后一笔委托时间
3、查询每个客户今天委托股票的均价,按以下格式显示:
格式:客户名称 股票代码 委托均价
4、查询所有客户当中委托股票金额最大的前五支股票,按以下格式显示:
格式:排名 股票代码 委托金额
题目三:
写一个存储过程Proc_ab,实现:1)用truncate语句清空B表;2)取A表中按照客户号汇总的成交金额插入到B表
表:A (cust_no客户号 ,match_amt成交金额)
表:B (cust_no客户号 ,match_amt_total成交金额汇总)
331全量增量数据、同步ld相关推荐
- hbase集群 数据写入_Hbase实用技巧:全量+增量数据的迁移方法
摘要:本文介绍了一种Hbase迁移的方法,可以在一些特定场景下运用. 背景 在Hbase使用过程中,使用的Hbase集群经常会因为某些原因需要数据迁移.大多数情况下,可以跟用户协商用离线的方式进行迁移 ...
- Hbase实用技巧:全量+增量数据的迁移方法
摘要:本文介绍了一种Hbase迁移的方法,可以在一些特定场景下运用. 背景 在Hbase使用过程中,使用的Hbase集群经常会因为某些原因需要数据迁移.大多数情况下,可以跟用户协商用离线的方式进行迁移 ...
- 全量增量数据同步方法(Hive date_add date_sub)
全量数据与增量数据同步 1.不关心主键: a.第一次直接全量同步: insert overwrite table target select * from source b.第二次以后采用增量同步:表 ...
- java从hbase增量导出到,Hbase实用技巧:全量+增量数据的迁移方法
摘要:本文介绍了一种Hbase迁移的方法,可以在一些特定场景下运用. 背景 在Hbase使用过程中,使用的Hbase集群经常会因为某些原因需要数据迁移.大多数情况下,可以跟用户协商用离线的方式进行迁移 ...
- Elasticsearch和MySQL数据同步(logstash-input-jdbc)全量增量方式同步近千万数据
同步方案: 同步读写:最为简单的方式在将数据写到mysql时,同时将数据写到ES,实现数据的双写. 异步双写(MQ方式):MQ的性能基本比mysql高出一个数量级,所以性能可以得到显著的提高. 定时器 ...
- “全量增量” 与 “增量同步” 一文了解清楚【建议收藏】
大家在同步数据的时候都会接触到2个名词,"全量增量" 与 "增量同步" ,名字都长得差不多,但是意思和操作却不一样:比如部门领导给你方案,那我们要如何去选择其中 ...
- mysqldump备份(全量+增量)
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景: 每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备 ...
- mysqldump全量恢复_【MySQL】全量+增量的备份/恢复
生产环境中,有时需要做MySQL的备份和恢复工作.因MySQL是在运行过程中的,做全量备份需要时间,全量备份完成后又有数据变动,此时需要增量备份辅助.如果想恢复数据到一个空库(例如数据迁移或者上云等更 ...
- MySQL主从恢复(全量恢复数据)
前言 当mysql主从(一主一从模式)数据不同步,常规方式解决不掉,故全量恢复数据并同步数据. 发现问题 首先可以由mstaer status观察到主从已经未同步,其次slave status看到sl ...
最新文章
- Beta 冲刺 (7/7)
- 编程实现灰度处理函数
- 平均股价的时间序列图形_美股技术分析 神奇的九转序列
- linux下java调用python脚本,java - 在Linux Terminal中以编程方式从Java调用python脚本 - 堆栈内存溢出...
- Unable to compile class for JSP的解决方法
- Netflix推荐系统(Part two)-系统架构
- python excel详解_Python - excel 详解
- 长沙湘江科技学校计算机信息,长沙湘江科技中等职业学校简介|长沙湘江科技中等职业学校介绍...
- (进阶)LeetCode(119)——杨辉三角 II(JavaScript)
- html页面导出pdf截断问题,vue页面生成pdf且避免分页截断处理
- 上海万科地产档案室—智慧管理项目
- html手机陀螺仪,陀螺仪MEMS - 详解冷门但很重要的手机陀螺仪
- 特征图注意力_【抠图中的注意力机制】HAttMatting---让抠图变得如此简单!
- Python高速缓存和会话库——Beaker
- Kali基于字典的无线破解
- CODE RO RW ZI
- 记录:前端js实现页面内简繁体切换
- python列表两两相减_【数据分析入门】之:如何用Python代替Excel(1)
- latex 矩阵_【手把手教学】玩转LaTeX科技绘图:绘制贝叶斯网络丨城市数据派
- Qt error ------ 'XXX' has not been declared
热门文章
- [课设]烟台大学课程表app
- Android创建一个简易课程表APP
- 查看linux ftp字符集,linux 字符集及FTP传输乱码处理
- 书单推荐:各领域入门书籍推荐——文史理工艺术——程序员的自我修养
- 蓝桥杯java初赛本科组,2012年第三届蓝桥杯全国软件专业人才设计与开发大赛Java本科组初赛试题...
- 通过Fiddler(windows)抓http请求(android、浏览器)
- 微计算机的发展通常以,计算机组成原理复习材料 (2)
- 零基础能不能学插画设计?学插画需要素描吗?
- 医疗人员计算机职称考试题库,全国计算机职称考试题库.pdf
- 开封机器人餐厅_开封食品分拣机器人