hive mysql 的一些知识点

本文详细介绍了Hive和MySQL的区别,包括操作、本质、读写、存储等方面。还阐述了Hive内部表和外部表的差异、创建与转换,以及Hive中sort by与order by、union和union all的区别。此外,介绍了Hive分区类型、存储格式和建表语法等信息技术相关内容。

1.hive中sort by与order by的区别
sort by – 局部排序,只保证单个reduce内有顺序
order by – 全局排序,保证所有的reduce中的数据都有顺序
ps:如果reduce只有一个,两者都一样
两者通常和asc desc搭配,默认使用升序asc
只要使用order by,reduce的个数就是1个
也可以自定义设置reduce数量:set mapreduce.job.reduces=3;(设置reduce数量为3)默认为-1.

2.hive与mysql的区别
回答思路:hive背景(原理、本质)–>两者操作、本质的差别–>读写差别–>其它差别。
Hive的诞生背景:学mysql的也想入门大数据,但又不会java,于是hive就诞生了。Hive是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表。本质是将HQL语句转化为MR程序。
hive总体来说操作等方面和MySQL没有太大差别。但是本质却有差别,Hive注重联机分析的处理,mysql注重事务的处理。Hive注重的是分析,mysql注重的是处理。
MySQL在写的时候检查字段,hive在读的时候检查字段。所以在新增数据时,hive比较快,只需要直接load就行,而MySQL需要先检查字段。
hive与mysql的其它差别如下:
1)数据存储位置:Hive的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统中。
2) 存储引擎: mysql用自己的存储引擎,hive使用的hdfs来存储。
3)执行引擎:mysql使用自己的执行引擎,而hive使用的是hadoop的mapreduce来执行。
4) 使用环境: mysql使用环境几乎没有限制,hive是基于hadoop的。
5)执行延迟:hive高延迟,mysql低延迟。
6)可扩展性:hive的可扩展性高,而mysql由于ACID语义限制,扩展性有限。
7)数据量:mysql的handle的数据量较小,而hive的handle数据量较大。

3.hive内部表和外部表的 区别
1、内部表 表目录会创建在hdfs的/user/hive/warehouse/的相应的库目录下
2、外部表 外部表会根据建表是LOCATION关键字所指定的路径来创建表目录(如果没有指定LOCATION,则表目录位置与内部表相同)
内部表的创建和外部表的创建,就差两个关键字:EXTERNAL LOCATION
内部表 – CREATE TABLE IF NOT EXISTS T_INNER(ID INT);
外部表 – CREATE EXTERNAL TABLE IF NOT EXISTS T_OUTER(ID INT) LOCATION ‘/AAA/BBB’;
HIVE中建表语句所做的事情:
1、在hdfs上创建相应的表目录
2、在元数据库中创建相应表的描述信息(元数据)
内部表和外部表删除时的不同的特性:
1、drop时,元数据都会被删除
2、drop时,内部表的表目录会被删除,但是,外部表的数据目录不会被删除
外部表的使用场景:
使用后不删除数据的场景使用外部表(推荐使用外部表)
所以,整个的数据仓库中的最底层的表(与仓库外对接的数据表ODS)使用外部表

4.hive中union和union all的区别
Union去重、排序,union all不去重不排序。

5.公司中使用内部表多还是外部表多
内部表。

6.hive中创建库和创建表的本质是什么
创建库的本质:在hive的数据仓库下创建一个目录(库名.db的目录)
创建表的本质:在hdfs上创建表目录

7.说一下你所学过的窗口函数
FIRST_VALUE:取分组内排序后,截止到当前行,第一个值 。
LAST_VALUE: 取分组内排序后,截止到当前行,最后一个值 。
LEAD(col,n,DEFAULT) :用于统计窗口内往下第n行值。第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL) 。
LAG(col,n,DEFAULT) :与lead相反,用于统计窗口内往上第n行值。第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)。

8.hive内部表和外部表的转换
alter table t_newuser set TBLPROPERTIES(‘EXTERNAL’=‘TRUE’); ###true一定要大写
alter table t_newuser set TBLPROPERTIES(‘EXTERNAL’=‘false’); ###false大小写都没关系

9.hive分区的三种类型
静态分区:加载数据的时候指定分区的值。
动态分区:数据未知,根据分区的值确定创建分区。
混合分区:静态加动态。

