hive面试题总结2020_jvm面试题总结及答案

hive面试题总结2020_jvm面试题总结及答案Hive

Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行,所以说 Hive 是基于Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在HDFS 中的数据进行分析和管理。

一、Hive 架构

hive面试题总结2020_jvm面试题总结及答案

用户接口:CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)

元数据:元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。

Hadoop:使用 HDFS 进行存储,使用 MapReduce 进行计算

驱动器:主要包含以下几类:

        a.解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
        b.编译器(Physical Plan):将AST编译生成逻辑执行计划。
        c.优化器(Query Optimizer):对逻辑执行计划进行优化。
        d.执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

Hive解析成MR的过程:

       Hive通过给用户提供一系列交互接口,接收到用户的指令(sql语句),结合元数据(metastore),经过Driver内的解析器,编译器,优化器,执行器转换成mapreduce(将sql转换成抽象语法树AST的解析器,将AST编译成逻辑执行计划的编译器,在对逻辑执行计划进行优化的优化器,最后将逻辑执行计划转换成mapreduce),提交给hadoop中执行,最后将执行返回的结果输出到用户交互接口。

二、Hive与传统数据库的区别

由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。

1.查询语言:由于 SQL被广泛的应用在数据仓库中,因此,专门针对 Hive的特性设计了类 SQL的查询语言 HQL。

2.数据存储位置:Hive 是建立在 Hadoop之上的,所有 Hive的数据都是存储在HDFS中的。
数据库则可以将数据保存在块设备或者本地文件系统中。

3.数据格式:Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive中默认有三个文件格式 TextFile,SequenceFile以及 RCFile)。

4.数据更新:由于 Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO … VALUES添加数据,使用 UPDATE … SET修改数据。

5.索引:Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapReduce的引入, Hive可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive仍然可以体现出优势。 数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive不适合在线数据查询。

6.执行:Hive 中大多数查询的执行是通过 Hadoop提供的 MapReduce来实现的(类似 select * from tbl的查询不需要 MapReduce)。
数据库通常有自己的执行引擎。

7.执行延迟:之前提到,Hive在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive执行延迟高的因素是 MapReduce框架。由于 MapReduce本身具有较高的延迟,因此在利用 MapReduce执行 Hive 查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。

8.可扩展性:由于 Hive是建立在 Hadoop之上的,因此 Hive的可扩展性是和 Hadoop的可扩展性是一致的。数据库由于 ACID语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle在理论上的扩展能力也只有 100台左右。

9.数据规模:由于Hive建立在集群上并可以利用 MapReduce进行并行计算,因此可以支持很大规模的数据;数据库可以支持的数据规模较小。

三、Hive 数仓层级,为什么要对数据仓库分层

数据仓库标准上可以分为三层:ODS(原始数据层)、DW(数据仓库层)、ADS(应用层)。

原始日志层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。

数据仓库层(DW):也称为细节层,DW 层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。

        DWD(数据明细层):存储明细数据,此数据是最细粒度的事实数据。该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。

        DWM(中间层):存储中间数据,为数据统计需要创建的中间表数据,此数据一般是对多个维度的聚合数据,此层数据通常来源于DWD层的数据。
        DWS(轻度聚合层):存储宽表数据,此层数据是针对某个业务领域的聚合数据,业务层的数据通常来源与此层,为什么叫宽表,主要是为了业务层的需要在这一层将业务相关的所有数据统一汇集起来进行存储,方便业务层获取。此层数据通常来源与DWD和DWM层的数据。

       ( 注:在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。)
应⽤层(ADS):前端应用直接读取的数据源;根据报表、专题分析的需求而计算生成的数据。

维表层(Dimension):最后补充一个维表层,维表层主要包含两部分数据:

        a.高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别.

        b.低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万.

数仓分层带来的好处:

1.每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解;

2.减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算;

3.统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径;

4.复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题。

四、内部表和外部表

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table)

