本エントリーは下記環境で検証しています。
Lambda ランタイム |
Python 3.6 |
boto3 バージョン |
1.7.4 |
S3 SelectがGAになりましたね!
aws.amazon.com
しかしながら、やってみた系サイトの情報はプレビュー版が多く、
GAだと仕様が変わっているので注意が必要です。詳しくはboto3公式を参照。
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.select_object_content
コード例
s3test = boto3.client('s3')
s3SelectResponse = s3test.select_object_content(
Bucket=env_s3_bucketName,
Key=key,
ExpressionType='SQL',
Expression="select * from s3object s",
InputSerialization={
'CSV': {
"FileHeaderInfo": "NONE",
'RecordDelimiter': '\n',
'FieldDelimiter': ',',
}
},
OutputSerialization={
'CSV': {
'RecordDelimiter': '\n',
'FieldDelimiter': ',',
}
},
)
for event in s3SelectResponse['Payload']:
if 'Records' in event:
records = event['Records']['Payload'].decode('utf-8')
print('s3SelectTestRecord:%s' % records)
elif 'Stats' in event:
statsDetails = event['Stats']['Details']
print("Stats details bytesScanned: ")
print(statsDetails['BytesScanned'])
print("Stats details bytesProcessed: ")
print(statsDetails['BytesProcessed'])
所感
結局のところRecordsのPayloadを取り出す時に改行コードでsplitしなきゃいけないので、
この辺りをもうちょっと改善できると使いやすいんですが、いい方法を考えたいですね。
マネージメントコンソールからクエリー投げれるところが気に入りました!JSONもいけるようです。
以上です!