面试问题总结: 1、三范式: 一范式:所有字段值都是不可分解的原子值,即不能同行同列出现两个值; 二范式:满足第一范式为前提,一定要有主属性键,且每一列都和主键相关, 而不能只与主键的某一部分相关; 三范式:满足第二范式为前提,每一列数据都和主键直接相关,而不能间接相关。 2、hive创建文档命令: create database(创建数据库) 3、拉链表:保存历史数据变化的表; 4、除数为零:一般是分母为零才会出现这种情况,利用case语句,或利用nullif函数再利用isnull函数(null与任何数进行任何运算,其结果都等于null,利用这点) 5、主键冲突:检查要插入的数据是否有重复值; 6、存储过程模板是放在哪里?放在svn 7、ETL常用的三种工具(Datastage,Informatica,Kettle); 8、DW和DM层的区别以及建表原则: DW层主要是从贴源层取出我们需要的数据按照事实和维度进行建模; 建模原则:不做清洗转换处理,为支持数据重跑可额外增加数据业务日期字段, 可按年份进行分表,用那个增量ODS层数据和前一天DW相关表进行merge处理; 而DM主要是做数据分析和报表数据展示,建模原则是尽量减少数据访问时计算; (建设的原则是保证放入的数据的完整性、准确性,字段不能缺少,还要加上审计字段, 还有设计好主键。并编写同步用的存储过程。如果后期这个表没设计好,少了字段,需要进行变更,就是修改。) 9:如何去重:如果数据量大,使用ROWID删除重复的方式直接去重;如果数据量更大的话就使用DDL; 10:行列转换:列转行 用分析函数lead/lag或者用DECODE;行专列:将结果集命名为A,把A行转列 11:如果有一个10亿数据怎么插入? 往一张大表插入数据,看下目标表有没有索引,有的话在插入数据之前先将索引失效, 因为索引会影响性能,插入完成后再创建索引; 同时会分批插入;如果上亿行数据可以用循环进行批量插入,2各循环嵌套; 12:系统有那些模块? 13:索引失效怎么办? 看一下where条件的等号左侧中是否使用函数, where条件中有or,需将or中的每个字段都加上索引 在查询中使用 !=、not in、not exists 14:游标的定义方式: (声明:CURSOR IS)分显式游标和隐式游标两种 15:如何去订单表里面最近的一条数据? Max最大日期 16:写过最复杂的语句是什么? 计算跳失率? 17:关联用where和ON的区别? 18:维护一般维护什么? 每天检查报表看有没有问题,有没有用户投诉(一般是运维干的事) 19:如何在大数据文件夹里面把A的姓名替换成B? 很麻烦,把文件删掉重新导数再放进去; 20:给你一张表,如何只显示重复值? (??group by?,having count(*) >1;?partition ?by,where ?rn>1; 21:数据倾斜怎么搞? A:key 分布不均匀B:业务数据本身的特性 C:建表考虑不周全D:某些 HQL 语句本身就存在数据倾斜 22:表分区 23:怎么把hive表中数据更新到oracle? 使用sqoop导出数据到Oracle中 24:锁表 查看:select * from v$locked_object 增删改查没有用COMMIT;