1.内部表数据由Hive自身管理,外部表数据由HDFS管理;
2.内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);
3.删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
4.对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

 使用场景:

1.外部表在删除时不会清理HDFS上的数据,所以相对较安全,同时由于其指定目录的特性,在跨部门合作中经常用到。所以不小心删除外部表后,可以创建一个新表指定到(location ‘/hive/external_table/’)这个位置,那么数据就会恢复。

2.对于一些原始日志文件,同时被多个部门同时操作的时候就需要使用外部表,如果不小心将meta data删除了,HDFS上 的data还在可以恢复,增加了数据的安全性。

五、Hive中的视图

Hive 中的视图和 RDBMS 中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条 SELECT 语句的结果集。视图是纯粹的逻辑对象,没有关联的存储 ,当查询引用视图时,Hive才将视图的定义与查询结合起来。视图可以简化复杂的查询。

注意:
1.创建视图时,如果未提供列名,则将从 SELECT 语句中自动派生列名;
2.视图是只读的,不能用作 LOAD / INSERT / ALTER 的目标;
3.删除基表并不会删除视图,需要手动删除视图;

六、Hive分区和分桶

分区:hive里分区的概念是根据“分区列”的值对表的数据进行粗略划分的机制,在hive存储上就体现在表的主目录(hive的表实际显示就是一个文件夹)下的一个子目录,这个文件夹的名字就是我们定义的分区列的名字,没有实际操作经验的人可能会认为分区列是表的某个字段,其实不是这样,分区列不是表里的某个字段,而是独立的列,我们根据这个列存储表的里的数据文件。使用分区是为了加快数据分区的查询速度而设计的,我们在查询某个具体分区列里的数据时候没必要进行全表扫描。

分桶:table和partition都是目录级别的拆分数据,bucket则是对数据源数据文件本身来拆分数据。使用桶的表会将源数据文件按一定规律拆分成多个文件,要使用bucket。物理上,每个桶就是表(或分区)目录里的一个文件,桶文件是按指定字段值进行hash,然后除以桶的个数(创建的时候设置),最后去结果余数,因为整数的hash值就是整数本身。单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用分桶技术将数据更细粒度的划分和管理。

我们首先要打开hive对桶的控制,命令如下:

set hive.enforce.bucketing = true

分桶的好处:

1、为了保存分桶查询结果的分桶结构(数据已经按照分桶字段进行了hash散列)
2、分桶表数据进行抽样和JOIN时可以提高MR程序效率

注意:
1、分区使用的是表外字段,分桶使用的是表内字段
2、分桶是更细粒度的划分、管理数据,更多用来做数据抽样、JOIN操作

七、Hive UDF

常见自定义函数

UDF:User-Defined-Function,用户自定义函数,一对一的输入输出。(最常用的)。

UDTF:User-Defined Table-Generating Functions,用户自定义表生成函数。一对多的输入输出,比如 lateral view explore()

UDAF:User-Defined Aggregation Function,用户自定义聚合函数,多进一出,比如 count/max/min。

用UDF函数解析公共字段,用UDTF函数解析事件字段

自定义UDF:继承UDF,重写evaluate方法

自定义UDTF:继承GenericUDTF,重写3个方法,initialize(自定义输出的列名和类型),process(将结果返回forward(result)),close

八、Hive 存储格式

Hive 中的存储格式有TextFile、SequenceFile、RCfile 、ORCfile

1.TextFile:默认格式, 存储方式为行存储,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,压缩后的文件不支持split,Hive不会对数据进行切分,从而无法对数据进行并行操作。并且在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍。

2.SequenceFile:SequenceFile是Hadoop API提供的一种二进制文件支持, 存储方式为行存储,其具有使用方便、可分割、可压缩的特点

SequenceFile支持三种压缩选择: NONE , RECORD , BLOCK 。Record压缩率低, 一般建议使用BLOCK压缩

