Autor Tema: Tema para especialistas en BBDD weewx  (Leído 14227 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jantoni

  • Hero Member
  • *****
  • Mensajes: 3.754
    • Ver Perfil
  • Estación: ESMAD2800000028522A
Re:Tema para especialistas en BBDD weewx
« Respuesta #15 en: 12 de Enero del 2020, 00:29:11 am »
Interesante, no lo he usado nunca para unir dos bases de datos.

Saludos

Desconectado jmsolher

  • Full Member
  • ***
  • Mensajes: 105
    • Ver Perfil
    • meteoBezana
  • Estación: ESCTB3900000039108A
Re:Tema para especialistas en BBDD weewx
« Respuesta #16 en: 12 de Enero del 2020, 21:02:10 pm »
Aún no me he 'atrevido' a hacer el volcado de la vieja base de datos en la nueva. Me da cierto reparo pensar que pueda ocurrir alguna inconsistencia y eche por tierra todo el proceso teniendo que volver a reinstalar y empezar de nuevo, aunque por otra parte, no tendré más remedio que armarme de valor  ::) y probar si quiero tener todos los registros en una misma base de datos. Si lo consigo dejaré por aquí los pasos y resultados.

un saludo.

Desconectado Xavi-EA5ZF

  • Full Member
  • ***
  • Mensajes: 212
  • Ham Radio Operator EA5ZF
    • Ver Perfil
    • MeteoLaVall
  • Estación: ESPVA1200000012600A
Re:Tema para especialistas en BBDD weewx
« Respuesta #17 en: 13 de Enero del 2020, 18:08:29 pm »
Creo que para unir dos bases de datos hay que hacer una cosa mas que sacar los dos dump y unirlos ya que al hacer el dump, se crea un fichero de texto con la orden de crear la tabla correspondiente y luego los insert necesarios, al concatenar los dos dump, el primero se ejecutará bien, pero al tratar el siguiente, la tabla se volvería a crear y creo que se borraría lo insertado primero, dejando solo los últimos datos.
Yo creo los dos ficheros de texto del dump, y lo que hago es insertar los datos (las lineas con los insert) al final, y con eso se inserta todo sin problemas.
No hay que temer tener datos duplicados porque la base de datos weewx tiene clave unica y es la fecha y la hora, al tratarse de la misma base de datos, si un registro ya existe no lo inserta.
Para hacerlo utilizo el Notepad++ que es un editor de texto que le da cien patadas al bloc de notas del windows.
Sobre todo insistir en una buena política automatizada y chequeada de copias, lo deseable es el conjunto completo o sea copia física del fichero de la bbdd, y luego sacar exportación y dump o volcado. Con esto nunca nos quedaremos sin algo utilizable y actualizado, que luego con el dataloger completamos para no perder ni un solo dato.
Saludos.
Xavi

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.403
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Tema para especialistas en BBDD weewx
« Respuesta #18 en: 13 de Enero del 2020, 20:27:20 pm »
Sí Xavi... sería lo mejor hacerlo así y nos desentendemos de problemas, errores y resultados inesperados.

Saludos


Archena, Valle de Ricote (Murcia). 120 msnm. 19.622 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado jmsolher

  • Full Member
  • ***
  • Mensajes: 105
    • Ver Perfil
    • meteoBezana
  • Estación: ESCTB3900000039108A
Re:Tema para especialistas en BBDD weewx
« Respuesta #19 en: 11 de Febrero del 2020, 07:56:20 am »
Hola
retomo este hilo. Disculpad que no haya podido comentar antes mi resultado uniendo las dos bases de datos pero solamente quería decir que tras mucho trastear con SQL tuve que abandonar porque me fue totalmente imposible hacer una unión correcta (ya sabéis, que las dos bases de datos copiaran sus tablas a la perfección sin errores, etc etc etc..) finalmente conseguí mi propósito con un pequeño script en Python que realiza la operación sin problemas consiguiendo una única base de datos limpia con clave primaria sin errores (dateTime) y todos los registros de las tablas volcados consecutivamente y sin errores en aquellos que sean NULL (vacíos)
saludos.
« Última modificación: 11 de Febrero del 2020, 08:13:48 am por JosMar »

Desconectado jantoni

  • Hero Member
  • *****
  • Mensajes: 3.754
    • Ver Perfil
  • Estación: ESMAD2800000028522A
