首页 > 解决方案 > 从 Impala 查询和从 Hive 查询的区别?

问题描述

我有一个 Hive 源表,其中包含:

select count(*) from dev_lkr_send.pz_send_param_ano;
--25283 lines

我正在尝试获取所有表格行并将它们放入数据框中,使用Spark2-Scala. 我做了以下事情:

val dfMet = spark.sql(s"""SELECT
    CD_ANOMALIE,
    CD_FAMILLE,
    libelle AS LIB_ANOMALIE,
    to_date(substr(MAJ_DATE, 1, 19), 'YYYY-MM-DD HH24:MI:SS') AS DT_MAJ,
    CLASSIFICATION,
    NB_REJEUX,
    case when indic_cd_erreur = 'O' then 1 else 0 end AS TOP_INDIC_CD_ERREUR,
    case when invalidation_coordonnee = 'O' then 1 else 0 end AS TOP_COORDONNEE_INVALIDE,
    case when typ_mvt = 'S' then 1 else 0 end AS TOP_SUPP,
    case when typ_mvt = 'S' then to_date(substr(dt_capt, 1, 19), 'YYYY-MM-DD HH24:MI:SS') else null end AS DT_SUPP
FROM ${use_database}.pz_send_param_ano""")

当我执行dfMet.count()它返回:46314

关于差异来源的任何想法?


编辑1:

从 Hive 尝试相同的查询返回与数据框中相同的值(我之前从 Impala UI 查询)。

有人可以解释一下区别吗?我正在研究 Hue4。

标签: sqlscalaapache-sparkdataframehive

解决方案


一个潜在的差异来源是您的 Hive 查询正在从过时的元存储返回结果,而不是对表运行新计数。

如果您将 hive.compute.query.using.stats 设置为 true 并且该表已计算统计信息,那么它将从元存储返回结果。如果是这种情况,则可能是您的统计数据已过时,您需要重新计算它们。


推荐阅读