优势是文件和hadoop api中的MapFile是相互兼容的

3.RCFile:存储方式: 数据按行分块,每块按列存储。结合了行存储和列存储的优点:

首先,RCFile 保证同一行的数据位于同一节点,因此元组重构的开销很低;

其次,像列存储一样,RCFile 能够利用列维度的数据压缩,并且能跳过不必要的列读取;

4.ORCFile:存储方式:数据按行分块每块按照列存储。压缩快、快速列存取。效率比rcfile高,是rcfile的改良版本。

总结:

1.相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应

2.数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势

九、行式存储&列式存储

行式存储:数据按照行数据为基础单元进行组织存储

优点:

        具有随机写入优势,特别是频繁写和更新操作。对于写入的每条记录,只需要内存拼接好整行记录,一次性写入到磁盘块中,单挑记录数量年小于单个磁盘块就只需要1次IO操作。

缺点:

        a.读取冗余。在查询操作中计算机是按照磁盘块为基本单位进行读取,同一个磁盘块中其他记录也需要读取。然后加载至内存,在内存中进行过滤处理。即使查询只涉及少数字段,也需要读取完整的行记录。(行存储数据会引入索引和分库分表技术来避免全量读取)

        b.数据压缩。每行数据有不同类型数据,数据压缩率较低。

列式存储:数据按照列为单元进行集中存储。同一列的数据顺序存储在同一个磁盘块中,其他列同样集中顺序存储。顺序写在前列后面或单独一个文件。

优势:

        1.大量查询操作优势。对于目标查询,列存只需要返回目标列的值。而且列值在磁盘中集中存储,会减少读取磁盘块的频次,较少IO的数量。最后再内存中高效组装各列的值,最终形成查询结果。另外列式记录每一列数据类型同质,容易解析。每列存储是独立的可以并发处理,进一步提升读取效率。
        2.数据压缩优势。因为各列独立存储,且数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,以提高物理存储利用率。如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值,这将比行式存储更节省空间。整体上减轻IO的频次。
        3.映射下推(Project PushDown)、谓词下推(Predicate PushDown)。可以减少不必要的数据扫描,尤其是表结构比较庞大的时候更加明显,由此也能够带来更好的查询性能

缺点:

        写入更新短板。列式存储写入前需要将一条记录拆分成单列,分别追加写入到列所在的磁盘块中,如果列比较多,一条记录就会产生多次磁盘块的IO操作。对于实时的逐条写入性能会比行式弱。

但是对于大量的批写入,列可以在内存中拆分好各分列,然后集中写入,性能和行式数据比不一定差。

