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版本的不断更新,部分用户在升级至Hive 3之后遇到了数据处理中的一个常见问题——在执行Left Join操作时出现数据缺失。 #### 二、问题复现 问题发生在如下的SQL语句中: ```sql SELECT a.* FROM ( SELECT ...
总的来说,理解和熟练运用LEFT JOIN、LEFT SEMI JOIN以及EXISTS子句是Hive SQL查询中的关键技能,它们在大数据分析中扮演着重要角色,帮助用户从海量数据中提取有价值的信息。根据实际需求选择合适的连接类型,能够...
Hive on Tez在处理insert语句与union all结合时,会进行优化,这可能导致在MR引擎中查询结果为空。解决方法包括: - 避免使用union all生成结果表,改用其他查询方式。 - 设置`mapred.input.dir.recursive`为true...
NULL 博文链接:https://weigang-gao.iteye.com/blog/2260663
- **处理NULL值**:JOIN操作中NULL值的处理方式会影响查询结果。 #### 九、优化与技巧 - **全排序**:通过合理的设置可以实现高效的数据排序。 - **笛卡尔积**:处理笛卡尔积需要特别注意避免性能问题。 - **EXIST...
Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)对存储在Hadoop分布式文件系统(HDFS)上的大型数据集进行查询和分析。 描述中的信息简洁,没有提供具体细节,...
在Hive中,通过使用`LEFT SEMI JOIN`而非`LEFT OUTER JOIN`,可以在不包含NULL值的情况下快速找到匹配项,从而减少数据传输和处理的时间,特别是在处理大规模数据集时效果显著。 ### 存储格式和压缩 存储格式和...
涵盖字符集、压缩、COUNT(DISTINCT)、JOIN、DML 操作、HAVING、子查询、JOIN 中的 NULL 处理、分号字符等。 6. 优化 包括 Hadoop 计算框架的特性、常用优化手段、全排序、笛卡尔积、EXIST 子句、决定 reducer 个...
Hive是一款基于Hadoop的数据仓库工具,用于数据的存储、查询和分析。在Hive中,参数配置起着非常重要的作用,它可以影响Hive的性能、安全性和执行效率。本文将对Hive的参数配置进行详细的解释,以便更好地使用Hive。...
在使用Hive时,需要关注一些重要的注意事项,比如字符集问题、数据压缩方法、JOIN操作的语义、DML操作的限制、HAVING子句的使用、子查询的处理以及如何处理JOIN中的null值。 Hive的FAQ部分通常涵盖了常见问题的解答...
- 将查询结果写入文件系统 ```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**...
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 是一个广泛使用的工具,它基于 Hadoop 平台,提供了SQL-like 的查询语言,使得处理大规模数据变得更加便捷。然而,随着数据量的不断增长,Hive 的性能优化变得至关重要。本篇文章将深入探讨...
在大数据处理领域,Hive作为一个数据仓库工具,被广泛应用于海量数据的存储、查询和分析工作中。本文将通过一系列实战案例,详细介绍Hive的基本操作及其应用场景。 #### 一、Hive基础知识简介 Hive是基于Hadoop的...
Hive 元数据库操作是 Hive 运维中常用的操作之一,它提供了对元数据的管理和查询功能。在 Hive 中,元数据是指对数据的描述信息,如表名、表路径、分区信息、列信息等。下面将对 Hive 元数据库操作的常用 SQL 语句...
在本文中,我们将详细介绍SQL Left Join的使用方法、特点和区别,以及与Right Join和Inner Join的比较。 一、SQL Left Join的定义和使用 SQL Left Join也称为左外连接,它可以将左表中的所有记录与右表中的记录...
此外,在JOIN操作时,处理null值的语义区别也需要特别注意。 Hive的优化与技巧涉及到: - 全排序的实现方法 - 笛卡尔积的实现 - exist/in子句的写法 - 如何决定reducer的个数 - 如何合并MapReduce操作 - 使用Bucket...