ala可以读取使用。执行join语句时,impala明显比hive快很多。在impala中执行INVALIDATE METADATA 、 REFRESH table_name语句以便 Impala 识别新的或已更改的数据。
?
但是,对于EXTERNAL TABLE数据存放在ES上的,Hive SQL可以正确执行,Impala SQL执行不正确,出错信息如下所示。
?
ERROR: AnalysisException: Failed to load metadata for table: default.hive_table?
CAUSED BY: TableLoadingException: Unrecognized table type for table: default. es_table?
可见使用elasticsearch-hadoop来做Impala计算,是不可行的。相比较下,数据存储在HBase中,使用Impala执行SQL语句却没有问题。具体可以查看《使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作》一文。
?
综上所述
?
数据存储在Elasticsearch中,使用Hive进行SQL操作,并不是一个好主意,这是由于ES的数据类型所限导致的ES与Hive的数据类型对应问题,并且Hive并不能用到Elasticsearch建立的索引的高效查询好处。虽然以上方案可以解决使用Hive对Elasticsearch较复杂SQL语句查询,但不方便也不高效,且Impala也不能支持。
故,目标1达成,但目标2没有达成。