Impala 可以从表中执行 COUNT(*) 但不能执行 SELECT *

Posted

技术标签:

【中文标题】Impala 可以从表中执行 COUNT(*) 但不能执行 SELECT *【英文标题】:Impala can perform a COUNT(*) but not a SELECT * from a table 【发布时间】: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 错误消息。 【参考方案1】:

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

Describe <table name>;

  | invalid_type |         |
  | invalid_type |         |

【讨论】:

【参考方案2】:

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

【讨论】:

请在问题附近添加此类信息作为评论,而不是作为答案

以上是关于Impala 可以从表中执行 COUNT(*) 但不能执行 SELECT *的主要内容,如果未能解决你的问题,请参考以下文章

尝试从表中运行 select count(*) 查询时在配置单元中出错

从表和参考表中选择列、count(id)

Oracle 上 SELECT * 和 SELECT COUNT(*) 之间的结果大小不同

从表中删除所有记录 - doCMD.RunSQL

如何从表中选择所有列,以及 ROWNUM 等其他列?

Pyspark:如何从表中提取统计信息?