问题描述:
描述1:表A存在主键为1的数据行,表B也存在主键为1的数据行,表A left join 表B,取主键为1的数据行时,表B数据缺失。
描述2: 基于描述1,count(表B字段)数据时,计数行数不准确(主要表现为缺数据)
针对结果的发生,本文从以下方面分析原因及提供解决方案:
- 右表没有匹配的数据
- 关联键数据类型不匹配
- 受count列null值影响
- Hive版本问题,在某些版本中,左连可能导致右表为null
- 数据倾斜
并在文末附属了Hive SQL常用参数设置
的说明。
下面进行逐一分析
1. 右表没有匹配的数据
SQL基础,略。
2. 关联键数据类型不匹配
首先要确定一个问题,Hive会不会
自动匹配两表类型
?下面开始验证
2.1 首先在test_db中创建表A,语句如下:
CREATE TABLE test_db.table_A
(
id int comment '编号',
id_string string comment '编号字符串',
name string comment '名称'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
NULL DEFINED AS ''
STORED AS TEXTFILE
TBLPROPERTIES ("serialization.null.format" = '');
覆盖写入新数据如下:
insert overwrite table test_db.table_A
values (1, '1', '张三'),
(2, '2', '李四'),
(3, '3', '王五');
select id, id_string, name from test_db.table_A;