业务场景适应性分析( https://blog.csdn.net/rongxiang20054209/article/details/115287848)

        联机事物处理(OLTP)、联机分析处理(OLAP)分别适合于行式存储、列式存储数据库。实际选型时,在时间允许的前提下,需要深入了解业务场景的特点,进行场景模拟测试后,根据评测结果最终选择合适的数据库。例如在联机分析处理场景中,如果大量的查询是读取的记录中的大多数或所有字段,主要由单条记录查询和范围扫描组成,则面向行的存储布局的数据库会更适合。

十、Hive动态分区

hive 可以通过分区字段减少数据查询范围,避免全表扫描,提高查询速度和性能的。Hive 的分区主要有两种:静态分区 和 动态分区

静态分区

        Hive的静态分区,实际上就是手动指定分区的值为静态值,这种对于小批量的分区插入比较友好。

动态分区

        当往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。

动态分区表的属性

使用动态分区表必须配置的参数 :

        set hive.exec.dynamic.partition =true(默认false),表示开启动态分区功能
        set hive.exec.dynamic.partition.mode = nonstrict(默认strict),表示允许所有分区都是动态的,否则必须有静态分区字段

动态分区相关的调优参数:

        set  hive.exec.max.dynamic.partitions.pernode=100 (默认100,一般可以设置大一点,比如1000)表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错。

        set hive.exec.max.dynamic.partitions =1000(默认值) 表示一个动态分区语句可以创建的最大动态分区个数,超出报错

        set hive.exec.max.created.files =10000(默认) 全局可以创建的最大文件个数,超出报错。

十一、Hive 行转列

行转列

关键函数:

1.collect_set()、collect_list():
        collect_set( )函数只接受基本数据类型,作用是对参数字段进行去重汇总,返回array类型字段;
        collect_list()函数和collect_set( )作用一样,只是前者不去重,后者去重。
2.concat_ws():
concat_ws (separator, 字符串A/字段名A, 字符串B/字段名B… )是concat的特殊形式,第一个参数是分隔符,分隔符会放到要连接的字符串之间,分隔符可以是字符串,也可以是其他参数。如果分隔符为NULL,则结果为NULL,函数会忽略任何分隔符参数后的 NULL值。但是concat_ws( )不会忽略任何空字符串。(然而会忽略所有的 NULL),如果参数为string类型数组则合并数组内字符串。
例:concat_ws( ‘,’, [ ‘a ‘, ‘b’])–> ‘a,b’

行转列基本语法:

select 分类字段,concat_ws(‘,’,collect_set(合并字段))  as 别名 from table_name group 分类字段;

/* 原始数据
name       gender          times
张三         男            唐
李四         男            唐
王五         男            明
赵六         男            明
*/

-- 先用collect_set将列拼接在一起,然后再通过concat_ws进行展开拼接
SELECT 
    a.gender_times, concat_ws(';',collect_set(a.name)) name
FROM
(
    SELECT 
        name, concat(gender, '_','times') gender_times
    FROM hero_info
) tmp
GROUP BY t.gender_times

/*查询结果
gender_times    name    
男_唐     张三;李四
男_明     王五;赵六

列转行

关键函数:

1.split: 将一个字符串按照指定字符分割,结果为一个array;
2.explode: 将一列复杂的array或者map拆分为多行,它的参数必须为map或array;
3.lateral view: lateral view udtf(字段名)表别名/表临时名as列别名/列临时名。lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateralview再把结果组合,产生一个支持别名表的虚拟表。

列转行基本语法:

select  字段,字段别名  from table_name lateral view explode(split(拆分字段,分隔符))表别名 as 字段别名;

/*原始数据
province       city
河南           郑州市,开封市,洛阳市
河北           石家庄市,保定市
湖南           长沙市,岳阳市,常德市
*/

-- addr为表名
SELECT
    province, city_n
FROM addr 
LATERAL VIEW explode (split(city,',')) addr_tmp AS city_n

/*
-- 查询结果
河南      郑州市
河南      开封市
河南      洛阳市
河北      石家庄市
河北      保定市
湖南      长沙市
湖南      岳阳市
湖南      常德市
*/

十二、Lateral view 是否会产生shuffle

不会,看执行计划就会发现,没有reduce任务。这里的Join代表的是两份数据联接到一起的意思,并不是真正的意义上的join。参考( 你真的了解Lateral View explode吗?–源码复盘 – 知乎)

十三、order by、sort by、cluster by 区别

order by:对数据进行全局排序,只有一个reduce工作
sort by:每个mapreduce中进行排序,一般和distribute by使用,且distribute by写在sort by前面。当mapred.reduce.tasks=1时,效果和order by一样
distribute by:类似MR的Partition,对key进行分区,结合sort by实现分区排序
cluster by:当distribute by和sort by的字段相同时,可以使用cluster by代替,但cluster by只能是升序,不能指定排序规则

十四、开窗函数 over()

over()窗口函数的语法结构

分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置)

注:我们在使用over()窗口函数时,over()函数中的这三个函数可组合使用也可以不使用。

