Trop de données : faire la même chose avec autre logiciel ?
Bonjour,
Grâce à vous, j'ai pu faire pal mal de choses avec Sheet, tout ou presque, ce que je souhaitais faire et peut être, n'est-ce pas le bon endroit, mais comme vous êtes des pro de Sheet, peut-être aurez-vous la solution.
Je fais des traitements de bases contenant en réalité 3/4/5 Millions de lignes (chacune contenant à minima 5 informations) que je suis obligé de découper en morceaux de 700 000 (ce qui ne représente même pas 1 mois entier) car même avec ce découpage, Sheet a vraiment du mal avec autant de données et il est impossible de traiter autant de données en 1 seule fois.
Ensuite je dois regrouper ces résultats provenant de ces 'mini' extractions intermédiaires dans un autre fichier pour qu'il finalise le résultats final
Sauriez-vous par quoi je peux le remplacer pour faire la même chose mais plus rapidement ou simplement et à priori sans cette 'limitation' invisible de données ?
Merci par avance de vos réponses.
Bonjour,
Même problématique ici.
Passer par la création d'une base de donnée SQL serait sans doute la solution, des personnes font déjà ça ?
Comment interfacer efficacement SQL - sheet en lecture / écriture ?
Je vois Pierre qu'on inspire personne ! ^^
J'ai une idée, je me suis renseigné sur les BDD SQL, mais difficile à mettre en place dans mon cas, par contre il est possible de travailler avec des fichiers JSON.
L'idée serait d'extraire les BDD en JSON, enregistrées automatiquement dans un drive, puis, les fichiers qui utilisent ces BDD importent les fichiers JSON.
> Cela éviterait les nombreux importrange, query.
Maintenant, ce format n'est pas vraiment adapté aux données importantes, mais il l'est peut-être plus que sheet, donc je prévois de tester, voir si c'est plus optimisé, dans mon cas, ma plus grosse BDD fait dans les 890 000 cellules.
Salut,
D'accord, tiens moi au courant :)
J'ai fait les tests !
Je suis embêté avec une base de donnée pour l'importer dans un fichier j'utilise 2 importRange...
Donc, je n'ai fait qu'un script qui export en format JSON et qui importe en format JSON, comme ça, je peux faire des extractions, imports la nuit, même si ça prends un peu de temps, c'est moins gênant + je n'ai pas de limite de taille.
Mon fichier de base fait environ 500 000 cellules (A1:CL9482)
Le script mets 15 secondes à faire l'export en JSON et 75 secondes à faire ensuite l'import.
function exportToJson() {
var sheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1tAZdLixNPSh_OesdfgdfgEi8jTYpa-ikFZJxEzsgfdgfD1u8/edit#gid=0').getSheetByName('RECEPTION'); // fichier & feuille origine
var range = sheet.getDataRange();
var values = range.getValues();
var jsonData = [];
for (i=0;i<values.length;i++) {
var row = values[i];
var rowData = {};
for (j=0;j<row.length;j++) {
var header = values[1][j]; // entête de la feuille
rowData[header] = row[j];}
jsonData.push(rowData);}
var jsonString = JSON.stringify(jsonData, null, 2); // édition du JSON
var folder = DriveApp.getFolderById('129U1z8WatRTT4afsdsfLBRXPCXsd8s8mTNv'); // dossier cible
folder.createFile('BDD_XXXXX.json', jsonString, MimeType.PLAIN_TEXT); // SAUVEGARDE
// test effectué le 14/11/23 - temps = 15 sec
}
function importFromJson() {
var fileId = '1WYCnkwCYA-ffgfdd55fwer-33dMZiNkf_k4Z'; // ID du fichier (clic droit > partager puis copier l'ID dans l'URL)
var file = DriveApp.getFileById(fileId);
var jsonString = file.getBlob().getDataAsString();
var jsonData = JSON.parse(jsonString); // conversion JSON > STRING
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // dans ce cas active sheet mais sheet peut être définie
var dataRows = [];
sheet.clear(); // au cas où
var headers = Object.keys(jsonData[0]); // en-tête du fichier JSON
sheet.appendRow(headers); // on ajoutes les en-têtes à la feuille
for (var i = 0; i < jsonData.length; i++) { // stockage des data dans une variable
var row = [];
for (var j = 0; j < headers.length; j++) {
row.push(jsonData[i][headers[j]]);}
dataRows.push(row);
}
sheet.getRange(2, 1, dataRows.length, dataRows[0].length).setValues(dataRows); // insertion de la variable data dans la feuille
// test effectué le 14/11/23 - temps = 75 sec
}