有没有一种方法可以使用SQL表达式遍历s3对象内容?

时间:2019-05-10 01:05:51

标签: python amazon-web-services amazon-s3 boto3

我想遍历每个s3存储桶对象,并使用sql表达式查找与sql匹配的所有内容。

我能够创建一个列出了存储桶中所有对象的python脚本。

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('bucketname')
startAfter = 'bucketname/directory'
for obj in bucket.objects.all():
    print(obj.key)

我还能够创建一个使用sql表达式浏览对象内容的python脚本。

import boto3

S3_BUCKET = 'bucketname'

s3 = boto3.client('s3')

var1 = 'aj9c03869'
var2 = 'b3bu11043'


r = s3.select_object_content(
        Bucket=S3_BUCKET,
        Key='name_of_object',
        ExpressionType='SQL',
        Expression='select * from s3object s where s.\"serialnumber\" in (%r,%r) ' % (var1,var2),
        OutputSerialization={'JSON': {}},
        InputSerialization={
        'CompressionType': 'GZIP',
        'JSON': {
            'Type': 'DOCUMENT'
    } }, )


for event in r['Payload']:
    if 'Records' in event:
        records = event['Records']['Payload'].decode('utf-8')
        print(records)

我想创建一个遍历每个存储桶对象的循环,使用sql表达式在对象中查找数据,然后返回所有匹配项。

-编辑:

我尝试查询所有对象的原因是在对象中查找内容并删除特定数据。我很欣赏关于雅典娜的答案,但我认为这对我而言不起作用。

3 个答案:

答案 0 :(得分:2)

看看Amazon Athena – Amazon S3中数据的交互式SQL查询

答案 1 :(得分:0)

您可能希望查看S3批处理操作,这将使您可以对存储桶中的所有对象执行python代码(部署到lambda)

使用此解决方案,您无需列出存储桶中的对象,而是可以让AWS在所有对象上运行脚本。

答案 2 :(得分:0)

S3 Select也是一个选项,但是Athena会更容易。