Re:Tema para especialistas en BBDD weewx
« Respuesta #20 en: 11 de Febrero del 2020, 08:38:52 am »
Comparte el script, compañero😉😉😉

Desconectado jmsolher

  • Full Member
  • ***
  • Mensajes: 105
    • Ver Perfil
    • meteoBezana
  • Estación: ESCTB3900000039108A
Re:Tema para especialistas en BBDD weewx
« Respuesta #21 en: 11 de Febrero del 2020, 22:16:38 pm »
Comparte el script, compañero😉😉😉
Hola jantoni,
por supuesto aquí tenéis el script. A mi me ha  funcionado a la primera sin problemas, pero no me hago responsable si otro lo intenta y le estropea la base de datos eh?  8)
Las bases de datos que han sido  unidas tras el uso de este script pertenecen a la versión de WeeWX 3.9.2Pasos que he seguido
  • parar WeeWX con
Código: [Seleccionar]
sudo /etc/init.d/weewx stop
  • realizar una copia de seguridad de la base de datos que está actualmente en ejecución. Nos colocamos en la ruta
Código: [Seleccionar]
/var/lib/weewx/ y desde ahí renombramos con
Código: [Seleccionar]
mv weewx.sdb weewx_old.sdb
  • crear en
Código: [Seleccionar]
/home/pi/ con
Código: [Seleccionar]
sudo nano /home/pi/unirbd.py un archivo nuevo que contenga este script
Código: [Seleccionar]
import sqlite3
def number_columns(table_name):
    db_2020 = sqlite3.connect('/home/pi/weewx2020.sdb')
    db_2020.row_factory = sqlite3.Row
    db_cursor = db_2020.cursor()
    db_cursor.execute("SELECT * FROM " + str(table_name))
    row_1 = db_cursor.fetchone()
    db_cursor.close()
    return row_1.keys() 

db_2019 = sqlite3.connect('/home/pi/weewx2019.sdb')
db_2020 = sqlite3.connect('/home/pi/weewx2020.sdb')

b_cursor = db_2020.cursor()
b_cursor.execute('SELECT name FROM sqlite_master WHERE type ="table" ')
output = b_cursor.fetchall()

a_cursor = db_2019.cursor()

for row in output:
    print("Table name: " + str(row[0]))
    columnNames = number_columns(str(row[0]))
    ques = []
    ques = ["?"] * len(columnNames)  # Generate list [?, ?, ?, ?,........till length equals length of columnNames[1:]
    ques = ",".join(ques)  # Generate string "?,?,?,?,?........"
    columnNames = ",".join(columnNames)  # Generate string "col1, col2, col3............"
    b_cursor.execute('SELECT * FROM ' + str(row[0]))
    rows = b_cursor.fetchall()
    for item in rows:
        #print(item)
        #print(columnNames)
        #print(ques)
        #print('INSERT or IGNORE INTO {0}({1}) VALUES ({2})'.format(str(row[0]), columnNames, ques))
        a_cursor.execute('INSERT or IGNORE INTO {0}({1}) VALUES ({2})'.format(str(row[0]), columnNames, ques), item)

db_2019.commit()
a_cursor.close()
b_cursor.close()
   
  • desde el terminal ejecutamos el script con
Código: [Seleccionar]
sudo python /home/pi/unirbd.py y  en unos segundos debería obrar su magia. Tras la unión de ambas bases de datos movemos la  resultante hasta
Código: [Seleccionar]
/var/lib/weewx/weewx.sdb procurando poner el nombre original. En esta ruta ahora tendremos
Código: [Seleccionar]
weewx.sdb y
Código: [Seleccionar]
weewx_old.sdb
  • arrancar de nuevo WeeWX con
Código: [Seleccionar]
sudo /etc/init.d/weewx start y esperar al siguiente ciclo de escritura en la base de datos para comprobar que todo ha ido bienExplico un poco el contenido del script
como veis de lo que se trata es de unir dos bases de datos, una de 2019 y otra de 2020 (en mi caso la de 2019 iba desde el 17 de junio al 31 de diciembre y la de 2020 iba desde el 1 de enero hasta la fecha en la que hago la unión de ambas) por lo que debo conseguir una base de datos que recoja el periodo desde el 17 de junio de 2019 a la fecha actual, ordenando todos los registros por la clave primaria que en este caso es dateTimePara este escript he renombrado ambas bases de datos. La de 2019 la he llamado weewx2019.sdb y la de 2020 weewx2020.sdb para que esté más claro. Ambas bases de datos las he colocado en misma ruta donde he creado el script.

