首页 > 数据库 >snappy压缩格式下使用数字与字符串不等于比较,hiveSQL和sparkSQL表现不一致的行为记录。

snappy压缩格式下使用数字与字符串不等于比较,hiveSQL和sparkSQL表现不一致的行为记录。

时间:2024-03-05 14:56:12浏览次数:28  
标签:UNION hiveSQL value 字符串 zero snappy sparkSQL test SELECT

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结果:
Hive结果

SparkSQL结果:
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

相关文章

  • Trino(PrestoSQL)和HiveSQL的时间格式转换对比
    1.获取当前时间--hiveselectfrom_unixtime(unix_timestamp());-->2021-01-0622:53:16--精确到今天的时分秒selectfrom_unixtime(unix_timestamp('2021-12-0713:01:03'),'yyyy-MM-ddHH:mm:ss');-->2021-12-0713:01:03--精确到今天的时分秒指定格式selectcurrent......
  • SparkSQL无法创建多个Session解决方法
    一、问题现象SparkSQL创建多个session报错,不能创建一个链接,链接Spark自带的数据库derby2024-01-2519:50:59.053[INFO]24/01/2519:50:59INFO!PLExecution!:ExecuteSQL:DROPTABLEIFEXISTSibor_nfsd_instjmport2024-01-2519:51:01.628(INFO]24/01/2519:51:01IN......
  • hivesql报错:java.net.SocketTimeoutException: Read timed out
    场景:在dolphin里面执行hivesql脚本,报错java.net.SocketTimeoutException:Readtimedout解决方式:hive.metastore.client.socket.timeout=1000s 扩展:"Hive报Readtimedout"错误可能也与YARN的资源限制有关。可以通过增加YARN的配置参数来解决此错误。<property><name......
  • SparkSQL 操作Hive In Java
    本文的前提条件:SparkSQLinJava1.增加POM依赖<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependenc......
  • SparkSQL 操作Hive
    Spark中本身内置了Hive,但一般用于测试,生产环境中需要连接外置的Hive1.将Hive的配置文件hive-site.xml拷贝到Spark的配置目录下cp/usr/hive/apache-hive-3.1.3-bin/conf/hive-site.xml/usr/spark/spark-3.5.0-bin-hadoop3/conf2.将MysqlJDBC驱动放置在Spark的jars目录下1.......
  • SparkSQL 自定义聚合函数[强类型] & DSL
    本文的前提条件:SparkSQLinJava参考地址:UserDefinedAggregateFunctions(UDAFs)1.声明列实体类packagecn.coreqi.entity;importjava.io.Serializable;publicclassUserimplementsSerializable{privateStringusername;privateLongage;publi......
  • SparkSQL 自定义聚合函数[强类型]
    本文的前提条件:SparkSQLinJava参考地址:UserDefinedAggregateFunctions(UDAFs)1.自定义实体类packagecn.coreqi.entity;importjava.io.Serializable;publicclassAverageimplementsSerializable{privatelongtotal;privatelongcount;publi......
  • SparkSQL 自定义聚合函数[弱类型]
    本文的前提条件:SparkSQLinJava代码如下1.自定义聚合函数packagecn.coreqi.udaf;importorg.apache.spark.sql.Row;importorg.apache.spark.sql.expressions.MutableAggregationBuffer;importorg.apache.spark.sql.expressions.UserDefinedAggregateFunction;import......
  • SparkSQL 自定义函数
    本文的前提条件:SparkSQLinJava参考地址:ScalarUserDefinedFunctions(UDFs)完整代码packagecn.coreqi;importstaticorg.apache.spark.sql.functions.udf;importorg.apache.spark.SparkConf;importorg.apache.spark.sql.*;importorg.apache.spark.sql.expres......
  • SparkSQL in Java
    参考地址:StartingPoint:SparkSession1.新建Maven项目,POM引入依赖<dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.13</artifactId><version&......