10.hive的存储格式
hive默认的存储格式:textfile
textfile:普通的文本文件存储,不压缩
sequencefile:hive为用户提供的 二进制存储,本身就压缩。
rcfile:hive提供的行列混合存储,hive在该格式下,将会尽量把附近的行和列的块存储到一起。仍然压缩,查询效率较高。
Orc是rcfile的升级版本。
Parquet列式存储。
11.hive的建表语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], …)] 列名 列数据类型 列的说明
[COMMENT table_comment] 表的说明
[PARTITIONED BY (col_name data_type [COMMENT col_comment], …)] 分区,
[CLUSTERED BY (col_name, col_name, …) 分桶
[SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format] 读写格式
[STORED AS file_format] 存储文件格式
[LOCATION hdfs_path] 指定文件路径

### Hive 知识点总结 #### 1. Hive 的定义与功能 Hive 是建立在 Hadoop 之上的开源数据仓库系统,可以将存储在 HDFS 上的结构化或半结构化数据文件映射为一张数据库表,并提供了一种类似于 SQL 的查询语言——HQL(Hive Query Language),用于访问和分析存储在 Hadoop 文件中的大型数据集[^1]。 #### 2. Hive 的核心特点 - **数据存储**:Hive 的数据存储在 HDFS 中,而元数据存储在 RDBMS 中(如 MySQL 或 Derby)[^3]。 - **查询语言**:Hive 提供了类似 SQL 的查询语言 HQL,便于用户进行数据分析[^1]。 - **执行引擎**:Hive 的查询最终会被转换为 MapReduce、Tez 或 Spark 任务来执行[^1]。 - **大规模数据处理**:Hive 支持大规模数据计算,适合处理 TB 级甚至 PB 级的数据[^2]。 #### 3. Hive 的基本操作 - **创建数据库**: ```sql CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT 'database_comment'] [LOCATION 'hdfs_path'] [WITH DBPROPERTIES (property_name=property_value, ...)]; ``` 这条语句用于创建一个新的数据库,同时可以指定注释、存储路径以及数据库属性[^5]。 - **创建表**: - 内部表: ```sql CREATE TABLE table_name ( column1 datatype, column2 datatype, ... ) STORED AS file_format; ``` - 外部表: ```sql CREATE EXTERNAL TABLE table_name ( column1 datatype, column2 datatype, ... ) LOCATION 'hdfs_path'; ``` 内部表的数据由 Hive 管理,删除表时会删除数据;外部表的数据存储在指定的 HDFS 路径中,删除表时不会删除数据[^1]。 - **加载数据**: ```sql LOAD DATA [LOCAL] INPATH 'path_to_data' [OVERWRITE] INTO TABLE table_name; ``` 该命令用于将本地或 HDFS 上的数据加载到 Hive 表中。 - **查询数据**: ```sql SELECT column1, column2 FROM table_name WHERE condition; ``` Hive 支持标准的 SQL 查询语法,包括过滤、分组、排序等操作。 #### 4. Hive 的配置优化 - **避免笛卡尔积**:将 `hive.strict.checks.cartesian.product` 设置为 `true`,可以限制不带 `ON` 子句的 `JOIN` 查询,防止出现不可控的笛卡尔积[^4]。 - **选择合适的执行引擎**:可以通过设置 `hive.execution.engine` 参数来选择 MapReduce、Tez 或 Spark 作为执行引擎。例如: ```sql SET hive.execution.engine=tez; ``` #### 5. 数据仓库查询语言 Hive 的查询语言 HQL 类似于 SQL,但有一些差异需要注意: - **分区与分桶**:Hive 支持分区和分桶技术,用于优化查询性能。分区是基于某些列对数据进行物理分割,分桶是基于哈希值对数据进行逻辑分割[^1]。 - **JOIN 查询**:Hive 不支持自动将 `WHERE` 子句转化为 `ON` 子句,因此需要显式指定 `ON` 条件[^4]。 - **复杂数据类型**:Hive 支持数组、映射和结构体等复杂数据类型,可以在查询中使用这些类型进行复杂数据处理[^1]。 ```sql -- 示例:查询包含复杂数据类型的表 SELECT id, array_column[0], map_column['key'], struct_column.field_name FROM complex_table; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值