El script comienza llamando a sqlite3  por lo que debereis comprobar que lo tenéis instalado previo a su ejecución. Si no está instalado simplemente con sudo apt-get install sqlite3 solucionamos este paso. Tras la instalación un sudo apt-get update && sudo apt-get upgrade no vendría mal. Tras la importación de sqlite3, y si esta es exitosa, identifica las columnas (entidades) de las tablas que intervienen en el proceso. Una vez identificadas las entidades establece las conexiones entre ambas bases de datos. En este paso identificará las tablas que corresponden a cada base de datos.

Con toda esta información lo siguiente es definir la base de datos en la que se hará el volcado; en mi caso quiero que se haga en la de 2019 por lo que apunto a ella con a_cursor = db_2019.cursor () Tras este punto comienza el proceso.
« Última modificación: 15 de Febrero del 2020, 18:13:21 pm por JosMar »

Desconectado jantoni

  • Hero Member
  • *****
  • Mensajes: 3.754
    • Ver Perfil
  • Estación: ESMAD2800000028522A
Re:Tema para especialistas en BBDD weewx
« Respuesta #22 en: 12 de Febrero del 2020, 00:15:07 am »
Muchas gracias.

Por supuesto, el que quiera usarlo, bajo su responsabilidad y haciendo siempre copias de seguridad

Desconectado pachu

  • Full Member
  • ***
  • Mensajes: 136
    • Ver Perfil
    • www.meteolamadrid.es
  • Estación: Lamadrid (ESCTB3900000039593F)
Re:Tema para especialistas en BBDD weewx
« Respuesta #23 en: 15 de Mayo del 2020, 09:08:03 am »
Buenas
Retomando un poco el tema de las BBDD y viendo que la mía empieza a "engordar" después de 6 años...me preguntaba si es posible o conveniente empezar una nueva por ejemplo anualmente.
Dejar los archivos NOAA generados hasta la fecha y si al empezar y una nueva BBDD estos se mantendrían en weewx y no generarían inconsistencias en meteoclimatic. ???

Saludos

Desconectado jantoni

  • Hero Member
  • *****
  • Mensajes: 3.754
    • Ver Perfil
  • Estación: ESMAD2800000028522A
Re:Tema para especialistas en BBDD weewx
« Respuesta #24 en: 15 de Mayo del 2020, 11:02:45 am »
No sé muy bien cual es tu objetivo, pero vamos a ello.

Los archivos NOAA los puedes dejar, sin en la base de datos no hay valores para esas fechas, no creo que Weewx los "mate", por si acaso, antes copia de seguridad.

Pero casi seguro que en el menú de selección de visualización, no van a aparecer los informes NOAA que no tenga controlados Weewx.

Para visualizarlos, tendrías que modificar el skin. En Seasons lo tendrías que hacer en:

/etc/weewx/skins/Seasons/titlebar.inc

Incorporando de alguna manera los NOAA antiguos.

En cuanto a inconsistencias no tengo clara la pregunta:

- Si es por los informes NOAA, estos no afectan para nada. Son simples archivos de texto generados a partir de la base de datos.

- Si es por la generación de bases de datos anuales. La respuesta es: bien hecho no.

Las inconsistencias se generan mensualmente y anualmente.

Si lo hiciera yo haría lo siguiente:

- En enero de cada año pararía weewx
- haría una copia de seguridad de la base de datos
- Calcularía el epoch time del primer segundo del nuevo año.
- Eliminaría los registros con epochtime inferior al calculado, en todas las tablas de la base de datos.
- Reiniciaría Weewx.


Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.403
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Tema para especialistas en BBDD weewx
« Respuesta #25 en: 15 de Mayo del 2020, 11:47:13 am »
Yo hago esa operación en el cambio de año con la base de datos de weewx con un crontab configurado para que se ejecute el 1 de enero a las 0:01

Código: [Seleccionar]
#!/bin/sh

