我想遍历每个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表达式在对象中查找数据,然后返回所有匹配项。
-编辑:
我尝试查询所有对象的原因是在对象中查找内容并删除特定数据。我很欣赏关于雅典娜的答案,但我认为这对我而言不起作用。
答案 0 :(得分:2)
看看Amazon Athena – Amazon S3中数据的交互式SQL查询
答案 1 :(得分:0)
您可能希望查看S3批处理操作,这将使您可以对存储桶中的所有对象执行python代码(部署到lambda)
使用此解决方案,您无需列出存储桶中的对象,而是可以让AWS在所有对象上运行脚本。
答案 2 :(得分:0)
S3 Select也是一个选项,但是Athena会更容易。