Hive版本:2.3.4
Spark版本:2.4.0
当时用Snappy格式对表进行压缩时,时用<>符号将字符串与数字进行比较会产生不一致的结果。SparkSQL结果并非预期结果。
DROP TABLE IF EXISTS test.zero_test;
CREATE TABLE test.zero_test TBLPROPERTIES ("orc.compress" = "SNAPPY")
AS
SELECT
'0' AS value
UNION ALL
SELECT
'000000000000001234' AS value
UNION ALL
SELECT
'000000000000001235' AS value
UNION ALL
SELECT
'000000000000001236' AS value
UNION ALL
SELECT
'123231410120391845' AS value
UNION ALL
SELECT
'123235656453391845' AS value
UNION ALL
SELECT
'1232334279892211845' AS value
UNION ALL
SELECT
'AA32334279892211845' AS value
;
进行查询
SELECT *
FROM test.zero_test
WHERE value <> 0
;
Hive结果:
SparkSQL结果:
建议:写严谨点,使用字符串。
SELECT *
FROM test.zero_test
WHERE value <> '0'
;
注:因为在使用分区时使用以数字的形式与yyyyMMdd的分区日期进行比较,能够正常比较,同时也在多个关系型数据库中使用整形与数字字符串进行比较正常,所以在线上看到Hive的预览结果与平台SparkSQL的不一致时,并未第一时间往数字与字符串比较异常这方面想。后经查看日志对比数据量发现SparkSQL使用!=、<>不等于符号(!=0)在Snappy压缩表上使用会将非0的数据也过滤掉。
标签:UNION,hiveSQL,value,字符串,zero,snappy,sparkSQL,test,SELECT From: https://www.cnblogs.com/axianibiru/p/18054024