Adatbázis: SQL, XML DB

MySql invalid adatok keresése

Egy mysql adatbázis költöztetése során kiderült, hogy olyan értékek vannak benne, amik nem lehetnének. Tipikusan ezek enum mezők, amik nem lehetnek NULL értékűek, nem üres értkélistával. Mégis üres string van bennük.

A forrás szerveren - régebbi mysql verzió - gond nélkül fut a program, de már ott is ilyen adatok vannak.

Az új, frissebb verziójú szerveren, az adatok importja közben jelzi, hogy érvénytelen adat, és leáll az import.

Mivel minden ilyen konkrét jelzés eddig csak a fenti típusú hibára jelentkezett, ezért az INSERT parancsokat INSERT IGNORE parancsra cseréltem. Így betöltötte a teljes adatbázist. Meglepetésemre ugyanígy hibás adatokkal. (Azt vártam volna, hogy ezeket átugorja.)

Most tehát van egy szintén a definíciónak nem megfelelő adattartalmú adatbázisom, amin a program ugyan továbbra is gond nélkül fut, de én mégsem vagyok nyugodt. És itt jön a kérdés:

Hogyan tudnám arra kérni a mysql-t, hogy mutassa meg, mely rekordok ütköznek a definícióval?

sqlite lekérdezés

Üdv!
Most nagyon aktuális...

Van egy sqlite - 2019 óta napi rendszerességű adatokkal - gázfogyasztás adatbázisom.
Szeretnék egy/két lekérdezést csinálni, hogy mennyi volt az adott havi (mind...) fogyasztás. Ill. évenkénti is.
Jól olvastam, hogy a GROUP BY-ban nincs havi?
Hogy tudom megcsinálni?
Pl. egy adott évre próbáltam:
select sum(mero),datum from gaz where datum>'2021-12-31' and datum<'2023-01-01'
ráadásul az értékek abszulút (óra mutatott) értékek...

Köszönöm,
Roland

Mariadb másodperc bevitele time típusú oszlopba

Sziasztok!

 

Érdekes problémába ütköztem a MariaDB-vel. Szeretnék bevinni adatokat egy táblába, ahol is az egyik oszlop típusa time[6] (6-os pontosságú milliszekundumok). Ebbe másodperc alapon vinném be az időket. A beszúrások nagyrésze oké, de van egy vesszőparipája. A 190, 192 és ekörnyéki értékekre hibát dob

Incorrect time value: '192' for column `gyakorlas`.`media`.`duration` at row 1

Ha mondjuk 240-et, 300-at vagy 120-at kap, gond nélkül beviszi. Mi lehet ennek oka, és esetleg a megoldása?

Köszi!

MariaDB lekérdezés baromi lessú lett

Üdv!

Frissítettem egy szerveren az os-t. Ezzel együtt frissült a mariadb is. A mariadb külön frissítés is lefutott szépen.
Viszont egyes lekérések ahol (Bár ezt nem tudom 100%-ban) like van iszonyat lassú lett. (47-49 mp)
Egy másik gépen ahol megegyezik a szerverrel a mariadb, php és apache conf ugyanaz a lekérés pár mp.
A top-ot megnézve a szerveren a lekéréskor 100 vagy nagyobb százalékban pörgeti a cpu-t. 
A progi is ugyanaz mindkét helyen.  
Már nincs nagyon ötletem mit nézzek meg.
Van valami ötlet esetleg? Hátha kihagytam magam.

Köszi!

SQL query táblatisztításra prefix alapon

Sziasztok!

Napi szinten használok SQL-t (esetemben MariaDB), de van egy query, ami feladta a leckét, lényegében elképzelésem sincs, hogy hogy nézne ez ki. Viszont számomra nagyon-nagyon hasznos lenne.

Van egy táblám amelyből jelen esetben 3 oszlop a lényeg: GROUP, PREFIX, VALUE.

Csoportonként (GROUP érték) szeretném törölni azokat a rekordokat, ahol a prefix hosszabb egy nála rövidebb de azonos értéűvel definiáltnál, viszont a VALUE értéke megegyezik.

Pl.:

group1 a123  1.2

group1 a1234 1.2    <-ez nem kell mert a rövidebben definiáltnál is ennyi a VALUE

group1 a1235 1.4

group2 a1234 1.6

group2 a12345 1.6   <-ez nem kell mert a rövidebben definiáltnál is ennyi a VALUE

És mindezt csoportonként.

 

Ez a DELETE query valahogy nem áll össze a fejemben.

Hogy kellene ennek nagyjából kinéznie?

A válaszaitokat előre is köszönöm!

mysqldump visszatöltés nagyon lassú

Sziasztok!

Van egy 1,6 GB-os mysqldump állomány ami az egyik "fejlesztői" gépen iszonyú lassan töltődik vissza.

Ha egy time parancsot elé teszek a következő kimenetet kapom:

real    27m45,435s
user    0m25,539s
sys     0m0,912s

Viszonyításkép az egyik VPS-en 27 perc helyett 4 perc ugyan ez. Igaz ebben a "fejlesztői" gépben SATA SSD van, a VPS-ben meg valószínűleg sokkal gyorsabb MVMe SSD, de ekkora eltérésnek azért gondolom nem kellene lenni. 

