in lambda-functions/add-partition-function/index.js [37:72]
async function createPlayerLogsPartition(year, month, day, hour) {
let {
QueryExecutionId
} = await runQuery({
QueryString: `ALTER TABLE ${PLAYER_LOGS_TABLE}
ADD IF NOT EXISTS PARTITION (year=${year},month=${month},day=${day},hour=${hour})
location 's3://${PLAYER_LOGS_BUCKET}/player_logs/${year}/${month}/${day}/${hour}'`,
UniqueRequestId: `add-playerlogs-partitioning-${year}-${month}-${day}-${hour}-${new Date()}`,
});
for (let attempt = 0; attempt < 10; attempt++) {
let result = await getQueryExecution(QueryExecutionId);
let state = result.QueryExecution.Status.State;
console.log("PlayerLogs.Execution status ",state);
switch (state) {
case 'RUNNING':
case 'QUEUED':
console.log(
'query is queued or running, retrying in ',
Math.pow(2, attempt + 1) * 100,
'ms',
);
await delay(Math.pow(2, attempt + 1) * 100);
break;
case 'SUCCEEDED':
return true;
case 'FAILED':
console.log('query failed');
throw new Error(result.QueryExecution.Status.StateChangeReason);
case 'CANCELLED':
console.log('query is cancelled');
return;
}
}
}