HIVE Statistics(Hive 统计信息) 的说明和查询优化详解

本文详细介绍了Hive中统计信息的分类,包括表和分区的统计信息,以及字段的统计信息。重点讲解了如何查看、利用统计信息进行查询优化,配置参数如hive.stats.autogather和column.stats.autogather,以及如何手动和自动收集统计信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文从普通用户的角度讲述 Hive 统计信息,源代码角度请参考

统计信息的分类

有两种统计信息,第1种为表和分区的统计信息,第2种为分区的统计信息。

表和分区的统计信息

表的统计信息

包括如下内容:

  • numFiles – 文件的数量
  • numRows – 记录数量
  • totalSize – 总文件大小
  • rawDataSize – 原始数据量(因为可以压缩后存储到文件里)

对于分区表,还包括以下内容:

  • numPartitions 1824

显示表的统计信息的语句。

desc extended table_name;

或者

desc formatted table_name;

其中,用 desc formatted table_name 是格式化输出,更容易阅读,统计信息在 Table Parameters 部分,如下面的示例。

Table Parameters:	 	 
	COLUMN_STATS_ACCURATE	{\"BASIC_STATS\":\"true\"}
	bucketing_version   	2                   
	numFiles            	1826                
	numPartitions       	1824                
	numRows             	2160165             
	rawDataSize         	3930709572          
	totalSize           	122202436           
	transient_lastDdlTime	1646036041          
分区的统计信息

分区的统计信息,内容和非分区表的统计信息一致。显示方法示例:

desc formatted web_sales partition(ws_sold_date_sk=2452642);

Partition Parameters: 部分可以找到分区的统计信息。

Partition Parameters:	 	 
	COLUMN_STATS_ACCURATE	{\"BASIC_STATS\":\"true\"}
	numFiles            	1                   
	numRows             	2379                
	rawDataSize         	4329780             
	totalSize           	127832              
	transient_lastDdlTime	1646036434    

字段的统计信息

字段的统计信息包括字段的最大值,最小值,null 的数量,distinct 的数量等。如一个表的字段统计信息已经收集,在 desc formatted table_name 时,Table Parameters:COLUMN_STATS_ACCURATE有COLUMN_STATS,对应的字段为 true,则表示该字段的统计信息已经收集。 可以用类似以下的命令显示。

desc formatted web_site;
Table Parameters:	 	 
	COLUMN_STATS_ACCURATE	{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"web_city\":\"true\",\"web_class\":\"true\",\"web_close_date_sk\":\"true\",\"web_company_id\":\"true\",\"web_company_name\":\"true\",\"web_country\":\"true\",\"web_county\":\"true\",\"web_gmt_offset\":\"true\",\"web_manager\":\"true\",\"web_market_manager\":\"true\",\"web_mkt_class\":\"true\",\"web_mkt_desc\":\"true\",\"web_mkt_id\":\"true\",\"web_name\":\"true\",\"web_open_date_sk\":\"true\",\"web_rec_end_date\":\"true\",\"web_rec_start_date\":\"true\",\"web_site_id\":\"true\",\"web_site_sk\":\"true\",\"web_state\":\"true\",\"web_street_name\":\"true\",\"web_street_number\":\"true\",\"web_street_type\":\"true\",\"web_suite_number\":\"true\",\"web_tax_percentage\":\"true\",\"web_zip\":\"true\"}}
	bucketing_version   	2                   
	numFiles            	1                   
	numRows             	32                  
	rawDataSize         	65968               
	totalSize           	6379                
	transient_lastDdlTime	1646818911  

查看分区的字段统计信息还是用以下命令。

desc formatted web_sales partition(ws_sold_date_sk=2452642);
显示一个字段的统计信息

非分区表字段的统计信息

DESCRIBE FORMATTED web_site web_site_sk;
OK
col_name            	web_site_sk         	 	 	 	 	 	 	 	 	 	 
data_type           	bigint              	 	 	 	 	 	 	 	 	 	 
min                 	1                   	 	 	 	 	 	 	 	 	 	 
max                 	32                  	 	 	 	 	 	 	 	 	 	 
num_nulls           	0                   	 	 	 	 	 	 	 	 	 	 
distinct_count      	32                  	 	 	 	 	 	 	 	 	 	 
avg_col_len         	                    	 	 	 	 	 	 	 	 	 	 
max_col_len         	                    	 	 	 	 	 	 	 	 	 	 
num_trues           	                    	 	 	 	 	 	 	 	 	 	 
num_falses          	                    	 	 	 	 	 	 	 	 	 	 
bitVector           	                    	 	 	 	 	 	 	 	 	 	 
comment             	from deserializer   	 	 	 	 	 	 	 	 	 	 
COLUMN_STATS_ACCURATE	{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"web_city\":\"true\",\"web_class\":\"true\",\"web_close_date_sk\":\"true\",\"web_company_id\":\"true\",\"web_company_name\":\"true\",\"web_country\":\"true\",\"web_county\":\"true\",\"web_gmt_offset\":\"true\",\"web_manager\":\"true\",\"web_market_manager\":\"true\",\"web_mkt_class\":\"true\",\"web_mkt_desc\":\"true\",\"web_mkt_id\":\"true\",\"web_name\":\"true\",\"web_open_date_sk\":\"true\",\"web_rec_end_date\":\"true\",\"web_rec_start_date\":\"true\",\"web_site_id\":\"true\",\"web_site_sk\":\"true\",\"web_state\":\"true\",\"web_street_name\":\"true\",\"web_street_number\":\"true\",\"web_street_type\":\"true\",\"web_suite_number\":\"true\",\"web_tax_percentage\":\"true\",\"web_zip\":\"true\"}}	  
Time taken: 0.107 seconds, Fetched: 13 row(s)
一个分区字段的统计信息

DESCRIBE FORMATTED table_name field_name 可以显示一个字段的统计信息,如下所示:

DESCRIBE FORMATTED web_sales web_site_sk;
OK
col_name            	web_site_sk         	 	 	 	 	 	 	 	 	 	 
data_type           	bigint              	 	 	 	 	 	 	 	 	 	 
min                 	1                   	 	 	 	 	 	 	 	 	 	 
max                 	32                  	 	 	 	 	 	 	 	 	 	 
num_nulls           	0                   	 	 	 	 	 	 	 	 	 	 
distinct_count      	32                  	 	 	 	 	 	 	 	 	 	 
avg_col_len         	                    	 	 	 	 	 	 	 	 	 	 
max_col_len         	                    	 	 	 	 	 	 	 	 	 	 
num_trues           	                    	 	 	 	 	 	 	 	 	 	 
num_falses          	                    	 	 	 	 	 	 	 	 	 	 
bitVector           	                    	 	 	 	 	 	 	 	 	 	 
comment             	from deserializer   	 	 	 	 	 	 	 	 	 	 
COLUMN_STATS_ACCURATE	{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"web_city\":\"true\",\"web_class\":\"true\",\"web_close_date_sk\":\"true\",\"web_company_id\":\"true\",\"web_company_name\":\"true\",\"web_country\":\"true\",\"web_county\":\"true\",\"web_gmt_offset\":\"true\",\"web_manager\":\"true\",\"web_market_manager\":\"true\",\"web_mkt_class\":\"true\",\"web_mkt_desc\":\"true\",\"web_mkt_id\":\"true\",\"web_name\":\"true\",\"web_open_date_sk\":\"true\",\"web_rec_end_date\":\"true\",\"web_rec_start_date\":\"true\",\"web_site_id\":\"true\",\"web_site_sk\":\"true\",\"web_state\":\"true\",\"web_street_name\":\"true\",\"web_street_number\":\"true\",\"web_street_type\":\"true\",\"web_suite_number\":\"true\",\"web_tax_percentage\":\"true\",\"web_zip\":\"true\"}}	  
Time taken: 0.107 seconds, Fetched: 13 row(s)
  • 显示一个分区中字段的统计信息
hive> desc formatted web_sales partition(ws_sold_date_sk=2452536) ws_item_sk;
OK
col_name            	ws_item_sk          	 	 	 	 	 	 	 	 	 	 
data_type           	bigint              	 	 	 	 	 	 	 	 	 	 
min                 	49                  	 	 	 	 	 	 	 	 	 	 
max                 	35997               	 	 	 	 	 	 	 	 	 	 
num_nulls           	0                   	 	 	 	 	 	 	 	 	 	 
distinct_count      	1499                	 	 	 	 	 	 	 	 	 	 
avg_col_len         	                    	 	 	 	 	 	 	 	 	 	 
max_col_len         	                    	 	 	 	 	 	 	 	 	 	 
num_trues           	                    	 	 	 	 	 	 	 	 	 	 
num_falses          	                    	 	 	 	 	 	 	 	 	 	 
bitVector           	                    	 	 	 	 	 	 	 	 	 	 
comment             	from deserializer   

统计信息的作用

查询优化

查询优化器根据统计信息,可以生成代价更低的执行计划。

查询结果

有些查询,可以从统计信息中直接获取查询的结果,不用生成作业读取文件。
配置参数如下,当为true 时,可以用统计信息的结果。

<property>
   <name>hive.compute.query.using.stats</name>
   <value>true</value>
   <description>
     When set to true Hive will answer a few queries like count(1) purely using stats
     stored in metastore. For basic stats collection turn on the config hive.stats.autogather to true.
     For more advanced stats collection need to run analyze table queries.
   </description>
 </property>
  • 查询记录数
    可以看到没有生成任务,直接返回结果。
hive> select count(1) from web_site;
OK
32
Time taken: 2.123 seconds, Fetched: 1 row(s)
  • 查询最大值,最小值
hive> select min(ws_item_sk) from web_sales where ws_sold_date_sk=2452536;
OK
49
Time taken: 0.393 seconds, Fetched: 1 row(s)
  • 查询distinct 值 会生成一个作业,这部分 Hive 还没有优化
hive> select count(distinct ws_item_sk) from web_sales where ws_sold_date_sk=2452536;
Query ID = hive_20220310161137_2da6da34-7eda-4e39-a1f5-146c19081333
Total jobs = 1
Launching Job 1 out of 1
Tez session was closed. Reopening...
Session re-established.
Session re-established.
Status: Running (Executing on YARN cluster with App id application_1646016563431_0141)

----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
----------------------------------------------------------------------------------------------
Map 1 .......... container     SUCCEEDED      1          1        0        0       0       0  
Reducer 2 ...... container     SUCCEEDED      2          2        0        0       0       0  
Reducer 3 ...... container     SUCCEEDED      1          1        0        0       0       0  
----------------------------------------------------------------------------------------------
VERTICES: 03/03  [==========================>>] 100%  ELAPSED TIME: 4.01 s     
----------------------------------------------------------------------------------------------
Status: DAG finished successfully in 4.01 seconds

Query Execution Summary
----------------------------------------------------------------------------------------------
OPERATION                            DURATION
----------------------------------------------------------------------------------------------
Compile Query                           0.23s
Prepare Plan                            0.08s
Get Query Coordinator (AM)              0.00s
Submit Plan                             3.65s
Start DAG                               0.99s
Run DAG                                 4.01s
----------------------------------------------------------------------------------------------

Task Execution Summary
----------------------------------------------------------------------------------------------
  VERTICES      DURATION(ms)   CPU_TIME(ms)    GC_TIME(ms)   INPUT_RECORDS   OUTPUT_RECORDS
----------------------------------------------------------------------------------------------
     Map 1           2031.00          4,920             68           1,526            1,497
 Reducer 2            445.00          1,000              0           1,497                2
 Reducer 3              0.00            280              0               2                0
----------------------------------------------------------------------------------------------

OK
1497

统计信息自动生成的配置参数

参数hive.stats.autogather配置自动生成表和分区的统计信息。hive.stats.column.autogather 配置自动统计列的统计信息。配置之后,会多一个 Task,收集统计信息,存入 MetaStore。

<property>
    <name>hive.stats.autogather</name>
    <value>true</value>
    <description>A flag to gather statistics (only basic) automatically during the INSERT OVERWRITE command.</description>
  </property>
  <property>
    <name>hive.stats.column.autogather</name>
    <value>true</value>
    <description>A flag to gather column statistics automatically.</description>
  </property>

使用命令手动生成统计信息

生成表的统计信息

以下命令用于生成表的统计信息。如果表是非分区表,则生成所有分区的统计信息。

analyze table web_sales compute statistics;

生成某个分区的统计信息

以下命令用于生成表的某些分区的统计信息。

analyze table web_sales partition(ws_sold_date_sk=2452536) compute statistics;

如果有多个分区列,如 log 表有两个分区字段(dt,hour),则以下语句生成 20220308 日所有小时分区的统计信息。

analyze table log partition(dt='20220308') compute statistics;

生成表的字段统计信息

以下命令用于生成表的所有字段统计信息。如果表是非分区表,则生成所有分区的所有字段统计信息。

analyze table web_sales compute statistics for columns;

生成表的某些字段统计信息

如果不想生成所有字段的统计信息,在后面加上需要的字段名,如下所示。

analyze table web_sales compute statistics for columns web_site_sk,ws_item_sk;

生成表的某些分区的字段统计信息

analyze table store_sales partition(ss_sold_date_sk=2452536) compute statistics for columns;

多分区字段也可以不全部指定。

生成表的某些分区,某些字段的字段统计信息

analyze table store_sales partition(ss_sold_date_sk=2452536) compute statistics for columns ss_sold_time_sk,ss_item_sk;

禁用某些表的统计信息

对于某些表的数据,不是用 hive 语句生成,而是用外部软件生成,则从统计信息中查询不正确。对于这类表,需要在创建之前设置参数 set hive.stats.autogather=false; 测试如下

创建表

创建标准表 t1,query 尽可能的利用统计信息。

set hive.stats.autogather=true;
create table t1(c1 string) stored as textfile;

查询表的存储路径和 STATS,BASIC_STATS=true 说明包含统计信息。

hive> desc formatted t1;
OK
# col_name            	data_type           	comment             
c1                  	string              	                    
	 	 
# Detailed Table Information	 	 
Database:           	default             	 
OwnerType:          	USER                	 
Owner:              	hive                	 
CreateTime:         	Thu May 05 14:23:57 CST 2022	 
LastAccessTime:     	UNKNOWN             	 
Retention:          	0                   	 
Location:           	hdfs://bmr-cluster/warehouse/tablespace/managed/hive/t1 
Table Type:         	MANAGED_TABLE       	 
Table Parameters:	 	 
	COLUMN_STATS_ACCURATE	{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"c1\":\"true\"}}
	bucketing_version   	2                   
	numFiles            	0                   
	numRows             	0                   
	rawDataSize         	0                   
	totalSize           	0                   
	transient_lastDdlTime	1651731837          
	 	 
# Storage Information	 	 
SerDe Library:      	org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe	 
InputFormat:        	org.apache.hadoop.mapred.TextInputFormat	 
OutputFormat:       	org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat	 
Compressed:         	No                  	 
Num Buckets:        	-1                  	 
Bucket Columns:     	[]                  	 
Sort Columns:       	[]                  	 
Storage Desc Params:	 	 
	serialization.format	1 

在创建表 t2 之前,set hive.stats.autogather=false;

set hive.stats.autogather=false;
create table t2(c1 string) stored as textfile;

desc 发现,t2 没有 \"BASIC_STATS\":\"true\" 的描述

hive> desc formatted t2;
OK
# col_name            	data_type           	comment             
c1                  	string              	                    
	 	 
# Detailed Table Information	 	 
Database:           	default             	 
OwnerType:          	USER                	 
Owner:              	hive                	 
CreateTime:         	Thu May 05 14:25:21 CST 2022	 
LastAccessTime:     	UNKNOWN             	 
Retention:          	0                   	 
Location:           	hdfs://bmr-cluster/warehouse/tablespace/managed/hive/t2 
Table Type:         	MANAGED_TABLE       	 
Table Parameters:	 	 
	bucketing_version   	2                   
	transient_lastDdlTime	1651731921          
	 	 
# Storage Information	 	 
SerDe Library:      	org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe	 
InputFormat:        	org.apache.hadoop.mapred.TextInputFormat	 
OutputFormat:       	org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat	 
Compressed:         	No                  	 
Num Buckets:        	-1                  	 
Bucket Columns:     	[]                  	 
Sort Columns:       	[]                  	 
Storage Desc Params:	 	 
	serialization.format	1                   
Time taken: 0.055 seconds, Fetched: 26 row(s)

往表的所在目录直接放入文件

退出 hive,使用 shell 命令往表的所在目录直接放入文件,这是 hive 是不知道的,不会生成统计信息。

hadoop fs -put /etc/hosts hdfs://bmr-cluster/warehouse/tablespace/managed/hive/t1
hadoop fs -put /etc/hosts hdfs://bmr-cluster/warehouse/tablespace/managed/hive/t2

验证

分别从 t1 和 t2 表中查询记录数,可以看到 t1 直接返回,因为使用统计信息。t2 使用了一个作业,查询数据文件,得到记录数 6。以上示例说明

hive> select count(*) from t1;
OK
0
Time taken: 2.76 seconds, Fetched: 1 row(s)
hive> select count(*) from t2;
Query ID = hive_20220505142655_a7a965b0-fbf6-4f19-ae45-4ed49f0fac1c
Total jobs = 1
Launching Job 1 out of 1
Status: Running (Executing on YARN cluster with App id application_1651117468586_0069)

----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED  
[=============>>-------------] 50%   ELAPSED TIME: 6.10 s     
Map 1 .......... container     SUCCEEDED      1          1        0        0       0       0  
Reducer 2 ...... container     SUCCEEDED      1          1        0        0       0       0  
----------------------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 6.22 s     
----------------------------------------------------------------------------------------------
Status: DAG finished successfully in 6.22 seconds

Query Execution Summary
----------------------------------------------------------------------------------------------
OPERATION                            DURATION
----------------------------------------------------------------------------------------------
Compile Query                           0.31s
Prepare Plan                            0.30s
Get Query Coordinator (AM)              0.02s
Submit Plan                             0.36s
Start DAG                               1.00s
Run DAG                                 6.22s
----------------------------------------------------------------------------------------------

Task Execution Summary
----------------------------------------------------------------------------------------------
  VERTICES      DURATION(ms)   CPU_TIME(ms)    GC_TIME(ms)   INPUT_RECORDS   OUTPUT_RECORDS
----------------------------------------------------------------------------------------------
     Map 1           2527.00          3,550             69               6                1
 Reducer 2            123.00            950             17               1                0
----------------------------------------------------------------------------------------------

OK
6
Time taken: 8.291 seconds, Fetched: 1 row(s)
<think>嗯,用户想了解Hive SQL性能优化的方法技巧。我之前看到过站内有两个相关的引用内容,需要先仔细看看这些资料。引用[1]提到了系列文章,包括建表、聚合排序、数据拼接、字符串日期函数的使用,还有聚合函数结合CASE WHEN以及窗口分析函数。引用[2]则有一个具体的优化例子,使用GROUP BY...WITH CUBE来减少查询次数,避免多次扫描表。 首先,我需要整理Hive优化的主要方向。常见的优化包括数据存储优化查询语句优化、执行引擎调优资源管理。数据存储方面,分区分桶是关键,这样可以减少扫描的数据量。比如按日期分区,或者按某个字段分桶,能提升查询效率。另外,文件格式的选择,比如ORC或Parquet,支持列式存储压缩,这对性能帮助很大。 然后是查询语句的优化。避免SELECT *,只选择需要的列,减少数据读取量。过滤条件下推,也就是在JOIN或子查询前先过滤数据,减少处理的数据量。还有合理使用JOIN,比如小表放在左边,使用Map Join来处理。GROUP BY的优化,比如启用map端聚合,或者用参数调整reduce数量。DISTINCT操作有时候可以用GROUP BY代替,避免全量去重的开销。 执行引擎方面,Tez引擎比MapReduce更高效,可以启用。向量化查询也是提升性能的好方法,特别是处理大量数据时。CBO(成本优化器)能根据统计信息优化执行计划,需要开启相关配置。 资源调优部分,调整mapreduce任务的数量,合理分配内存,避免OOM错误。还有并行执行JVM重用,这些参数设置得当的话,能提升整体执行速度。 接下来要考虑用户可能的应用场景,他们可能是在处理大数据量的ETL任务或者数据分析,遇到性能瓶颈需要优化。用户可能对具体的优化技巧不太清楚,比如如何选择分区字段,或者怎么调整JOIN的顺序。需要给出实际例子,比如使用分区分桶、改写查询语句的方法,以及配置参数的示例。 还要注意Hive的版本不同,某些特性可能有所差异,比如CBO在较新版本中支持更好。另外,压缩编解码器的选择,比如SnappyZlib的权衡,也是需要考虑的点。 用户的问题可能还涉及到如何监控诊断性能问题,比如查看执行计划,分析任务各个阶段的时间消耗。但当前提供的引用中没有这部分内容,可能需要根据现有资料回答,或者建议用户查阅更详细的文档。 总结下来,回答的结构应该分点列出优化方法,每个方法下给出具体技巧示例,比如代码片段或配置参数。同时引用站内的资料作为支持,例如引用[2]中的WITH CUBE例子,说明如何减少查询次数。这样用户能够清晰地理解并应用这些优化技巧。</think>### Hive SQL性能优化方法详解 #### 一、数据存储优化 1. **分区与分桶** - 按业务字段分区(如日期`dt`),可减少全表扫描数据量: ```sql CREATE TABLE user_behavior PARTITIONED BY (dt STRING); ``` - 分桶适合高频JOIN字段,需配合`CLUSTERED BY``SORTED BY`: ```sql CREATE TABLE user_bucketed (user_id INT) CLUSTERED BY (user_id) INTO 32 BUCKETS; ``` - 优势:分区分桶可减少数据扫描范围达70%以上[^1] 2. **文件格式优化** - 使用列式存储格式(ORC/Parquet),压缩比提升3-5倍: ```sql CREATE TABLE orc_table STORED AS ORC TBLPROPERTIES ("orc.compress"="SNAPPY"); ``` - ORC支持谓词下推(Predicate Pushdown),可自动跳过无关数据块 #### 二、查询语句优化 1. **查询精简原则** - 避免`SELECT *`,精确指定字段: ```sql -- 低效写法 SELECT * FROM orders WHERE dt='2023-01-01'; -- 优化写法 SELECT order_id, user_id, amount FROM orders WHERE dt='2023-01-01'; ``` - 使用`LIMIT`采样调试,减少测试数据量 2. **JOIN优化** - 小表前置+MapJoin(<25MB自动触发): ```sql SELECT /*+ MAPJOIN(b) */ a.id, b.name FROM small_table b JOIN large_table a ON a.id = b.id; ``` - 避免笛卡尔积,确保JOIN条件有效 3. **聚合优化** - 开启Map端聚合(预聚合): ```sql SET hive.map.aggr=true; -- 默认开启 ``` - 多维聚合使用`WITH CUBE`/`GROUPING SETS`: ```sql -- 优化写法(引用[2]案例) SELECT sex, city, level, COUNT(DISTINCT user_id) FROM user_info GROUP BY sex, city, level WITH CUBE; ``` #### 三、执行引擎优化 1. **计算引擎选择** ```sql SET hive.execution.engine=tez; -- 启用Tez引擎 SET hive.vectorized.execution.enabled=true; -- 向量化查询 ``` 2. **CBO优化器** ```sql SET hive.cbo.enable=true; SET hive.compute.query.using.stats=true; -- 依赖统计信息 ANALYZE TABLE user_info COMPUTE STATISTICS; -- 收集统计信息 ``` #### 四、资源参数调优 ```sql SET mapreduce.map.memory.mb=4096; -- 调整Map内存 SET mapreduce.reduce.memory.mb=8192; SET hive.exec.parallel=true; -- 开启并行执行 SET mapred.job.reuse.jvm.num.tasks=10; -- JVM重用 ``` #### 五、高级优化技巧 1. **数据倾斜处理** - 热点key拆分: ```sql SELECT /*+ MAPJOIN(tmp) */ * FROM (SELECT CASE WHEN user_id=123 THEN CAST(RAND()*10 AS INT) ELSE user_id END AS join_key, * FROM large_table) a JOIN small_table tmp ON a.join_key = tmp.user_id ``` 2. **中间结果压缩** ```sql SET hive.exec.compress.intermediate=true; SET mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值