首页 > 解决方案 > AWS S3 Select 中的 SKIP/OFFSET/ScanRange 行

问题描述

我想知道是否有人想出如何在S3 Select中跳过行?

SELECT S.* FROM s3object S SKIP 100 LIMIT 200
--or
SELECT * from s3object s LIMIT 5, 10
--or
SELECT * from s3object s limit 5 OFFSET 10

看起来您可以限制返回的记录数

s3 = boto3.client('s3')
bucket = bucket
file_name = file

sql_stmt = """SELECT S.* FROM s3object S LIMIT 10"""


req = s3.select_object_content(
    Bucket=bucket,
    Key=file,
    ExpressionType='SQL',
    Expression=sql_stmt,
    InputSerialization = {'CSV': {'FileHeaderInfo': 'USE'}},
    OutputSerialization = {'CSV': {}},
)

还有一个请求将 OFFSET/SKIP 添加到 s3api,但它已关闭。

您也可以以字节为单位指定ScanRange,但如果对象被压缩会发生什么?

它是以字节为单位的压缩对象还是未压缩对象?

如果未压缩,S3 Select 如何处理部分记录?

更新:您不能在gzip文件中使用 ScanRange:

botocore.exceptions.ClientError:调用 SelectObjectContent 操作时发生错误 (UnsupportedScanRangeInput):GZIP 类型的对象不支持扫描范围查询。

标签: amazon-web-servicesamazon-s3amazon-s3-select

解决方案


推荐阅读