Amazon S3 Select中的From无法工作。

5
亚马逊S3有一个新功能叫做“select from”,它允许用户对简单的数据文件(如CSV或JSON)运行简单的SQL查询。因此,我想试一试。
我在俄勒冈州创建并上传了以下CSV到我的S3桶中(我认为这个文件非常简单)。
aaa,bbb,ccc
111,111,111
222,222,222
333,333,333

我指出这是带标题行的CSV,并发出以下SQL语句:

select * from s3object s

...预期返回结果如下:
111,111,111
222,222,222
333,333,333

然后我尝试了提供的一个样例查询,但失败了:

select s._1, s._2 from s3object s

...错误信息为“查询中的某些标题在文件中缺失。请检查文件并重试。”。

还尝试了以下操作,每次都收到相同的错误:

select aaa from s3object s
select s.aaa from s3object s
select * from s3object s where aaa = 111
select * from s3object s where s.aaa = 111
select * from s3object s where s._1 = 111

任何时候,当我的查询引用到一个列,无论是通过名称还是数字,在SELECT或WHERE子句中,我都会收到“查询中缺少标题”的错误提示。AWS文档没有提供有关此错误的后续信息。
所以我的问题是,出了什么问题?是否有关于列标题的未记录要求?是否有未记录的引用列的方法?“Select From”功能是否存在错误?
3个回答

4
我完成了以下操作:
  • 创建了一个包含上述内容的文件
  • 在该文件上启用了 S3 Select,并勾选了“文件具有标题行”
  • 未更改任何其他设置

以下查询无法正常工作:

select s._1, s._2 from s3object s
select * from s3object s where s._1 = 111

它们没有起作用的原因是文件包含标题,因此每列都有实际名称。

这些查询已经起作用:

select aaa from s3object s
select s.aaa from s3object s
select * from s3object s where aaa = 111 (Gave empty result)
select * from s3object s where s.aaa = 111 (Gave empty result)

当我将最后两个查询视为字符串时,它们按预期返回了行:
select * from s3object s where aaa = '111'
select * from s3object s where s.aaa = '111'

他们按预期返回了行,但标题行丢失了。是否有办法使查询结果包含标题行以及筛选后的数据? - user3807691

0

s3 select 将所有内容都视为字符串。查询语句

select * from s3object s where cast(aaa as int) = 111
select * from s3object s where cast(s.aaa as int) = 111

如果正确勾选/取消勾选标题行,则应返回预期结果。


0

回到这个问题,我冲动地决定用一个新的完全相同的示例文件替换这个样本文件,现在我没有遇到这个问题。事实上,我无法复制最初发布的问题。

我有几个理论:字符编码、行尾字符和原始文件中可能存在额外行,但我一直无法重新创建原始问题。

我尝试了不同的编辑器来创建源文件,尝试了Unix与Windows的行尾字符,尝试了末尾的额外行,尝试了大写与小写列标题,以及尝试了不同的区域。现在一切都正常工作,所以我完全不知道为什么一开始不能工作。

生活继续。感谢大家的努力。


顺便说一句:我也遇到了同样的问题。我有一个标题行。但是我取消了“文件具有标题行”的选项,事情就变得更好了。它在结果中返回了标题,但至少它能工作了。我猜测(没有证据)后端在解析标题行时出现了某种故障并提前退出。 - cmonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接