spark与hive查询结果不一致


    1. spark.sql.hive.convertMetastoreParquet=false;
      spark.sql.hive.convertMetastoreOrc=false;
      为了优化读取parquet格式文件,spark默认选择使用自己的解析方式读取数据,结果读出的数据就有问题。

    hive写的parquet的表用hive的;spark写的parquet表用spark的
    2. 精读问题
    3. 可以看下SQL 中 join on 两边的字段类型是否一致;如果不一致,很可能会出现问题

    当 on 条件两边字段类型都一致的情况下,毫无疑问,在hive和spark中都是正确的
    当 on 条件两边字段类型不一致的情况下,需要看类型转换方向决定,判断结果是否正确
    1)当 on 条件两边字段类型,一边是decimal,一边是bigint
    无论是
    bigint=decimal
    decimal=bigin

    都转成 decimal 正确
    2)当 on 条件两边字段类型,一边是string,一边是bigint
    spark-sql: 把 string 转成 bigint,结果正确
    spark-shell: 把 string 转成 bigint,结果正确
    hive: 把 string,bigint 都转成 double,结果错误
    3)当 on 条件两边字段类型,一边是string,一边是decimal
    spark-shell: string,decimal 都转成了 double,结果错误
    spark-sql: string,decimal 都转成了 double,结果错误
    hive: string,decimal 都转成了 decimal(38,18), 结果正确