•
Amazon Data Firehose에서 제공하는 기능인 Lambda transformation을 통해 레코드 내용을 통한 Dynamic Partition을 진행할 수 있다.
•
이때 Lambda는 1분 이상 3분 이하로 설정하는 것이 좋고 버퍼를 적절히 조절해 적용 속도를 조절하고 S3에 과도하게 많은 오브젝트가 추가되지 않도록 한다.
Lambda Code
export const handler = async (event, context) => {
const output = event.records.map((record) => {
const data = JSON.parse(Buffer.from(record.data, 'base64').toString())
const time = new Date(data.time)
return {
recordId: record.recordId,
result: 'Ok',
data: record.data,
metadata: {
partitionKeys: {
year: time.getFullYear().toString(),
month: (time.getMonth()+1).toString(),
date: time.getDate().toString(),
hour: time.getHours().toString(),
minute: time.getMinutes().toString()
}
}
}
});
return { records: output };
};
JavaScript
복사
•
사용하는 Lambda Transformation 코드에서 각 레코드의 partitionKeys 레코드를 활용하면 다이나믹 파티셔닝을 할때 다음 단계로 파티션 키들을 직접 넘겨줄 있다.
•
이렇게 넘긴 파티션 키들을 다이나믹 파티셔닝에서 값으로 사용하려면 다음과 같이 설정하면 된다.
Example 1
output/year=!{partitionKeyFromLambda:year}/month=!{partitionKeyFromLambda:month}/date=!{partitionKeyFromLambda:date}/hour=!{partitionKeyFromLambda:hour}/minute=!{partitionKeyFromLambda:minute}/
Markdown
복사
•
파티셔닝 결과
output/year=2025/month=01/date=03/hour=14/minute=30/
Markdown
복사
Example 2
!{partitionKeyFromLambda:year}/!{partitionKeyFromLambda:month}/!{partitionKeyFromLambda:day}/!{partitionKeyFromLambda:hour}/!{partitionKeyFromLambda:minute}/
Markdown
복사
•
파티셔닝 결과
2025/01/03/14/30/
Markdown
복사
