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(*) 查询时在配置单元中出错