本エントリーは下記環境で検証しています。
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もいけるようです。
以上です!