Amazon S3 选择不工作

Ken*_*ger 5 sql csv amazon-s3 amazon-web-services amazon-s3-select

Amazon S3 有一项新功能select from,允许对简单数据文件(例如 CSV 或 JSON)运行简单 SQL 查询。所以我想我会尝试一下。

我创建了以下 CSV 并将其上传到我位于俄勒冈州的 S3 存储桶(我认为这个文件非常简单):

aaa,bbb,ccc
111,111,111
222,222,222
333,333,333
Run Code Online (Sandbox Code Playgroud)

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

从 s3object s 选择 *

...按预期工作,返回:

111,111,111
222,222,222
333,333,333
Run Code Online (Sandbox Code Playgroud)

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

select s._1, s._2 from s3object s
Run Code Online (Sandbox Code Playgroud)

...错误消息是“文件中缺少查询中的某些标头。请检查文件并重试。”。

还尝试了以下方法,每次都会收到相同的错误:

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
Run Code Online (Sandbox Code Playgroud)

因此,每当我的查询在 SELECT 或 WHERE 子句中按名称或编号引用列时,我都会收到“查询中的标头丢失”的信息。AWS 文档没有提供有关此错误的后续信息。

所以我的问题是,出了什么问题?关于列标题是否有未记录的要求?是否有一种未记录的方式来引用列?“选择来源”功能是否存在错误?

Joh*_*ein 4

我做了以下事情:

  • 使用上面显示的内容创建了一个文件
  • 在文件上输入S3 Select,并勾选File has header row
  • 没有更改其他设置

这些查询不起作用:

select s._1, s._2 from s3object s
select * from s3object s where s._1 = 111
Run Code Online (Sandbox Code Playgroud)

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

这些查询确实有效:

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)
Run Code Online (Sandbox Code Playgroud)

当我将最后两个查询视为字符串时,它们按预期返回了行:

select * from s3object s where aaa = '111'
select * from s3object s where s.aaa = '111'
Run Code Online (Sandbox Code Playgroud)