over()函数中的三个函数讲解

        1.order by:order by是排序的意思,是该窗口中的
        2.partition by:partition by可理解为group by 分组。over(partition by 列名)搭配分析函数时,分析函数按照每一组每一组的数据进行计算的。

        3.rows between 开始位置 and 结束位置:是指定窗口范围,比如第一行到当前行。而这个范围是随着数据变化的。over(rows between 开始位置 and 结束位置)搭配分析函数时,分析函数按照这个范围进行计算的。

窗口范围说明:
我们常使用的窗口范围是ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示从起点到当前行),常用该窗口来计算累加。

PRECEDING:往前

FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点(一般结合PRECEDING,FOLLOWING使用)
UNBOUNDED PRECEDING 表示该窗口最前面的行(起点)
UNBOUNDED FOLLOWING:表示该窗口最后面的行(终点)

比如说:
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示从起点到当前行)
ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING(表示往前2行到往后1行)
ROWS BETWEEN 2 PRECEDING AND 1 CURRENT ROW(表示往前2行到当前行)
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING(表示当前行到终点)

over()函数中如果不使用这三个函数,窗口大小是针对查询产生的所有数据,如果指定了分区,窗口大小是针对每个分区的数据。

1.over() 默认此时每一行的窗口都是所有的行

select *,count(1) over() from business;

hive面试题总结2020_jvm面试题总结及答案

 2.over(order by orderdate):orderdate=1 的窗口只有一行,orderdate=2的窗口包括orderdate=2017-01-01, orderdate=2017-01-02

hive面试题总结2020_jvm面试题总结及答案

3.over(partition by name)每一行根据 name来区分窗口 

select *,sum(cost) over(partition by name) from business;

hive面试题总结2020_jvm面试题总结及答案

4.over(partition by name order by id) 每一行根据 name来区分窗口,再根据order by 取具体的范围 

select *,sum(cost) over(partition by name order by orderdate) from business;

hive面试题总结2020_jvm面试题总结及答案

hive over窗口函数的使用 – 彬在俊 – 博客园

十五、row_number、rank、dense_rank的区别

都有对数据进行排序的功能

row_number():对相等的值不进行区分,相等的值对应的排名相同,序号从1到n连续

rank():相等的值排名相同,但若有相等的值,则序号从1到n不连续,若有两个人都排在第三名,则没有第4名

dense_rank():对相等的值排名相同,但序号从1到n连续,如果又两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人

十六、Hive导入数据的五种方式

1. Load方式,可以从本地或HDFS上导入,本地是copy,HDFS是移动

        本地:load data local inpath ‘/root/student.txt’ into table student;
        HDFS:load data inpath ‘/user/hive/data/student.txt’ into table student;

2. Insert方式,往表里插入

        insert into table student values(1,’zhanshan’);

3. As select方式,根据查询结果创建表并插入数据

        create table if not exists stu1 as select id,name from student;

4. Location方式,创建表并指定数据的路径

        create external if not exists stu2 like student location ‘/user/hive/warehouse/student/student.txt’;

5. Import方式,先从hive上使用export导出在导入

        import table stu3 from ‘/user/export/student’;

十七、Hive导出数据的五种方式

1. Insert方式,查询结果导出到本地或HDFS

        Insert overwrite local directory ‘/root/insert/student’ select id,name from student;
        Insert overwrite directory ‘/user/ insert /student’ select id,name from student;

2. Hadoop命令导出本地

        hive>dfs -get /user/hive/warehouse/student/ 000000_0  /root/hadoop/student.txt

3. hive Shell命令导出

        $ bin/hive -e ‘select id,name from student;’  > /root/hadoop/student.txt

4. Export导出到HDFS

        hive> export table student to ‘/user/export/student’;

5. Sqoop导出

十八、Hive 常用函数

coalesce:非空查找函数

collect_list:集合不去重函数

collect_set:集合去重数

concat_ws:带分隔符字符串连接函数(数组转换成字符串的函数)

substr、substring:字符串截取函数

