选择API快速入门指南 Slack

传统的对象检索始终是整个实体,即5 GiB对象的GetObject将始终返回5 GiB数据。S3 Select API允许我们使用简单的SQL表达式来检索数据的子集。通过使用Select API仅检索应用程序所需的数据,可以实现大幅的性能改进。

您可以使用Select API查询具有以下功能的对象:

当未键入值时(例如,读取CSV数据时),将根据上下文执行类型推断和值的自动转换。如果存在,则CAST功能将覆盖自动转换。

1. 先决条件

2.安装 boto3

aws-sdk-python此处安装适用于Python的AWS开发工具包官方文档

3. 例子

例如,让我们以gzip压缩的CSV文件为例。如果没有S3 Select,我们将需要下载,解压缩和处理整个CSV以获得所需的数据。使用Select API,可以使用简单的SQL表达式仅从您感兴趣的CSV中返回数据,而不是检索整个对象。以下Python示例显示了如何Location从包含CSV格式数据的对象中检索第一列。

请更换endpoint_urlaws_access_key_idaws_secret_access_keyBucketKey在这个本地设置select.py文件。

#!/usr/bin/env/env python3
import boto3

s3 = boto3.client('s3',
                  endpoint_url='http://localhost:9000',
                  aws_access_key_id='minio',
                  aws_secret_access_key='minio123',
                  region_name='us-east-1')

r = s3.select_object_content(
    Bucket='mycsvbucket',
    Key='sampledata/TotalPopulation.csv.gz',
    ExpressionType='SQL',
    Expression="select * from s3object s where s.Location like '%United States%'",
    InputSerialization={
        'CSV': {
            "FileHeaderInfo": "USE",
        },
        'CompressionType': 'GZIP',
    },
    OutputSerialization={'CSV': {}},
)

for event in r['Payload']:
    if 'Records' in event:
        records = event['Records']['Payload'].decode('utf-8')
        print(records)
    elif 'Stats' in event:
        statsDetails = event['Stats']['Details']
        print("Stats details bytesScanned: ")
        print(statsDetails['BytesScanned'])
        print("Stats details bytesProcessed: ")
        print(statsDetails['BytesProcessed'])

4. 运行程序

使用以下命令将样本数据集上传到MinIO。

$ curl "https://population.un.org/wpp/Download/Files/1_Indicators%20(Standard)/CSV_FILES/WPP2019_TotalPopulationBySex.csv" > TotalPopulation.csv
$ mc mb myminio/mycsvbucket
$ gzip TotalPopulation.csv
$ mc cp TotalPopulation.csv.gz myminio/mycsvbucket/sampledata/

现在,让我们继续运行我们的选择示例,以查询Location匹配的内容United States

$ python3 select.py
840,United States of America,2,Medium,1950,1950.5,79233.218,79571.179,158804.395

840,United States of America,2,Medium,1951,1951.5,80178.933,80726.116,160905.035

840,United States of America,2,Medium,1952,1952.5,81305.206,82019.632,163324.851

840,United States of America,2,Medium,1953,1953.5,82565.875,83422.307,165988.190
....
....
....

Stats details bytesScanned:
6758866
Stats details bytesProcessed:
25786743

F有关更详细的SELECT SQL参考,请参见此处

5. 进一步探索

6. 实施状况