在 Glue 表上创建 presto 视图导致错误,数据类型无效:整数

Creating a presto view on Glue table causing an error with invalid data type: integer

提问人:vvazza 提问时间:11/11/2023 更新时间:11/11/2023 访问量:36

问:

我在 Glue 目录table_a中有一个表,它有 2 列 -

数据类型
emp_id bigint
emp_name 字符串
年龄 int

我正在尝试创建一个 presto 视图来查询 Athena 上的数据。

create or replace view view_a
as
select emp_id, age
from table_a

当我查询表时,出现以下错误:

HIVE_INVALID_METADATA: Glue table table_a column 'age' has invalid data type:integer

请告诉我我在这里做错了什么。

sql aws-glue amazon-athena

评论

0赞 Guru Stron 11/11/2023
这意味着在数据的某个地方,你有一个不是 的值。int
0赞 vvazza 11/11/2023
感谢您的回复!我分析了基础表,该列期限似乎具有空白值。这是否是视图抛出错误的原因?我该如何解决这个问题?基础表上的空白值是来自 DB2 的历史数据,它们可以包含空白值或空值
0赞 NickW 11/11/2023
如果该列包含除整数或 null 以外的任何内容,则会出现错误。“空白”是什么意思——一个空格、一个空字符串、一个非打印字符?
0赞 vvazza 11/11/2023
这是一个空字符串。我尝试从表中删除空字符串值,并尝试重新创建相同的视图。我遇到了同样的错误。
0赞 NickW 11/11/2023
嗨 - 你说的“空字符串”是什么意思,字段中字符的 ascii 值是多少?你是如何删除它们的 - 你运行的 SQL 是什么?

答:

0赞 Adrian Maxwell 11/11/2023 #1

该列可能包含的值不能是整数。建议运行这样的查询来查找 NULL 或非整数值。age

SELECT emp_id, age,
CASE 
    WHEN age IS NULL THEN 'Null Value'
    WHEN CAST(age AS STRING) REGEXP '^[0-9]+$' THEN 'Integer'
    ELSE 'Non-Integer'
END as age_type
FROM table_a
WHERE age IS NULL OR CAST(age AS STRING) REGEXP '^[^0-9]+$'

评论

0赞 vvazza 11/11/2023
感谢您的回复。该表确实具有空字符串值,我尝试从表中删除这些值并重新创建视图。我仍然遇到同样的错误。