Athena 显示没有针对布尔列的值,table 使用胶水爬虫创建

Athena shows no value against boolean column, table created using glue crawler

我正在使用 aws glue csv 爬虫来爬取包含 csv 文件的 s3 目录。爬虫在为每一列创建具有正确数据类型的架构的意义上工作正常,但是,当我从 athena 查询数据时,它不显示布尔类型列下的值。

csv 看起来像这样:

"val","ts","cond"
"1.2841974","15/05/2017 15:31:59","True"
"0.556974","15/05/2017 15:40:59","True"
"1.654111","15/05/2017 15:41:59","True"

而爬虫创建的table是:

Column name Data type
val         string
ts          string
cond        boolean

然而,当我 运行 说 select * from <table_name> limit 10 它 returns:

    val         ts                      cond
1   "1.2841974" "15/05/2017 15:31:59"   
2   "0.556974"  "15/05/2017 15:40:59"   
3   "1.654111"  "15/05/2017 15:41:59"   

有谁知道可能是什么原因吗?

我忘了补充,如果我将 cond 列的数据类型更改为 string,它会将数据显示为字符串,例如"True""False"

我不知道为什么 Glue 将 cond 列分类为布尔值,因为 Athena 不会将该值理解为布尔值。我认为这是 Glue 中的一个错误,或者它不是专门针对 Athena 的人工制品。 Athena 期望布尔值是 truefalse。我不记得这是否包括字符串的不同大写字母,但无论哪种方式你都会失败,因为它们被引用了。实际的错误是 Glue 没有配置你的 table 以便它从字符串中删除引号,因此 Athena 看到一个布尔列包含 "True" 和引号和所有,这不是受支持的布尔值价值。相反,您会得到 NULL 个值。

您可以尝试将 table 改为使用 OpenCSVSerDe,它支持引用值。

令人惊讶的是 Glue 继续在这样的基本事情上跌跌撞撞。不幸的是,胶水很少值得自己编写一些基本脚本。