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 文档没有提供有关此错误的后续信息。
所以我的问题是,出了什么问题?关于列标题是否有未记录的要求?是否有一种未记录的方式来引用列?“选择来源”功能是否存在错误?
我做了以下事情:
这些查询不起作用:
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)
| 归档时间: |
|
| 查看次数: |
9804 次 |
| 最近记录: |