Hive“显示表”因 MetaException 失败

问题描述 投票:0回答:4

在 AWS EMR (5.33.1) 上使用 Hive 2.3.7 我创建了一个数据库,该数据库在调用

show databases;
时可以正确显示。然后我创建一个似乎可以正常工作的表(没有例外)。当我调用
describe <table>;
时,它会正确返回表的名称和架构。但是,当我运行
show tables;
时,会返回以下错误:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.MetaException(message:Got exception: org.apache.hadoop.hive.metastore.api.MetaException 
Exception thrown when executing query : 
SELECT A0.TBL_NAME,A0.TBL_NAME AS NUCORDER0 FROM TBLS A0 LEFT OUTER JOIN DBS B0 ON 
A0.DB_ID = B0.DB_ID WHERE B0.`NAME` = ? AND LOWER(A0.TBL_NAME) LIKE '_%' ESCAPE '\' ORDER BY NUCORDER0)

如果有人能够阐明这个问题,我们将不胜感激。

我用谷歌搜索了一下,没有发现任何有用的东西。

编辑:

show tables in <schema>;
返回相同的结果

编辑 2:通过将 EMR 更新为

emr-6.4.0
解决了此问题。除了这里提到的内容之外,我对这个问题没有深入的了解。

hive amazon-emr
4个回答
1
投票

我认为您的元数据数据库已损坏/包含错误数据。我会做一个备份。 然后看看是否可以恢复一些以前的备份。 我会直接连接到数据库并查看这些表,看看是否有任何异常。 如果您发现错误的表条目,请不要将其删除。 我会尝试使用“删除表”命令(通过配置单元)将其删除以保持完整性。 如果需要,您可以删除数据库中的条目,您有备份并且可以恢复表。


1
投票

Hive 元存储使用 datanucleus,https://www.datanucleus.org/,用于元存储数据库的所有 CRUD。它生成

\\
来转义反斜杠本身,但 Mariadb 将
\\
解释为字符串文字。所以需要使用
\\
作为转义符。

您可以在此处查看 sql_mode 设置,https://mariadb.com/kb/en/sql-mode/#sql_mode-values

从模式中去掉

NO_BACKSLASH_ESCAPE
就应该没问题了。


0
投票

尝试提供您想要查看表格的架构:

show tables in schema_name;

0
投票
jdbc:{{mariadburi}}?sessionVariables=sql_mode='ANSI,NO_ENGINE_SUBSTITUTION,NO_BACKSLASH_ESCAPES'

在您的

hive-site.xml
中,对于此键
javax.jdo.option.ConnectionURL
,设置上述值。

我们有各种可用的 sql 模式。需要设置这个sqlmodes,

sql_mode='ANSI,NO_ENGINE_SUBSTITUTION,NO_BACKSLASH_ESCAPES'

/
视为查询中的转义字符。

© www.soinside.com 2019 - 2024. All rights reserved.