str_to_map:字符串转换成 map 函数

regexp_replace:正则表达式替换函数

regexp_extract:正则表达式解析函数

get_json_object:json 解析函数

explode:数组拆分成多行、Map 拆分成多行

parse_url:URL 解析函数

from_unixtime:UNIX 时间戳转日期函数

unix_timestamp:日期转 UNIX 时间戳函数

date_add:日期增加函数

date_sub:日期减少函数

十九、星型模型和雪花模型区分

星形模式(Star Schema)是最常用的维度建模方式。星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。星形模式的维度建模由一个事实表和一组维表成,且具有以下特点:

a. 维表只和事实表关联,维表之间没有关联;

b. 每个维表主键为单列,且该主键放置在事实表中,作为两边连接的外键

c. 以事实表为核心,维表围绕核心呈星形分布

hive面试题总结2020_jvm面试题总结及答案

雪花模式(Snowflake Schema)是对星形模式的扩展。雪花模式的维度表可以拥有其他维度表的,虽然这种模型相比星型更规范一些,但是由于这种模型不太容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能比星型模型要低。

hive面试题总结2020_jvm面试题总结及答案

星座模式是星型模式延伸而来,星型模式是基于一张事实表的,而星座模式是基于多张事实表的,而且共享维度信息。前面介绍的两种维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到。在业务发展后期,绝大部分维度建模都采用的是星座模式。

hive面试题总结2020_jvm面试题总结及答案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处: https://ispacesoft.com/66413.html

(0)
思创斯忠实用户-ss思创斯忠实用户-ss
0 0

