に年月日時間フォルダ形式からparitition再私はAWS EMRの生態系で働いています。消防ホース - DT = YY-MM-DD形式
S3://バケット/ YYYY /ハイブパーティションのフォーマット
S3へのMM/DD/HH
://バケット私はAWSに消防ホース出力を再分割するためにスマートな方法を探しています
/DT = YY-MM-DD-HH
任意の提案ですか?私たちは、S3DistCpを使用してこの問題を解決してきました
おかげで、 オミド
に年月日時間フォルダ形式からparitition再私はAWS EMRの生態系で働いています。消防ホース - DT = YY-MM-DD形式
S3://バケット/ YYYY /ハイブパーティションのフォーマット
S3へのMM/DD/HH
://バケット私はAWSに消防ホース出力を再分割するためにスマートな方法を探しています
/DT = YY-MM-DD-HH
任意の提案ですか?私たちは、S3DistCpを使用してこの問題を解決してきました
おかげで、 オミド
をBoto3に同じ回答を追加しました(現在のラムダのデフォルトパッケージと一致するように)
import re
import boto3
##set buckets:
source_bucket='walla-anagog-us-east-1'
destination_bucket='walla-anagog-eu-west-1'
## regex from from YYYY/MM/DD/HH to dt=YYYY-MM-DD
##replaced_file = re.sub(r'(\d{4})\/(\d{2})\/(\d{2})\/(\d{2})', r'dt=\1-\2-\3' , file)
client = boto3.client('s3')
s3 = boto3.resource('s3')
mybucket = s3.Bucket(source_bucket)
for object in mybucket.objects.all():
replaced_key = re.sub(r'(\d{4})\/(\d{2})\/(\d{2})\/(\d{2})', r'dt=\1-\2-\3' , object.key)
print(object.key)
client.copy_object(Bucket=destination_bucket, CopySource=source_bucket+"/"+object.key, Key=replaced_key, ServerSideEncryption='AES256')
client.delete_object(Bucket=source_bucket, Key=object.key)
。私たちは、適切に前置されているディレクトリへのパターン、および出力によってグループ化、データの時間ごとの集計を行います。
これは間違いなくFirehoseに欠けている機能であり、Firehoseのみでこれを行う方法は現在ありません。
http://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html
私は、ファイルを移動し、それらを再分割するのpythonとのbotoを使用。 私は YYYY/MM/DD/HH DT = YY-MM-DD-HH へ
コードスニペット(予告のsrcキーが削除された)からのキー名前を変更するために正規表現を適用:
from boto.s3.connection import S3Connection
import re
conn = S3Connection('xxx','yyy')
##get buckets:
source_bucket='srcBucketName'
destination_bucket='dstBucketName'
src = conn.get_bucket(source_bucket)
dst = conn.get_bucket(destination_bucket)
##Iterate
for key in src.list():
#print key.name.encode('utf-8')
file = key.name.encode('utf-8')
replaced_file = re.sub(r'(\d{4})\/(\d{2})\/(\d{2})\/(\d{2})', r'dt=\1-\2-\3-\4' , file)
#print replaced_file
#actual copy
dst.copy_key(replaced_file,src.name,file,encrypt_key=True)
key.delete()