我有一个查询可以在同一个数据集上运行,有时会失败,有时会成功
查询是由 hive 元数据服务生成的,我无法修改。
这是查询的简化版本:
select
"TBLS"."TBL_ID",
"FILTER0"."PART_ID",
"TBLS"."TBL_NAME",
"FILTER0"."PART_KEY_VAL"
from
"PARTITIONS"
inner join "TBLS" on
"PARTITIONS"."TBL_ID" = "TBLS"."TBL_ID"
and "TBLS"."TBL_NAME" = 'test_table_int'
inner join "PARTITION_KEY_VALS" "FILTER0" on
"FILTER0"."PART_ID" = "PARTITIONS"."PART_ID"
where
cast("FILTER0"."PART_KEY_VAL" as decimal(21, 0)) = 1
当我启动一个新数据库并填充相关表时,这就是整个数据的样子(没有任何过滤器的查询):
并运行上面的查询将返回一行(PART_KEY_VAL
= 1 的那一行)
在我运行一些写入这些表的自动化测试后,问题就开始了。我找不到任何模式,我只是运行了一些写入这些表的复杂测试
现在,如果我再次填充这些表,数据看起来很相似:
但运行上面的查询将导致:
SQL 错误 [22P02]:错误:数字类型的无效输入语法:“c”
出于某种原因,值“c”被转换为十进制并且它失败了,即使对相同数据的相同查询在早些时候工作
这种行为的原因可能是什么?
作为参考,这里是生成查询的地方,但我在上面简化了一点:https ://github.com/apache/hive/blob/rel/release-3.1.2/standalone-metastore/src/main/java /org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java#L1289-L1339