SMART információkból nekem úgy tűnik nincs baja az SSD-nek, ennek ellenére én azt sejtem a szűk keretmetszetnek. De ötletem sincs hol kezdjem a hibakeresést, mit nézzek és mivel. Tudnátok valamit tanácsolni? Én fejlesztő vagyok, ezekhez a dolgokhoz annyira nem értek.

Timeseries adat feldolgozasa Postgresben

Villanyorabol kinyert adataimat szeretnem megjeleniteni Grafanaban.

A cel az, hogy napi, heti illetve havi bontasban lassam a felhasznalast (kWh-ban).

Igy nez ki a mar nagyjabol formazott adathalmazom:
 

ts				val
2022-05-07 17:06:58		004139.17
2022-05-07 17:12:32		004139.19
2022-05-07 17:18:06		004139.20
2022-05-07 17:29:13		004139.21
2022-05-07 17:34:47		004139.22
2022-05-07 17:40:21		004139.23
2022-05-07 17:45:55		004139.24
2022-05-07 17:51:29		004139.25
2022-05-07 17:57:03		004139.28
2022-05-07 18:02:37		004139.31
2022-05-07 18:08:11		004139.33
2022-05-07 18:13:45		004139.35
2022-05-07 18:19:19		004139.38
2022-05-07 18:24:52		004139.44
2022-05-07 18:30:25		004139.60

 

Ha jol gondolkozom, akkor ahhoz hogy egy napi bontast lassak, ki kene szamolni az orankenti fogyasztast (lehetne kisebb interval is, hogy egy oran belul tobb datapointom legyen, de szerintem felesleges).

Es akkor a grafikonon az X tengely az idopont: 0 ora, 1 ora, 2 ora, 23 oraig (vagy masnap 0-ig...?) az Y tengely pedig a max-min deltak az adott oraban.

Ugye a nulladik oraban a delta mindig 0 lenne, viszont 1 oranal mar az elso oraban mert legkisebb es legnagyobb ertek kulonbseget kene megjeleniteni es igy tovabb...

Addig jutottam, hogy le tudtam kerdezni az adott oraban a legkisebb es legnagyobb ertekeket, de az osszeboronalas mar nem ment.

Ez a kovetkezo keppen nez ki:

A tabla DDL-je:

create table ts_string
(
    id    integer not null,
    ts    bigint  not null,
    val   text,
    ack   boolean,
    _from integer,
    q     integer,
    primary key (id, ts)
);

 

A legkisebb ertek az adott oraban:

select distinct on (1) date_trunc('hour',to_timestamp(ts/1000)), val from ts_string where id = 2 order by 1,2 asc;


A legnagyobb ertek az adott oraban:

select distinct on (1) date_trunc('hour',to_timestamp(ts/1000)), val from ts_string where id = 2 order by 1,2 desc;

 

Ugye ezt a ket erteket kene kivonni egymasbol es lekorlatozni az adathalmazt a mai napra, azaz majus 7. 00:00-tol 23:59-ig.

Talan valahogy a date_trunc-os datum alapjan kene GROUP BY-olni es akkor a min_val es max_val aliasu selecteket kivonni egymasbol, de a teljes megoldasig nem jutottam.

 

Ha segit itt egy kis raw data a ts_string tablabol:

id,ts,val,ack,_from,q
2,1651943218419,004139.17,true,1,0
2,1651943552309,004139.19,true,1,0
2,1651943886315,004139.20,true,1,0
2,1651944553927,004139.21,true,1,0
2,1651944887804,004139.22,true,1,0
2,1651945221732,004139.23,true,1,0
2,1651945555690,004139.24,true,1,0
2,1651945889426,004139.25,true,1,0
2,1651946223444,004139.28,true,1,0
2,1651946557211,004139.31,true,1,0
2,1651946891028,004139.33,true,1,0
2,1651947225136,004139.35,true,1,0
2,1651947559034,004139.38,true,1,0
2,1651947892582,004139.44,true,1,0
2,1651948225906,004139.60,true,1,0
2,1651948559496,004139.81,true,1,0
2,1651948892947,004140.03,true,1,0
2,1651949226157,004140.26,true,1,0

qgis -- xyz-raster-sources

Sziasztok.

Qgis-hez keresek olyan raszterforrást, amin elsősorban Európa és Ázsia domborzati és vízrajzi térképe szerepel, esetleg a nagyobb városok neveivel és az országhatárokkal.

Egy már bevált, csak bűn ronda:

http://c.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg

Ez is jó, de mást szeretnék:

https://tile.openstreetmap.org/{z}/{x}/{y}.png

MySQL lekérdezés eredménye egy mezőbe

Sziasztok!

Lenne egy olyan megoldás, ami bash script által jól működik, leszedi a MySQL  DB-ből a ussers/user-name listát egy TXT fájlba, és utána ezt egy másik mysql script beleteszi egy állandó mezőbe (user_lists.users).

Hogyan tudnám ezt egy MySQL lekérdezéssel megodani? Az  gond, hogy vagy 10 éve foglalkoztam ilyen mélységben, adatbázisokkal.