填空题
- 客户的存款属于银行的 负债 (资产/负债)。
- 银行的年终结算是将 各项收入、支出、利润 科目的余额置0。
- 在oracle中将某个日期字段从YYYY-MM-DD的格式转成YYYYMMDD的格式使用转化方式为 to_char (字段,’YYYYMMDD’)
- 删除某个服务器/dw 目录下1.txt文件的前2行数据的命令为 sed -i '1,2d' /dw/1.tx
- 数据处理分为联机事物处理OLTP与 olap
简答题
- 简述oracle中loop join和hash join的使用场景。
loop join:
1. 两个表的列,进行非等值筛选;
2. 两个表的数据量,相差很大,并且表连接的列都是有索引的,这个时候的等值连接就不会变成hash join,而是会使用nl嵌套连接。
hash join:
两个表格列的等值筛选
- 贷款放款表put_info中有产品代码(prod_code)、放款日期(putout_date)、放款金额(put_amt),用一段sql统计各贷款产品每日放款金额合计及各贷款产品截止到最新放款日期累计放款金额。
Prod_code | Putout_date | Put_amt |
A | 2022/1/1 | 100 |
B | 2022/1/1 | 100 |
B | 2022/1/3 | 100 |
A | 2022/1/4 | 100 |
A | 2022/1/5 | 100 |
SELECT Prod_code,
Putout_date,
SUM(Put_amt) OVER (PARTITION BY Prod_code, Putout_date) AS Daily_Total_Amount,
SUM(Put_amt) OVER (PARTITION BY Prod_code ORDER BY Putout_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Cumulative_Amount
FROM put_info
ORDER BY Prod_code, Putout_date;
- 有还款计划表数据如下(一笔借据共分12期),用sql统计最大连续逾期期数。
结清状态:Y(结清)N(未结清)
Duebillno | Term | Bill_date | Bill_amt | Unpay_amt | Finish_date | Status |
jjh_1 | 1 | 2021/1/1 | 1000 | 0 | 2021/1/1 | Y |
jjh_1 | 2 | 2021/2/1 | 1000 | 0 | 2021/2/1 | Y |
jjh_1 | 3 | 2021/3/1 | 1000 | 1000 | N | |
jjh_1 | 4 | 2021/4/1 | 1000 | 1000 | N | |
jjh_1 | 5 | 2021/5/1 | 1000 | 1000 | N | |
jjh_1 | 6 | 2021/6/1 | 1000 | 0 | 2021/6/1 | Y |
jjh_1 | 7 | 2021/7/1 | 1000 | 0 | 2021/7/1 | Y |
jjh_1 | 8 | 2021/8/1 | 1000 | 0 | 2021/8/1 | Y |
jjh_1 | 9 | 2021/9/1 | 1000 | 0 | 2021/9/1 | Y |
jjh_1 | 10 | 2021/10/1 | 1000 | 0 | 2021/10/1 | Y |
jjh_1 | 11 | 2021/11/1 | 1000 | 0 | 2021/11/1 | Y |
jjh_1 | 12 | 2021/12/1 | 1000 | 1000 | N |
WITH cte AS (
SELECT Duebillno, Term, Status,
ROW_NUMBER() OVER (PARTITION BY Duebillno, Status ORDER BY Term) AS rn
FROM repayment_plan
)
SELECT Duebillno, MAX(rn) AS Max_Overdue_Period
FROM (
SELECT Duebillno, Term, Status,
ROW_NUMBER() OVER (PARTITION BY Duebillno ORDER BY Term) - rn AS grp
FROM cte
) t
WHERE Status = 'N'
GROUP BY Duebillno, grp;
- 现有拉链表数据如下,由于2022-01-11这天的数据错误,需要重新加载2022-01-11号数据,请用sql将拉链表数据还原到2022-01-10
Name | Bal | Eff_dt | End_dt |
张三 | 100 | 2022/1/1 | 2022/1/3 |
张三 | 90 | 2022/1/4 | 2022/1/10 |
张三 | 200 | 2022/1/11 | 9999/12/31 |
INSERT OVERWRITE INTO your_table PARTITION(Eff_dt=’ 2022/1/10’)
SELECT Name, Bal, Eff_dt, End_dt
FROM your_table
WHERE Eff_dt <= '2022/1/10'
Union
SELECT Name, Bal, Eff_dt, ‘9999/12/31’End_dt
FROM your_table
WHERE Eff_dt = '2022/1/11' and Eff_dt <> '9999/12/31'
- 一般数仓层级分为缓冲层(源系统当日抽取数据),贴源层(源系统数据的历史存储),模型层(汇总分类数据),共性层(下游公共使用或常用的指标数据),应用层(如各类集市等等),数仓的调度任务较多的情况下(超过1万个数据加工任务),请叙述下表级依赖和层级依赖的各自优缺点,并注明你的选择与理由。
表级依赖:
优点:对于简单的数据仓库环境和少量的数据加工任务,表级依赖可以更容易管理和维护。
缺点:当数据加工任务较多时,表级依赖会导致依赖关系交织复杂,难以管理。同时,当数据仓库中的数据模型发生变化时,需要手动更新所有受影响的任务,工作量较大。
层级依赖:
优点:层级依赖通过将数据加工任务按照层级进行划分,减少了任务之间的直接依赖关系,使整个数据加工过程更加结构化和清晰。当数仓中任务数量较多时,层级依赖可以更好地管理任务之间的关系。
缺点:对于简单的数据仓库环境和少量的数据加工任务,层级依赖可能显得过于繁琐.
我的选择与理由: 在数仓的调度任务较多的情况下,我会选择层级依赖。对于较大规模的数据仓库来说,它能够更好地管理任务之间的关系,使整个数据加工过程更加结构化和清晰。