in source/src/molecule-unfolding/lambda/AthenaTabeLambda/index.js [6:125]
exports.handler = function (event, context, callback) {
const s3_prefix = event['s3_prefix']
const stackName = event['stackName']
const execution_id = event['execution_id']
console.log(`stackName: ${stackName}, s3_prefix: ${s3_prefix}`)
const ATHENA_OUTPUT_LOCATION = `s3://${bucket}/${s3_prefix}/athena-out/`
const location = `s3://${bucket}/${s3_prefix}/benchmark_metrics/`
const tableName = `${stackName}_qc_benchmark_metrics_hist`
const viewName = `${stackName}_qc_benchmark_metrics`
const createDBSql = `CREATE DATABASE IF NOT EXISTS qc_db`
const dropTableSql = `DROP TABLE IF EXISTS qc_db.${tableName}`
const createTableSql = `
CREATE EXTERNAL TABLE IF NOT EXISTS qc_db.${tableName} (
Execution_Id string,
Compute_Type string,
Resource string,
Params string,
Opt_Params string,
Task_Duration float,
Time_Info string,
Start_Time string,
Experiment_Name string,
Task_Id string,
Model_Name string,
Model_FileName string,
Scenario string,
Create_Time string,
Result_Detail string,
Result_Location string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '!' LINES TERMINATED BY '\\n' LOCATION '${location}'
`
const createViewSql = `
CREATE OR REPLACE VIEW qc_db.${viewName} AS
SELECT h1.*
FROM
qc_db.${tableName} h1
, (
SELECT DISTINCT
Execution_Id
, Start_Time
FROM
qc_db.${tableName}
ORDER BY Start_Time DESC
LIMIT 20
) h2
WHERE (h1.Execution_Id = h2.Execution_Id)
`
const querySql = `SELECT * FROM qc_db.${viewName}`
const startAhenaQueryExecution = (queryInfo) => {
return new Promise((resolve, reject) => {
client.startQueryExecution(queryInfo, (error, results) => {
if (error) {
return reject(error)
} else {
return resolve(results)
}
})
});
}
console.info("run sql:" + createDBSql)
startAhenaQueryExecution({
QueryString: createDBSql,
ResultConfiguration: {
OutputLocation: ATHENA_OUTPUT_LOCATION
},
}).then(result => {
setTimeout(() => {
console.info("run sql:" + dropTableSql)
startAhenaQueryExecution({
QueryString: dropTableSql,
ResultConfiguration: {
OutputLocation: ATHENA_OUTPUT_LOCATION
},
})
}, 5000)
}).then(result => {
setTimeout(() => {
console.info("run sql:" + createTableSql)
startAhenaQueryExecution({
QueryString: createTableSql,
ResultConfiguration: {
OutputLocation: ATHENA_OUTPUT_LOCATION
},
})
}, 10000)
}).then(result => {
setTimeout(() => {
console.info("run sql:" + createViewSql)
startAhenaQueryExecution({
QueryString: createViewSql,
ResultConfiguration: {
OutputLocation: ATHENA_OUTPUT_LOCATION
},
})
}, 20000)
}).then(result => {
setTimeout(() => {
console.info("run sql:" + querySql)
startAhenaQueryExecution({
QueryString: querySql,
ResultConfiguration: {
OutputLocation: ATHENA_OUTPUT_LOCATION
},
})
}, 30000)
}).then(result => {
callback(null, {
queryResult: ATHENA_OUTPUT_LOCATION,
endTime: new Date().toISOString()
})
}).catch(error => {
callback(error)
})
}