相关推荐

  • 安利一款免费、开源、实时的服务器监控工具:Netdata

    安利一款免费、开源、实时的服务器监控工具:Netdata

    安利一款免费、开源、实时的服务器监控工具:NetdataNetdata是一个免费、开源、实时的服务器监控工具,可以可视化和监控实时数据,如CPU使用率、RAM使用率、负载、SWAP使用率、带宽使用率、磁盘使用率等。它可以帮助系统管理员了解您的系统或应用程序中正在发生的事情以及刚刚发生的事情。它可以安装在任何物理服务器、虚拟机、容器和物联网设备上。它提供了一个交互式Web界面来查看您的服务器指标,并支持用于持久存储的各种数据存储。在本教程中,我们将向您展示如何在AlmaLinux8上安装Netdata监控工具。先决条件运行Alm

    思创斯忠实用户-ss 思创斯忠实用户-ss
    2022年11月26日
  • 犀牛入门教程_rhino7教程[通俗易懂]

    犀牛入门教程_rhino7教程[通俗易懂]

    犀牛入门教程_rhino7教程[通俗易懂]文章浏览阅读1w次,点赞2次,收藏20次。犀牛Rhino教程合集37部教程说明:英文视频教程,部分有中文字幕,大部分有工程文件教程格式:Flv、MP4格式,大部分高清,确保能看清软件上的文字发货方式:百度网盘下载链接(教程较多,可转存到自己

    思创斯忠实用户-ss 思创斯忠实用户-ss
    2023年11月29日
  • wireshark安装指南_wireshark安装使用教程

    wireshark安装指南_wireshark安装使用教程

    wireshark安装指南_wireshark安装使用教程一、官网下载安装包1官网链接:https://www.wireshark.org/,点击Download2根据个人电脑情况,我的是Windows64位,就直接下载64-bit的版本3下载完成

    思创斯忠实用户-ss 思创斯忠实用户-ss
    2024年2月29日
  • 双飞翼布局详解_双飞翼布局和圣杯布局的区别

    双飞翼布局详解_双飞翼布局和圣杯布局的区别

    双飞翼布局详解_双飞翼布局和圣杯布局的区别作用:圣杯布局和双飞翼布局解决的问题是相同的,就是两边顶宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。原理:双飞翼布局为了让中间div内容不被遮挡,直接在中间div内部创建子div用于放置内容,在该div里用margin-left和margin-right为左右两栏div留出位置。css代码:.header,.footer{ height:200px; width:100%; background-color:#0000FF; }

    思创斯忠实用户-ss 思创斯忠实用户-ss
    2022年12月15日
  • 标志寄存器操作_fr标志寄存器

    标志寄存器操作_fr标志寄存器

    标志寄存器操作_fr标志寄存器文章目录0x01常见操作指令0x02标志寄存器一、ZF标志二、PF标志三、SF标志四、CF标志五、OF标志六、DF标志位和串传送指令0x01常见操作指令​ 在CISC中对于标志寄存器存在一些指令对标志寄存器操作,常见的有:LAHF、SAHF、PUSHF、POPF。LAHF:​ 指令可以将标志寄存器的低八位送入AH中,即将标志寄存器中的SF、ZF、AF、PF、CF这五个标志位传送到AH的对应位置上。标志位寄存器位置如下[外链图片转存失败,源站可能有防盗链机制,建议将图片保存

    思创斯忠实用户-ss 思创斯忠实用户-ss
    2023年1月22日
  • 24小时时间计算器_c中如何计算时间「建议收藏」 Go

    24小时时间计算器_c中如何计算时间「建议收藏」

    24小时时间计算器_c中如何计算时间「建议收藏」函数time.Since()计算golang运行的时间是非常有用的性能衡量指标,特别是在并发基准测试中。下面将介绍如何简单地使用Go语言来计算程序运行的时间。简单地使用Golang的time.Since()函数即可。下面有一个完整例子展示这个用法。packagemainimport(“fmt””time”)funcStartCac(){t1:=time.N_gotime.since

    思创斯忠实用户-ss 思创斯忠实用户-ss
    2023年10月16日
  • php去除空格和换行符_php中空格怎么打 PHP

    php去除空格和换行符_php中空格怎么打

    php去除空格和换行符_php中空格怎么打替换方法:1、使用str_replace()函数来替换,语法“str_replace(, ”
    “, $str)”;2、使用str_ireplace()函数来替换,语法“str_ireplace(” “, ”
    “, $str)”。

    思创斯忠实用户-ss 思创斯忠实用户-ss
    2022年8月6日
  • C语言 sprintf 函数 – C语言零基础入门教程「建议收藏」

    C语言 sprintf 函数 – C语言零基础入门教程「建议收藏」

    C语言 sprintf 函数 – C语言零基础入门教程「建议收藏」目录 一.sprintf 函数简介 二.sprintf 函数使用 三.sprintf/fprintf/printf 函数区别 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录

    思创斯忠实用户-ss 思创斯忠实用户-ss
    2023年2月9日

发表回复

您的电子邮箱地址不会被公开。

思创斯知道您想要的工具

  • pycharm 5.0.3安装教程激活码_pycharm切换conda环境「建议收藏」

    pycharm 5.0.3安装教程激活码_pycharm切换conda环境「建议收藏」

    2024年4月13日

  • pycharm激活方式怎么选_pycharm怎么看激活时间

    pycharm激活方式怎么选_pycharm怎么看激活时间

    2024年2月27日

联系我们

关注“Java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信

深圳SEO优化公司民治网站搭建大芬外贸网站设计坪地seo双龙优秀网站设计东莞推广网站宝安百度竞价包年推广大芬百姓网标王罗湖SEO按效果付费石岩外贸网站制作惠州网站排名优化福田网站设计模板吉祥营销网站松岗网站优化按天扣费观澜网站排名优化南联网站定制双龙百搜词包观澜建站坪山网站推广方案福永SEO按天扣费坪地企业网站改版龙岗企业网站设计坑梓设计公司网站荷坳网站优化按天收费木棉湾网站推广系统平湖外贸网站制作观澜网站制作设计丹竹头网站制作设计南联网络推广横岗关键词排名包年推广东莞网站推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化