Modificare l'intervallo di campionamento
Introduzione
Esistono diversi scenari che potrebbero rientrare in questo argomento:
- Cambiare semplicemente l'intervallo: dovresti essere in grado in qualsiasi momento di aumentare o diminuire l'intervallo di memorizzazione senza modificare i dati già memorizzati. Weewx dovrebbe gestirlo automaticamente e questo è il metodo consigliato.
- Aumentare l'intervallo e modificare tutti i vecchi dati in modo che siano conformi al nuovo intervallo di campionamento. Dovresti farlo solo se hai davvero bisogno di risparmiare spazio di archiviazione. È questo consolidamento dei dati che viene trattato in questa guida.
- Diminuire l'intervallo e modificare tutti i vecchi dati in modo che siano conformi al nuovo intervallo di campionamento. Non si riesce a pensare a nessun motivo utile per farlo all'interno di Weewx. Se altri software devono utilizzare i dati a intervalli definiti, è probabilmente più semplice eseguire qualsiasi interpolazione all'interno del software che legge il database.
Aumentare l'intervallo risparmiando spazio
Supponiamo che abbia raccolto alcuni dati a intervalli di 1 minuto e dopo alcuni mesi decidi che utilizzare un intervallo di 5 minuti sarà sufficiente. Non vuoi perdere i dati già raccolti, quindi questa guida descrive come puoi trasformare i dati esistenti per essere accettati nel nuovo schema.
In questo esempio, si presume che l'intervallo di destinazione sia di 5 minuti: il codice è stato testato per l'input a intervalli di 1 minuto, ma dovrebbe funzionare così com'è per un periodo inferiore a 5 minuti. Se desideri utilizzare un intervallo più lungo di 5 minuti, dovrai modificare leggermente il codice.
Per non produrre più dati nell'intervallo minore, Weewx non dovrebbe essere in esecuzione o dovrebbe essere già stato convertito nell'intervallo prescelto.
Ci sono due approcci principali che potrebbero essere adottati:
- Sui dati esportati;
- O lavorare direttamente nel software del database (SQLite o MySQL).
Se hai familiarità con i programmi da riga di comando per manipolare i database, dovresti essere in grado di utilizzare semplicemente gli script SQL di seguito. Per quelli meno familiari, ci sono molti programmi con GUI, come ad esempio:
- SQLite: DB Browser for SQLite è uno e funziona con MS-Windows, Linux e Max OS-X. Si noti che il client SQLite deve avere le estensioni matematiche per la lingua. L'attuale versione del programma viene fornita con esso, ma deve essere caricato: esiste un'impostazione di preferenza per selezionare l'estensione da caricare automaticamente.
- MySQL Workbench se il tuo database è ospitato su un server MySQL o MariaDB. Questo ha anche il supporto di più sistemi operativi.
Esporta, consolida e importa
Entrambe le GUI offrono modi per esportare e importare in modo efficiente i file in formato CSV della tabella di archivio.
Se il tuo archivio contiene dati a intervalli misti, estrai i dati richiesti in una tabella separata ed esportala.
CREATE TABLE asmall AS SELECT * FROM archive WHERE `interval` < 5;
Altrimenti è sufficiente esportare l'intera tabella dell'archivio .
Dovresti scrivere il tuo semplice script per elaborare i dati, utilizzando il metodo di consolidamento appropriato per ciascuna variabile come mostrato nel codice SQL di seguito.
Consolidare i dati utilizzando il database
Ci sono abbastanza differenze tra SQLite e MySQL, tanto che il codice deve essere leggermente diverso. Di conseguenza, gli script sono elencati separatamente.
Questi script sono scritti per funzionare con il contenuto del database "weewx" predefinito. Se il contenuto del database è diverso, sarà necessario modificare l'elenco nella fase di consolidamento principale.
Descrizione delle fasi
Preparare la tabella dei dati di input:
Crea una tabella con una copia dell'archivio di input, lavora da una copia in modo da poterla modificare senza toccare la tabella dell'archivio principale.
Creare la tabella consolidata provvisoria:
Compila la tabella c5 con i dati generati.
La maggior parte del consolidamento dei dati è gestita da funzioni integrate del linguaggio SQL, ma è necessaria una gestione aggiuntiva per i dati del vento.
Elabora il vettore del vento "medio":
La velocità media del vento è semplicemente una media aritmetica delle magnitudo del vento. La direzione "media" è calcolata come somma vettoriale delle intensità e delle direzioni del vento.
Elabora la direzione della raffica di vento:
Il consolidamento delle raffiche di vento non viene eseguito, poiché la velocità delle raffiche è massima durante il periodo di consolidamento. Questo codice estrae la direzione nel momento in cui è stato osservato il massimo. I calcoli ignorano i fatti che:
- La direzione zero è diversa tra i rilevamenti della bussola e le funzioni trigonometriche;
- Uno è in senso orario mentre l'altro in senso antiorario. Il vettore finale è corretto, sebbene le componenti intermedie non abbiano senso.
C'è un'ambiguità con raffiche massime duplicate che risultano in più record per un intervallo di 5 minuti. Non esiste un consolidamento ragionevole per scegliere una direzione adatta per due o più raffiche uguali:
- Se le loro direzioni sono vicine, una media non è molto diversa da entrambi i valori
- Se sono molto distanti allora una media è semplicemente sbagliata.
Quindi, scegliamo arbitrariamente il primo dicendo all'inserto di ignorare dateTime duplicati.
Riunire la tabella di consolidamento nell'archivio
Questa è la fase finale e il relativo codice è fornito separatamente alla fine di questa pagina.
Versione SQLite
Il codice SQLite è riportato nella pagina: Consolidamento tramite SQLite (In Inglese)
Versione di MySQL
Il codice MySQL è riportato nella pagina: Consolidamento tramite MySQL (In Inglese)
Riunire i dati nell'archivio
Scegli quale versione del database aggiornerai, che potrebbe essere una copia di backup o la versione live.
A questo punto dovresti avere la tabella c5 con i dati consolidati, pronta per essere reinserita nel database.
Il seguente processo:
- Rimuove i vecchi dati a breve intervallo;
- Inserisce i nuovi dati consolidati.
Rimuovi i vecchi dati
Su entrambi i sistemi, eseguire il comando...
DELETE FROM archive WHERE `interval` <=4 ;
Trasferisci i dati consolidati
Eseguire i comandi SQL appropriati. SQLite e MySQL sono piuttosto diversi. Poiché SQLite non supporta l' opzione DROP COLUMN in ALTER TABLE, è necessario che le colonne della tabella siano scritte per intero. Se la tua tabella di archivio è diversa, dovrai adeguarti di conseguenza.
Versione SQLite
L'ordine in cui vengono fornite queste colonne deve corrispondere all'ordine effettivo nell'archivio. Il processo non corrisponde ai nomi.
INSERT INTO archive SELECT `dateTime`, usUnits, `interval`, barometer, pressure, altimeter, inTemp, outTemp, inHumidity, outHumidity, windSpeed, windDir, windGust, windGustDir, rainRate, rain, dewpoint, windchill, heatindex, ET, radiation, UV, extraTemp1, extraTemp2, extraTemp3, soilTemp1, soilTemp2, soilTemp3, soilTemp4, leafTemp1, leafTemp2, extraHumid1, extraHumid2, soilMoist1, soilMoist2, soilMoist3, soilMoist4, leafWet1, leafWet2, rxCheckPercent, txBatteryStatus, consBatteryVoltage, hail, hailRate, heatingTemp, heatingVoltage, supplyVoltage, referenceVoltage, windBatteryStatus, rainBatteryStatus, outTempBatteryStatus, inTempBatteryStatus FROM c5 ORDER BY dateTime;
Versione MySQL
ALTER TABLE c5 DROP COLUMN dt5m;
A questo punto le colonne delle tabelle c5 e archivio dovrebbero corrispondere. Controlla, utilizzando la GUI o i seguenti comandi (esegui ogni comando in una scheda separata in modo che sfogliando tra loro riveli chiaramente eventuali differenze):
SHOW COLUMNS FROM c5; SHOW COLUMNS FROM archive;
Poi aggiorna l'archivio...
INSERT INTO archive SELECT * FROM c5 ORDER BY dateTime;