hive SQL优化总结

大数据处理与优化技巧

1.行过滤

尽早尽量过滤数据,减少每个阶段的数据量。

例如两个表join,把where筛选条件写到单表子查询里再进行join可减少每个表的读取数据量。

2.列裁剪

例如某表有a,b,c,d,e五个字段,但是我们只需要a和b,那么请用select a,b from table 而不是select * from table。

3.分区裁剪

在查询的过程中减少不必要的分区,即尽量指定分区,这一块hive分区表严格模式有强制措施。

4.减少job数

巧妙的使用 UNION ALL 减少 job 数量

对于多表union all场景,我们可以把多个表的数据先读取进来,然后打上标记再去做聚合统计。

利用多表相同的JOIN 条件,去减少 job 的数量

不论是外关联outer join还是内关联inner join,如果join的key相同,不管有多少表,都会合并为一个MapReduce任务。

5.减少任务map数量

主要困扰我们的是小文件问题,首先我们hive配置中添加了set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat参数,

其次从根本上还是要通过采集端文件拆分优化或者小文件合并服务等方面减少小文件的形成。

6.善用multi-insert、善用union all

#查询了两次a

insert overwrite table tmp1 select ... from a where 条件1  union all insert overwrite table

Hive SQL 是一种用于查询和管理数据仓库中数据的语言,它与传统的 SQL 类似,但在某些方面具有独特的特性和最佳实践。以下是一些常用的 Hive SQL 命令及其最佳实践。 ### 数据定义语言 (DDL) #### 创建表 创建表时,需要指定表名、列名及其数据类型,并可以选择存储格式和其他属性。 ```sql CREATE TABLE table_name ( column1_name column1_type, column2_name column2_type, ... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` - `ROW FORMAT DELIMITED` 指定行的格式为分隔符格式。 - `FIELDS TERMINATED BY ','` 指定字段之间的分隔符。 - `STORED AS TEXTFILE` 指定存储格式为文本文件[^2]。 #### 删除表 删除表可以使用 `DROP TABLE` 命令。 ```sql DROP TABLE IF EXISTS table_name; ``` #### 修改表 修改表结构可以通过 `ALTER TABLE` 命令实现。 ```sql ALTER TABLE old_table_name RENAME TO new_table_name; ALTER TABLE table_name ADD COLUMNS (new_column_name new_column_type); ``` ### 数据操作语言 (DML) #### 插入数据 插入数据可以通过 `INSERT INTO` 或 `INSERT OVERWRITE` 命令实现。 ```sql INSERT INTO TABLE table_name VALUES (value1, value2, ...); INSERT OVERWRITE TABLE table_name SELECT * FROM another_table; ``` #### 查询数据 查询数据是 Hive 中最常用的操作之一。 ```sql SELECT column1, column2, ... FROM table_name WHERE condition; ``` ### 分区和桶 #### 创建分区表 分区表可以提高查询性能。 ```sql CREATE TABLE sales_data ( product_id INT, sale_amount DOUBLE ) PARTITIONED BY (dt STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` #### 添加分区 添加分区可以使用 `ALTER TABLE ... ADD PARTITION` 命令。 ```sql ALTER TABLE sales_data ADD PARTITION (dt='2023-01-01'); ``` #### 删除分区 删除分区可以使用 `ALTER TABLE ... DROP PARTITION` 命令。 ```sql ALTER TABLE sales_data DROP PARTITION (dt='2023-01-01'); ``` ### 文件合并 #### 合并小文件 合并小文件可以提高查询性能。 ```sql ALTER TABLE table_name CONCATENATE; ``` ### 性能优化 #### 使用 ORC 文件格式 ORC 文件格式提供了高效的压缩和编码技术。 ```sql CREATE TABLE orc_table ( id INT, name STRING ) STORED AS ORC; ``` #### 设置合理的分区策略 合理设置分区策略可以避免过多的小分区,从而提高查询性能[^2]。 ### 其他实用命令 #### 显示数据库 显示所有数据库可以使用 `SHOW DATABASES` 命令。 ```sql SHOW DATABASES; ``` #### 切换数据库 切换数据库可以使用 `USE` 命令。 ```sql USE database_name; ``` #### 显示表 显示当前数据库中的所有表可以使用 `SHOW TABLES` 命令。 ```sql SHOW TABLES; ``` #### 查看表结构 查看表结构可以使用 `DESCRIBE` 命令。 ```sql DESCRIBE table_name; ``` ### 最佳实践 - **合理设置分区策略**:避免过多的小分区,以提高查询性能。 - **使用 Hive Merge 相关参数自动合并小文件**:这有助于减少文件数量,提高查询效率。 - **定期执行 `ALTER TABLE ... CONCATENATE` 命令**:合并小文件可以提高查询性能。 - **使用 Hive ACID 的自动压缩功能**:这有助于保持数据的一致性和高效性[^2]。 通过遵循这些最佳实践,可以有效地管理和优化 Hive 数据仓库中的数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值