Impala 查询无法使用 NullPointerException 检索结果

Posted

技术标签:

【中文标题】Impala 查询无法使用 NullPointerException 检索结果【英文标题】:Impala query cannot retrieve result with NullPointerException 【发布时间】:2016-06-22 13:00:02 【问题描述】:

我在 hive/impala 上运行了以下查询:

select count(p.id) as tweet_count, p.author as author,p.profile_image_url as profile_image_url,p.screen_name as screen_name,
concat_ws('/',min(p.postday),min(p.postmonth),min(p.postyear) ) as creation_date,p.message message,af.followerid as follower 
from post p 
inner join author_follower af on af.id like if(p.author= null, '', concat(p.author,'%'))
where p.hashtaglist like 'hashtagtobeused' 
group by author,profile_image_url,screen_name,message,follower
ORDER BY cast(min(postyear) as int),cast(min(postmonth) as int),cast(min(postday) as int),cast(min(posthour) as int) ASC;

但由于某种原因,我得到以下错误结果

您的查询有以下错误:

Bad status for request 3304: TGetOperationStatusResp(status=TStatus(errorCode=None, errorMessage=None, sqlState=None, infoMessages=None, statusCode=0), operationState=5, errorMessage=None, sqlState=None, errorCode=None)

我检查了查询,但找不到问题,谁能帮助并指导问题出在哪里?为什么我有这个错误而不是结果集

【问题讨论】:

该消息仅表示“服务器已失败(甚至崩溃)”——查看服务器端的 Impala 日志,了解原因和方式。我已经看到守护进程因残酷的SEGV 低级进程故障而崩溃(C++ 速度很快,但内存处理的错误不能原谅......) 【参考方案1】:

请仔细考虑重新格式化查询,因为在某些情况下,当 SQL 解析本身由于空格等简单问题而失败时,Impala 会与 SEGV 一起崩溃。如果您正在运行 Cloudera,您会在运行查询的节点上的 /run/cloudera-scm-agent/process 中找到日志。

我们通过注意 SQL 格式来解决这些问题(这也是一种很好的做法,因为它使查询错误更容易被发现),例如

SELECT
    COUNT(p.id)                                                     AS tweet_count,
    p.author                                                        AS author,
    p.profile_image_url                                             AS profile_image_url,
    p.screen_name                                                   AS screen_name,
    concat_ws('/', MIN(p.postday), MIN(p.postmonth), MIN(p.postyear) ) AS creation_date,
    p.message                                                       AS MESSAGE,
    af.followerid                                                   AS follower
FROM
    post p
INNER JOIN
    author_follower af
ON
    af.id LIKE IF(p.author = NULL, '', concat(p.author, '%'))
WHERE
    p.hashtaglist LIKE 'hashtagtobeused'
GROUP BY
    author,
    profile_image_url,
    screen_name,
    MESSAGE,
    follower
ORDER BY
    CAST(MIN(postyear) AS INT),
    CAST(MIN(postmonth) AS INT),
    CAST(MIN(postday) AS INT),
    CAST(MIN(posthour) AS INT) ASC;

(顺便说一句,我使用 dbVisualizer 来验证和重新格式化查询语法——值得考虑的好工具)

【讨论】:

以上是关于Impala 查询无法使用 NullPointerException 检索结果的主要内容,如果未能解决你的问题,请参考以下文章

cloudera impala 中的多个查询执行

无法使用 Impala JDBC 驱动程序通过 Java 应用程序连接到 Impala

用于关闭 impala 查询的 Python 脚本。我正在使用 urllib 和 json 库

FROM 语句的 Apache Impala 内部查询限制

Cloudera Apache impala 查询:超出内存限制:无法分配行批处理 EXCHANGE_NODE?

Kylin 下压查询 (Pushdown) 到 Impala