SKIP / OFFSET / ScanRange строк в AWS S3 Выбрать - PullRequest
1 голос
/ 18 марта 2020

Интересно, кто-нибудь понял, как пропустить строки в S3 Выберите ?

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 обрабатывает частичные записи?

Обновить : Вы не можете использовать ScanRange для gzip файла:

botocore.exceptions.ClientError: Произошла ошибка (UnsupportedScanRangeInput) при вызове операции SelectObjectContent: запросы диапазона сканирования не поддерживаются для объектов с типом GZIP.

...