service weewx stop
cd /var/lib/weewx
mv weewx.sdb "weewx"`date --date='-1 year' +"%Y"`".sdb"
service weewx start
exit

Detiene weewx, cambia el nombre a la BBDD poniéndole el año en el nombre (weewx2019.sdb para este pasado año por ejemplo) e inicia weewx que creará una nueva BBDD (weewx.sdb) que será con la que opere el nuevo año.
Lo hago mayormente porque weewx en mi caso graba cada minuto y se nota al cabo del año (creo que unos 50 MB de BBDD o cosa así).

En cuanto a lo que dice jantoni de los NOOA es cierto, están todos en el directorio /var/www/html/weewx/NOAA pero weewx pondrá en el despegable de su página sólo los que estén en su BBDD actual.
Habría que modificar ese archivo que indica jantoni para que incluyese todos los que hay en ese directorio donde están los NOAA.



Archena, Valle de Ricote (Murcia). 120 msnm. 19.622 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado jantoni

  • Hero Member
  • *****
  • Mensajes: 3.754
    • Ver Perfil
  • Estación: ESMAD2800000028522A
Re:Tema para especialistas en BBDD weewx
« Respuesta #26 en: 15 de Mayo del 2020, 12:11:01 pm »
Es que actualizar cada minuto es "muy bestia" *+* *+* *+* *+* *+* *+* *+*

Al fin y al cabo, si quieres usar los datos dentro de 5 años, vas a usar 3: la máxima, la mínima y la media *-* *-* *-*


Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 4.403
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Tema para especialistas en BBDD weewx
« Respuesta #27 en: 15 de Mayo del 2020, 12:36:33 pm »
Así lo tengo en el datalogger de la Davis jantoni … y lo quiero así ya que si por alguna circunstancia tienes que quitar diarios de la base de datos (drop-daily) y regenerarlos (rebuild-daily) te pondrá los valores máx/mín que hayan en los logs, y está claro que habrán más registros en 1 minuto para sacar las máx/mín verdaderas que en 5 ó 10 minutos.

Como es la estación de mi casa y tengo acceso a ella todos los días tener dos días y pico de datalogger no es un inconveniente si tengo todos los minutos. Me sirve para los logs de cualquier programa.

Y creo que la BBDD de weewx con los años se puede hacer enorme y luego moverse por esa base de datos no es fácil. Deberían de haberla creado de otra forma... por años, gestionando sólo el año que esté en curso.


Archena, Valle de Ricote (Murcia). 120 msnm. 19.622 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado jantoni

  • Hero Member
  • *****
  • Mensajes: 3.754
    • Ver Perfil
  • Estación: ESMAD2800000028522A
Re:Tema para especialistas en BBDD weewx
« Respuesta #28 en: 15 de Mayo del 2020, 12:43:04 pm »
Es que cada uno tiene unas necesidades.

Yo no las he tenido. No recuerdo haber tenido que modificar ningún dato desde que empecé con Weewx. Posiblemente alguna vez antes de cambiar la FineOffset antigua por la Davis, pero hace tanto tiempo que no me acuerdo.

Y si, es cierto, la base de datos se hace grande. Si la mía ocupa 132 Megas los últimos 6 años, imagínate, con 1 minuto de actualización estaría cerca de los 700 megas.

Desconectado pachu

  • Full Member
  • ***
  • Mensajes: 136
    • Ver Perfil
    • www.meteolamadrid.es
  • Estación: Lamadrid (ESCTB3900000039593F)
Re:Tema para especialistas en BBDD weewx
« Respuesta #29 en: 15 de Mayo del 2020, 17:36:15 pm »
Buenas

Si ese era mi objetivo...
Mi BBDD tiene unos 110mb  de tamaño en 6 años y en ocasiones que hay que regenerar por una instalación nueva o hay "navegar" entre tanta línea para corregir algún dato erróneo pues la cosa hay que tomársela con paciencia.
Yo además,a pesar de la copia de seguridad a menudo,me da miedo que se corrupta la base de datos al tener tantos datos.
La duda es si dejo los archivos noaa de la anterior BBDD para poder acceder a ellos en cualquier momento desde la web,si al generar los nuevos se mantendran los anteriores al no tener weewx datos de donde generarlos... :-\

Entonces un rato igual pruebo y comienzo una nueva BBDD si consigo mantener los noaa anteriores  :;