1

我正在尝试使用S3 Select 使用以下查询从 S3 上的 CSV 文件中查询一些数据:

aws s3api select-object-content \
--bucket <bucket> \
--key <key> \
--expression "select `lineItem/intervalUsageStart` from s3object limit 100" \
--expression-type 'SQL' \
--input-serialization '{"CSV": {}, "CompressionType": "NONE"}' \
--output-serialization '{"CSV": {}}' "output.csv"

但是,这失败了:

An error occurred (ParseUnExpectedKeyword) when calling the SelectObjectContent operation: Unexpected keyword found, KEYWORD:from at line 1, column 9.

我相信这是因为我使用反引号来逃避我想从中获取数据的列。如果我不转义列名,则会失败并显示以下内容:

An error occurred (LexerInvalidChar) when calling the SelectObjectContent operation: Invalid character at line 1, column 16.

我猜这是因为列名中的 / 。有没有办法从这个文件的这个特定列中获取数据?提前致谢!

4

1 回答 1

0

我看到 S3 Select 也支持按索引获取列(例如_1_2对于第一列、第二列等)。这对现在也有帮助。将上述查询修改为:

aws s3api select-object-content \
--bucket <bucket> \
--key <key> \
--expression "select _2 from s3object limit 100" \
--expression-type 'SQL' \
--input-serialization '{"CSV": {}, "CompressionType": "NONE"}' \
--output-serialization '{"CSV": {}}' "output.csv"

(因为lineItem/intervalUsageStart是 CSV 中的第二列)帮助解决了这个问题。

于 2020-08-13T15:45:09.017 回答