一.数据库开发
1.Oracle数据库,视图与表的区别?
表是作为oracle数据库存储数据的一种数据结构,视图是从已存在表上抽出逻辑相关的数据集合,其本身和表的区别不大,都是对数据一种存储,只不过我们可以在已有表的基础上抽取一部分我们想要的数据,视图是已经编译好的sql语句。
表有实际的物理记录,视图没有,表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改,表是内模式,视图是外模式,视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构,视图的建立和删除只影响视图本身,不影响对应的基本表。
2.普通视图与物化视图的区别?
普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。
普通视图和物化视图是两个概念,说区别是放在一起让大家更好的理解,
基本概念,普通视图是不存储任何数据的,是在查询中转换为对应的定义SQL去查询,
物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,会在临时表空间内做大量的操作。
3.Oracle数据库,有哪几类索引,分别有什么特点?
(1)b-tree索引
Oracle数据库bai中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。CREATE INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。
(2)位图索引(bitmap index)
位图索引特定于该列只有几个枚举值的情况,比如性别字段,标示字段比如只有0和1的情况。
(3)基于函数的索引
比如经常对某个字段做查询的时候是带函数操作的,那么此时建一个函数索引就有价值了。
(4)分区索引和全局索引
这2个是用于分区表的时候。前者是分区内索引,后者是全表索引
(5)反向索引(REVERSE)
这个索引不常见,但是特定情况特别有效,比如一个varchar(5)位字段(员工编号)含值(10001,10002,10033,10005,10016..)这种情况默认索引分布过于密集,不能利用好服务器的并行,但是反向之后10001,20001,33001,50001,61001就有了一个很好的分布,能高效的利用好并行运算。
(6)HASH索引
HASH索引可能是访问数据库中数据的最快方法,但它也有自身的缺点。集群键上不同值的数目必须在创建HASH集群之前就要知道。需要在创建HASH集群的时候指定这个值。使用HASH索引必须要使用HASH集群。
4.Union与Union All的区别?
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
5.对游标的理解?游标的分类?使用方法?
(1)概念:
可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标可以被看作是一个查询结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成的一个临时文件,提供了在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。有了游标,用户就可以访问结果集中任意一行数据,在将游标放置到某行之后,可以在该行或从该位置的行块上执行操作。
(2) 游标分为两种类型:显式游标和隐式游标
显式游标:如果要提取多行数据,需要定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句。
隐式游标:简单的DML操纵语句和单行查询语句会使用隐式游标,这些语句分别是插入insert语句,更新update语句,删除delete语句,单行select查询语句。
(3)游标的使用:
隐式游标的使用主要就是简单的DML操纵语句和单行查询语句
显示游标的声明和使用cursor cursor_name[ 参数1 参数类型,参数2,参数类型…] is select 语句;
游标的使用步骤:
1.声明一个游标
2.打开游标 open 游标名(参数1,参数2…);
3.使用循环遍历游标,从游标中取值。fetch 游标名 into 变量名,循环的退出条件是 游标名%notfound;
4.关闭游标 close 游标名;
6.如何查找和删除表中的重复数据?给出方法或SQL。
方法:分组统计数据,大于1的都是重复数据
SQL:group by 字段 having count(1)>1;
7.不借助第三方工具,怎么查看SQL的执行计划?
oracle里是explain plan
mysql和postgresql里是explain
8.创建索引有哪些需要注意的要点?
(1)表的主键、外键必须有索引;
(2)数据量超过300的表应该有索引;
(3)经常与其他表进行连接的表,在连接字段上应该建立索引;
(4)经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
(5)索引应该建在选择性高的字段上;
(6)索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
(7) 创建复合索引时要注意顺序问题。即索引的顺序和where后字段的顺序应该保持一致
(8)频繁进行数据操作(插入、删除、修改)的表,不要建立太多的索引;
(9)删除无用的索引,避免对执行计划造成负面影响;
9.Oracle数据库中,有哪几种分区?各自特点是什么?作用是什么?
(1)范围分区:范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。
(2)列表分区:该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
(3)散列分区:这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。
(4)组合范围散列分区:这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。
(5)复合范围散列分区:这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。
10.Oracle数据库中,分区索引的分类和作用?
(1)本地前缀分区索引:本地指索引的分区方法与对应表的分区方法一样;前缀指分区字段是索引字段的前缀。作用:提高查询性能;当某个分区进行drop 或 merge后、Oracle自动对所对应的索引分区进行相同的操作; 整个本地前缀分区索引依然有效、无须rebuild; 这样大大保证了表的可用性。
(2)本地非前缀分区索引:非前缀要按照索引扫描所有的分区、性能可能更低,但是它能够保证按索引访问的可用性。作用:如果历史数据整理非常频繁、而且不能承受全局分区索引重建的长时间带来的索引不可用,同时日常交易性能尚能接受、则建议设计为本地非前缀分区索引。
(3)全局分区索引:是指该索引的分区与表的分区无关。 作用:主要体现在数据的高可用性方面,当DROP分区后、全局分区索引则全部INVALID、除非REBULID,但数据量越大、重建索引的时间越长。
11.表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql。
select * from
(
select
c.*
,rownum as rn
from (select * from t order by c desc) c
)
where 1=1
and rn between 21 and 30;
12.备份如何分类?
物理备份:对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。
逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP,数据泵(EXPDP),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份。
13.归档是什么含义?
日志模式并自动归档就相当重要了,因为,这是保证系统的安全性,有效预防灾难的重要措施。这样,通过定时备份数据库和在两次备份间隔之间的日志文件,可以有效的恢复这段时间的任何时间点的数据,可以在很多时候挽回或最大可能的减少数据丢失。
14.如果系统现在需要在一个很大的表上创建一个索引,需要考虑那些因素,如何做到尽量减小对应用的影响?
(1) 为什么需要创建索引,即索引创建的之后的性能是否能够提升
(2) 创建什么样的索引,即索引的类型
(3) 创建索引的影响,此时需要了解索引的创建过程,以及如果优化索引的创建效率以减少对业务的影响
(4)什么时候创建索引
(5) 有没有其他方式来替代这个过程
15.海量数据处理常用方法
(1)Hash法:在处理海量数据的过程中,使用Hash方法一般可以快速存取、统计某些数据,将大量数据进行分类,例如提取某日访问网站次数最多的ip。
(2)BitMap法:BitMapde(位图)法的时间复杂度为O(n),比一般的排序都快,但它是以空间换时间,而且又一些限制,即数据状态不是很多,例如排序前集合大小最好已知,而且集合中元素的最大重复次数必须已知。
(3)Bloom Filter 法(适用于对低错误率可以容忍的场合):Bloom Filter是一种空间效率和时间效率都很高的随机数据结构,可用来检测一个元素是否属于一个集合。其基本原理是位数组与Hash函数的联合使用。首先,Bloom Filter是一个包含m位的位数组,数组的每一位都初始化为0;其次定义k个不同的hash函数,每个函数都可以将集合中的元素映射到位数组中的某一位,这样k个hash函数就将某个元素映射到了位数组中的k个位。查询的时候,根据k个hash函数可以得到数组中的k个位,判断这个k个位是否全为1,若是则说明该元素可不存在。插入的时候,把k个hash函数就将某个元素映射到了位数组中的k个位全部置为1。
(4)数据库优化法:常见的数据库优化方法有数据分区、索引、缓存机制、分批处理、优化查询语句、使用采样数据进行数据挖掘等。
(5)倒排索引法:倒排索引是目前搜索引擎公司对搜索引擎最常用的存储方式,也是搜索引擎的核心内容。按照关键字建立索引,关键字指向了包含它的文档。优点是在处理复杂的多关键字时,可在倒排表中完成查询的并、交等逻辑运算,得到结果后再对结果进行存取,这样把记录的查询转换为地址集合的运算,不必对每个记录随机存取,从而提高查找速度。
(6)外排序法:外排序是相对于内部排序而言的,它是大文件的排序,由于内存限制,不能一下子把所有的待排内容都读到内存中进行排序,需要在内存和外部存储器之间进行多次数据交换才能达到对整个文件进行排序的目的。外排序适用于大数据的排序以及去重,但外排序的缺陷是回消耗大量的IO,效率不高。
(7)Trie树:Trie树是一种用于快速字符串检索的多叉树结果,原理是利用字符串的公共前缀来减少空间开销。经常被搜索引擎系统用于文件词频统计。优点是:最大限度地减少无谓的字符串比较,查询效率比散列表高。适合用于数据量大,重复多,但是数据种类小可以放入内存的情况。
(8)堆:最大堆求求前k小;最小堆求前k大,双堆求中位数。
(9)双层桶法:双层桶不是一种数据结构,而是一种算法思想,类似于分治思想。因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。桶排序一般适用于寻找第k个大的数,寻找中位数、寻找不重复或重复的数字。
(10)MapReduce法:MapReduce是云计算的核心技术之一,是一种简化并行计算的分布式编程模型,主要目的是为了大型集群的系统能在大数据集上进行并行工作,并用于大规模数据的并行运算。海量数据处理的最大难题在于数据规模巨大,使得传统处理方式面临计算能力不和存储能力不足的瓶颈问题,而基于Hadoop可以非常轻松和方便完成处理海量数据的分布式并行程序,并运行与大规模集群上。
二.模型设计
1.有哪几种模型设计方法?特点分别是什么?
2.模型设计的步骤?
3.维度模型的设计方法?
4.模型设计的思路?业务需求驱动?数据驱动?
5.模型设计经验说明。在概念模型设计、逻辑模型设计以及物理模型设计几个阶段主要的工作是什么?
三.数据仓库设计
1.增量数据获取方案?
(1)基于时间戳:以某个时间字段为条件,检出新增数据。
(2)触发器:数据更新时通过触发器拷贝数据。
(3)从redo日志抽取:Oracle可以通过LogMiner从日志中分析出SQL语句,再还原。SQL Server也有类似解决方法。
(4)全表对比:对性能的影响比较大,不适用数据量很大的情况
2.请解释以下概念:数据集市、事实表、维度表、OLAP
(1)数据集市:数据集市也叫数据市场,是一个从操作的数据和其他的为某个特殊的专业人员团体服务的数据源中收集数据的仓库。从范围上来说,数据是从企业范围的数据库、数据仓库,或者是更加专业的数据仓库中抽取出来的。数据中心的重点就在于它迎合了专业用户群体的特殊需求,在分析、内容、表现,以及易用方面;数据集市是企业级数据仓库的一个子集,他主要面向部门级业务,并且只面向某个特定的主题。为了解决灵活性和性能之间的矛盾,数据集市就是数据仓库体系结构中增加的一种小型的部门或工作组级别的数据仓库。数据集市存储为特定用户预先计算好的数据,从而满足用户对性能的需求。数据集市可以在一定程度上缓解访问数据仓库的瓶颈。
(2)事实表:表格里存储了能体现实际数据或详细数值,一般由维度编码和事实数据组成;发生在某个时间点上的一个事件。比如以订单为例:下单是一个事实、付款是一个事实、退款是一个事实,所有事实的累计就是事务事实表
(3)维度表:表格里存放了具有独立属性和层次结构的数据,一般由维度编码和对应的维度说明;是从事实表中抽离出来的分析粒度,在数据建模时,最好是分清事实表和维度表,对于后期的分析思路以及模型理解非常重要,也会降低信息冗余,提升运算速度。
(4)OLAP:联机分析处理,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。在这样的系统中,语句的执行量不是考核标准,因为一条语句的执行时间可能会非常长,读取的数据也非常多。所以,在这样的系统中,考核的标准往往是磁盘子系统的吞吐量(带宽),如能达到多少MB/s的流量。
3.元数据管理在数据仓库中的运用有何心得?
(1)元数据功能
血缘分析:向上追溯元数据对象的数据来源。
影响分析:向下追溯元数据对象对下游的影响。
同步检查:检查源表到目标表的数据结构是否发生变更。
指标一致性分析:定期分析指标定义是否和实际情况一致。
实体关联查询:事实表与维度表的代理键自动关联
(2)元数据应用
ETL自动化管理:使用元数据信息自动生成物理模型,ETL程序脚本,任务依赖关系和调度程序。
数据质量管理:使用数据质量规则元数据进行数据质量测量。
数据安全管理:使用元数据信息进行报表权限控制。
数据标准管理:使用元数据信息生成标准的维度模型。
数据接口管理:使用元数据信息进行接口统一管理。
4.数据仓库系统的数据质量如何保证?方案?
1、从技术层面我们需要构建一套高效、健壮的ETL程序去保证数据清洗、转换后数据的正确性和一致性
2、从流程上来说整个ETL是多个任务,按步骤顺序执行的一个过程,后置任务依赖前置任务,定期执行,,整个流程需要自动化,并且哪个环节出现了问题,给予预警,通知相关维护人员及时处理
3、从管理层面上来说,数据仓库是构建在公司各个业务系统之上,它是一面镜子,很多时候它能反映出业务系统的问题,所以需要管理层的支持和约束,比如通过第一条说的事后自动检验机制反映出业务系统的维护错误,需要相应的业务系统维护人员及时处理。