【问题标题】:Impala can perform a COUNT(*) but not a SELECT * from a tableImpala 可以从表中执行 COUNT(*) 但不能执行 SELECT *
【发布时间】:2016-04-22 14:06:53
【问题描述】:

我遇到了一种奇怪的 Impala 行为。我已经从复制到 Hadoop 集群中的 .csv 文件在 HUE 中创建了一个表。我可以通过 Metastore Manager 在 HUE 中正确导航表,但我无法在 Impala 中运行以下查询,因为它会引发 IllegalStateException: null 异常:

select * 
from my_db.my_table
limit 100;

奇怪的是,下面的命令检索到了正确的行数:

select 
  count(*)
from my_db.my_table;

【问题讨论】:

  • 尝试 REFRESH [db_name.]table_name,如果有效,请尝试 INVALIDATE METADATA [[db_name.]table_name]
  • 我已经做了invalidate metadata,因为不这样做我什至无法在 Impala 中查询表。我也试过refresh,但没有帮助。
  • 试试不限100
  • 如果我删除limit 100,我会收到相同的IllegalStateException: null 错误消息。

标签: hadoop hive impala


【解决方案1】:

错误是由无效类型引起的。 impala 并不支持所有的 hive 数据类型。 Impala 有时间戳,没有日期类型。当您的表具有日期类型时,它会在 impala 中显示为 invalid_type,并且 impala 无法选择此数据类型。对于解决方案,请尝试将列更改为时间戳

Describe <table name>;

  | invalid_type |         |
  | invalid_type |         |

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题。我将查询更改为分别从表中选择每一列(即选择 col1、col2、col3 等),发现 Impala 不喜欢日期数据类型列。将其更改为时间戳修复了问题,我现在可以从表中选择 *。

    【讨论】:

    • 请在问题附近添加此类信息作为评论,而不是作为答案
    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多