3

Amazon 的 S3 Select允许用户针对 S3 对象编写 SQL,但关于支持哪些标准 SQL 功能的文档不足。

根据文档,Amazon S3 Select支持AVG、、、、和。但是当我运行任何聚合查询时,我会收到一个错误,例如COUNTMAXMINSUM

botocore.exceptions.ClientError:调用 SelectObjectContent 操作时发生错误 (UnsupportedSqlOperation):不支持的 SQL 操作 GROUP BY。请查看服务文档以了解支持的操作。

这是一些要重现的代码:

import boto3
client = boto3.client('s3')

response = client.select_object_content(Bucket='my-bucket', Key='object.csv', 
    ExpressionType='SQL', Expression="select ID, count(*) from s3object group by s.ID ",
    InputSerialization = {'CSV':{"FileHeaderInfo": "Use"}, 'CompressionType': 'GZIP'},
    OutputSerialization = {'CSV':{}})

event_stream = response['Payload']
with open('output', 'wb') as f:
    for event in event_stream:
        if 'Records' in event:
            data = event['Records']['Payload']
            f.write(data)
4

1 回答 1

6

根据 John 的评论,聚合函数仅在没有GROUP BY.

这里有一些注意事项和提示

  • WHERE您显然可以使用orLIMIT子句过滤要执行聚合的集合。
  • 一切都是一个字符串,所以任何数字运算都需要一个CAST,例如sum(cast(my_col as float))
  • MAX使用和MIN将数字列解释为字符串的混合结果,即没有强制转换;它最初是成功的,但经过进一步处理后,我无法重现该成功
  • 不能在与非聚合函数相同的查询中执行聚合函数,并且错误消息很神秘:A column name or a path provided in the query expression does not exist
于 2018-05-08T16:34:07.580 回答