J'ai trois tables avec des schémas de données, comme par exemple :
TABLE user (
user_id BINARY(16) PRIMARY KEY NOT NULL,
created DATETIME NOT NULL,
last_updated DATETIME,
coordinator BINARY(16),
num_updates INT NOT NULL
);
TABLE summary (
user_id BINARY(16) PRIMARY KEY NOT NULL,
calculation_time DATETIME NOT NULL,
calculation_method VARCHAR(25) NOT NULL,
label VARCHAR(50) NOT NULL,
critical_count INT NOT NULL,
median_risk FLOAT(10)
);
TABLE actions(
user_id BINARY(16) PRIMARY KEY NOT NULL,
label VARCHAR(50) NOT NULL,
access_count INT NOT NULL,
median FLOAT(10)
);
Les données de tous les utilisateurs ( tableau des utilisateurs ) est simplement récupéré à l'aide de la fonction de traitement lambda de la manière suivante :
const AWS = require('aws-sdk');
const rdsDataService = new AWS.RDSDataService();
module.exports.hello = async (event, context, callback) => {
const req_id = "5a9dbfca-74d6-471a-af27-31beb4b53bb2";
const sql = 'SELECT * FROM user WHERE user_id=:id';
try {
const params = {
resourceArn: 'arn:aws:rds:us-west-********************',
secretArn: 'arn:aws:secretsmanager:us-west**************',
sql,
database: 'dev_db1',
continueAfterTimeout: true,
includeResultMetadata: true,
parameters: [{ 'name': 'id', 'value': { 'stringValue': `${req_id}` } }]
}
const db_res = await rdsDataService.executeStatement(params).promise();
const convertToJson = (dbresponse) => {
const columns = dbresponse.columnMetadata.map(col => col.name);
const row_data = dbresponse.records.map(row => {
const json_obj = {};
row.map((val, i) => {
json_obj[columns[i]] = Object.values(val)[0];
});
return json_obj;
});
return row_data;
};
const modified_data = convertToJson(db_res);
const response = {
body: {
statusCode: 200,
message: 'Data fetched successfully',
data: modified_data,
}
};
callback(null, response);
} catch (error) {
console.log('Error Received', error);
const error_res = {
body: {
statusCode: error.statusCode,
message: error.message,
data: null
}
}
callback(null, error_res);
}
};
Si l'on procède de la même manière pour un autre tableau summary
ou actions
, cela fonctionne aussi. Je dois maintenant combiner toutes les colonnes de ces trois tables et renvoyer les données (les lignes renvoyées doivent correspondre sur la base des critères suivants req_id
). Mon extrait de travail : https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=016ecc94c792611fbaca810605e81a6a
Mais le résultat final obtenu contient la colonne user_id
sous forme dupliquée, c'est-à-dire trois fois l'inclusion. Je n'ai pas besoin que la même colonne soit répétée trois fois.
Je suis un peu novice dans la manipulation des requêtes MySQL, et je n'arrive donc pas à comprendre la raison exacte de l'erreur, même si la table existe. La version de MySQL utilisée dans Aurora est la 5.7.
Toute aide pour résoudre ce problème est la bienvenue !