CSVファイルの行数を数える単純な例。 S3 Select とは、見て分かる通り、S3上のCSVやJSONファイルに対してSQLライクなクエリを実行できる代物。
#!/usr/bin/env python3 import boto3 bucket_name = "baketsu" obj_name = "hoge.txt" s3 = boto3.client('s3', 'ap-northeast-1') select_result = s3.select_object_content( Bucket=bucket_name, Key=obj_name, ExpressionType='SQL', Expression='SELECT count(*) AS cnt FROM S3Object s', InputSerialization={ 'CompressionType': 'NONE', 'CSV': { 'FileHeaderInfo': 'Ignore', 'RecordDelimiter': '\n', 'FieldDelimiter': ',' } }, OutputSerialization={ 'JSON': { 'RecordDelimiter': '\n', } } ) count_num = None for event in select_result['Payload']: if 'Records' in event: request_count_obj = json.loads( event['Records']['Payload'].decode('utf-8')) count_num = request_count_obj["cnt"] if count_num is None: raise RuntimeError("Something went wrong...")
「S3 Select」と聞くと、何か全く新しいサービスなのかと思ってしまいますが、 実際のところ、S3の片隅にひっそり追加されたような扱いですね (でも、すごく便利)。