[vz-users] Aggregation (minute) schlägt fehl

Jens Scheidtmann jens.scheidtmann at gmail.com
Fr Mär 24 21:12:33 CET 2023


Kann sein, dass die Mailinglistensoftware die Statements zerhackt hat.
Deshalb hier nochmal as Anhang.

Jens

Am Fr., 24. März 2023 um 21:06 Uhr schrieb Jens Scheidtmann <
jens.scheidtmann at gmail.com>:

>
> Hallo Michael,
>
> Um die Datensätze, die den Fehler verursachen, einzugrenzen öffne bitte
> mysql als root und gebe folgende Befehle ein:
>
> $ sudo mysql
> > use volkszaehler;
>
> Dann kopiere dieses Statement hier ein:
>
> --- schnipp ---
>   SELECT channel_id
>        , 1 AS type
>        , MAX(agg.timestamp) AS timestamp
>        , SUM(agg.val_by_time) as s
>        , MAX(agg.timestamp) as t_max
>        , MIN(agg.prev_timestamp) as t_min
>        , MAX(agg.timestamp) - MIN(agg.prev_timestamp) as delta
>        , COUNT(agg.value) AS count
>     FROM ( SELECT channel_id
>                 , timestamp
>                 , value
>                 , value * (timestamp - @prev_timestamp) AS val_by_time
>                 , COALESCE(@prev_timestamp, 0) AS prev_timestamp
>                 , @prev_timestamp := timestamp
>              FROM data CROSS JOIN (SELECT @prev_timestamp :=
> UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d
> %H:%i:00"), INTERVAL 1 minute)) * 1000
>                                      FROM aggregate
>                                     WHERE type = 1
>                                       AND aggregate.channel_id = "3") AS
> vars
>             WHERE channel_id = "3"
>             AND timestamp >= IFNULL((SELECT
> UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d
> %H:%i:00"), INTERVAL 1 minute)) * 1000
>                                        FROM aggregate
>                                       WHERE type = 1
>                                         AND aggregate.channel_id = "3" ),
> 0)
>             AND timestamp < UNIX_TIMESTAMP(DATE_FORMAT(NOW(), "%Y-%m-%d
> %H:%i:00")) * 1000 ) AS agg
>    GROUP BY channel_id
>        , YEAR(FROM_UNIXTIME(timestamp/1000))
>        , DAYOFYEAR(FROM_UNIXTIME(timestamp/1000))
>        , HOUR(FROM_UNIXTIME(timestamp/1000))
>        , MINUTE(FROM_UNIXTIME(timestamp/1000))
> ORDER BY 1,2,3,4,5
>     INTO OUTFILE '/var/lib/mysql/offending.csv'
>          FIELDS TERMINATED BY ','
>          ENCLOSED BY '"'
>         LINES TERMINATED BY '\n'   ;
> --- schnapp ---
> Wenn Du uns die Werte nicht verraten möchtest, kannst Du "value" am Anfang
> durch "0" ersetzen.
>
> Zeige uns bitte die Tabelle aus /var/lib/mysql/offending.csv!
>
> Dort musst Du dann die Zeile finden, die in der vorletzten Spalte eine "0"
> hat.
>
> In den Zeilen davor und danach findest Du die timestamps, die Du im
> folgenden Statement für ****MIN**** und ****MAX**** einsetzen musst:
> --- schnipp ---
> SELECT channel_id
>     , timestamp
>     , value
>     , value * (timestamp - @prev_timestamp) AS val_by_time
>     , COALESCE(@prev_timestamp, 0) AS prev_timestamp
>     , @prev_timestamp := timestamp
>     FROM data CROSS JOIN (SELECT @prev_timestamp :=
> UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d
> %H:%i:00"), INTERVAL 1 minute)) * 1000
>                             FROM aggregate
>                         WHERE type = 1
>                             AND aggregate.channel_id = "3") AS vars
> WHERE channel_id = "3"
> AND timestamp >= ****MIN****
> AND timestamp < ****MAX****
>    INTO OUTFILE '/var/lib/mysql/rawdata.csv'
>          FIELDS TERMINATED BY ','
>          ENCLOSED BY '"'
>         LINES TERMINATED BY '\n'   ;
> --- schnapp ---
> Wenn Du uns die Werte nicht verraten möchtest, kannst Du die zwei "value"
> am Anfang durch "0" ersetzen.
> Auch diese Datei solltest Du anhängen.
>
>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20230324/816b8399/attachment-0001.html>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : test.sql
Dateityp    : application/octet-stream
Dateigröße  : 2558 bytes
Beschreibung: nicht verfügbar
URL         : <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20230324/816b8399/attachment-0001.obj>


Mehr Informationen über die Mailingliste volkszaehler-users