`

hive NULL 以及在join连接时 ''和NULL连接查询结果

    博客分类:
  • hive
 
阅读更多

 

 

hive NULL生成方式:

 

1 文本方式:

如果通过 load data local inpath  '/opt/stu.txt' into table stu 这种上传本地文件数据方式到Hive制造hive NULL的时候,需要在 stu.txt中 用

 

id      name

1      zhangsan

2      \N

写法,而不是

id      name

1      zhangsan

2      null     ----> 这样入hive后的数据是字符串 null

 

 

2 数据库导入方式:

如果通过关系库sqoop导入到hdfs后通过hive外表关联方式:

 

 

类型 关系型数据库 hive
string null \N
string "" ""
int等其余类型 null \N

 

 

对应hive string类型查询:
  如果为 \N 使用is null查询 eg: where b.name is null;
  如果为 “”  使用=''查询       eg: where b.name ='';

 

 

 

hive中 '' 和 NULL 在表关联下 是否会产生多余数据:

 

先以mysql为例讲解:

insert into stu(id,name) values('1','zm1');
insert into stu(id) values('2');
insert into stu(id) values('3');

insert into stu1(id,name,age) values('4','zm1','31');
insert into stu1(id,age) values('5','32');
insert into stu1(id,age) values('6','33');

select a.*, b.* from stu a join stu1 b on a.name = b.name;

 
mysql> select * from stu;
+------+------+
| id   | name |
+------+------+
| 1    | zm1  |
| 2    | NULL |
| 3    | NULL |
+------+------+

mysql> select * from stu1;
+------+------+------+
| id   | name | age  |
+------+------+------+
| 4    | zm1  | 31   |
| 5    | NULL | 32   |
| 6    | NULL | 33   |
+------+------+------+

mysql> select a.*, b.* from stu a join stu1 b on a.name = b.name;
+------+------+------+------+------+
| id   | name | id   | name | age  |
+------+------+------+------+------+
| 1    | zm1  | 4    | zm1  | 31   |
+------+------+------+------+------+

 !!!!!!!!!!!!!mysql会进行优化 将on中name为null的去掉!!!!!!!!!!!!
 



  
将上述stu stu1数据做修改, update stu set name='' where id = '2' 都修改后展示时mysql为如下样子:
mysql> select * from stu;
+------+------+
| id   | name |
+------+------+
| 1    | zm1  |
| 2    |      |
| 3    |      |
+------+------+
3 rows in set (0.00 sec)

mysql> select * from stu1;
+------+------+------+
| id   | name | age  |
+------+------+------+
| 4    | zm1  | 31   |
| 5    |      | 32   |
| 6    |      | 33   |
+------+------+------+
3 rows in set (0.00 sec)

mysql> select a.*, b.* from stu a join stu1 b on a.name = b.name;
+------+------+------+------+------+
| id   | name | id   | name | age  |
+------+------+------+------+------+
| 1    | zm1  | 4    | zm1  | 31   |
| 2    |      | 5    |      | 32   |
| 3    |      | 5    |      | 32   |
| 2    |      | 6    |      | 33   |
| 3    |      | 6    |      | 33   |
+------+------+------+------+------+
5 rows in set (0.00 sec)

!!!!!!!!!!!!!mysql不会对''做优化 关联查询时候会被关联到!!!!!!!!!!!!

 

讲mysql ‘’ 和 NULL 是因为 经过试验操作 hive操作结果和 mysql操作结果一样,

即:

''下hive关联操作的字段会被作为关联条件,这样会产生很多垃圾数据,在ETL中数据做了预处理后,

    建议查询条件增加非空串判断

    eg: from stu a join tea b on a.name = b.name and a.name !='' and b.name != '' ;

NULL下hive关联操作的字段不会作为关联条件.

 

分享到:
评论

相关推荐

    hive sql + left join 数据缺失

    随着Hive版本的不断更新,部分用户在升级至Hive 3之后遇到了数据处理中的一个常见问题——在执行Left Join操作时出现数据缺失。 #### 二、问题复现 问题发生在如下的SQL语句中: ```sql SELECT a.* FROM ( SELECT ...

    Hive查询sql left join exists

    总的来说,理解和熟练运用LEFT JOIN、LEFT SEMI JOIN以及EXISTS子句是Hive SQL查询中的关键技能,它们在大数据分析中扮演着重要角色,帮助用户从海量数据中提取有价值的信息。根据实际需求选择合适的连接类型,能够...

    hive on tez 常见报错问题收集

    Hive on Tez在处理insert语句与union all结合时,会进行优化,这可能导致在MR引擎中查询结果为空。解决方法包括: - 避免使用union all生成结果表,改用其他查询方式。 - 设置`mapred.input.dir.recursive`为true...

    使用Hive进行join查询的时报错

    NULL 博文链接:https://weigang-gao.iteye.com/blog/2260663

    Hive用户指南 Hive user guide 中文版

    - **处理NULL值**:JOIN操作中NULL值的处理方式会影响查询结果。 #### 九、优化与技巧 - **全排序**:通过合理的设置可以实现高效的数据排序。 - **笛卡尔积**:处理笛卡尔积需要特别注意避免性能问题。 - **EXIST...

    hive_have_null_id.tar.gz

    Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)对存储在Hadoop分布式文件系统(HDFS)上的大型数据集进行查询和分析。 描述中的信息简洁,没有提供具体细节,...

    hive优化(ppt)

    在Hive中,通过使用`LEFT SEMI JOIN`而非`LEFT OUTER JOIN`,可以在不包含NULL值的情况下快速找到匹配项,从而减少数据传输和处理的时间,特别是在处理大规模数据集时效果显著。 ### 存储格式和压缩 存储格式和...

    hive的学习资料

    涵盖字符集、压缩、COUNT(DISTINCT)、JOIN、DML 操作、HAVING、子查询、JOIN 中的 NULL 处理、分号字符等。 6. 优化 包括 Hadoop 计算框架的特性、常用优化手段、全排序、笛卡尔积、EXIST 子句、决定 reducer 个...

    hive参数配置说明大全

    Hive是一款基于Hadoop的数据仓库工具,用于数据的存储、查询和分析。在Hive中,参数配置起着非常重要的作用,它可以影响Hive的性能、安全性和执行效率。本文将对Hive的参数配置进行详细的解释,以便更好地使用Hive。...

    Hive用户手册中文版.pdf

    在使用Hive时,需要关注一些重要的注意事项,比如字符集问题、数据压缩方法、JOIN操作的语义、DML操作的限制、HAVING子句的使用、子查询的处理以及如何处理JOIN中的null值。 Hive的FAQ部分通常涵盖了常见问题的解答...

    Hive用户指南(Hive_user_guide)_中文版

    - 将查询结果写入文件系统 ```sql INSERT OVERWRITE LOCAL DIRECTORY '/local/path' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' SELECT * FROM sales WHERE year = 2020 AND month = 1; ``` **2.7 Cli**...

    分布式数据仓库Hive大全

    8.8 Join中处理null值的语义区别 44 9. 优化与技巧 47 9.1 全排序 47 9.1.1 例1 48 9.1.2 例2 51 9.2 怎样做笛卡尔积 54 9.3 怎样写exist/in子句 54 9.4 怎样决定reducer个数 55 9.5 合并MapReduce操作 55 9.6 ...

    hive优化建议.docx

    在大数据分析领域,Hive 是一个广泛使用的工具,它基于 Hadoop 平台,提供了SQL-like 的查询语言,使得处理大规模数据变得更加便捷。然而,随着数据量的不断增长,Hive 的性能优化变得至关重要。本篇文章将深入探讨...

    hive操作实战

    在大数据处理领域,Hive作为一个数据仓库工具,被广泛应用于海量数据的存储、查询和分析工作中。本文将通过一系列实战案例,详细介绍Hive的基本操作及其应用场景。 #### 一、Hive基础知识简介 Hive是基于Hadoop的...

    Hive元数据库操作

    Hive 元数据库操作是 Hive 运维中常用的操作之一,它提供了对元数据的管理和查询功能。在 Hive 中,元数据是指对数据的描述信息,如表名、表路径、分区信息、列信息等。下面将对 Hive 元数据库操作的常用 SQL 语句...

    SQL left join

    在本文中,我们将详细介绍SQL Left Join的使用方法、特点和区别,以及与Right Join和Inner Join的比较。 一、SQL Left Join的定义和使用 SQL Left Join也称为左外连接,它可以将左表中的所有记录与右表中的记录...

    Hive用户指南(Hive_user_guide)_中文版.pdf

    此外,在JOIN操作时,处理null值的语义区别也需要特别注意。 Hive的优化与技巧涉及到: - 全排序的实现方法 - 笛卡尔积的实现 - exist/in子句的写法 - 如何决定reducer的个数 - 如何合并MapReduce操作 - 使用Bucket...

Global site tag (gtag.js) - Google Analytics