[MySQL + ODBC] obróbka dużej tabeli wyników

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
STAS
Posty: 5
Rejestracja: 19 lis 2008 08:34
Lokalizacja: Warszawa
Kontakt:

[MySQL + ODBC] obróbka dużej tabeli wyników

Post autor: STAS »

Jest to mój pierwszy post, więc na wstępie chcę wszystkich przywitać.
A teraz do rzeczy.
Mam taki problem. Przejąłem stanowiska pomiarowe, które przez ODBC przesyłają dane do MySQLowej bazy danych i zapisują je. Przez kilka miesięcy uzbierała mi się tabela wyników zajmująca około 3,5 miliona wierszy. Teraz chcę zrobić oddzielną aplikację, która otworzy tą tabelę i wyniki przetworzy. Ale jest problem, ponieważ nawet przy malutkiej tablicy zawierającej jakieś 500 tysięcy wyników LabVIEW się wysypuje. Po prostu się zamyka, tak samo jest po zrobieniu exe-ka.
O taki prościutki schemacik: Obrazek
Może ktoś mi podpowiedzieć, jak otworzyć tą tabelę? Dodam że aplikacja, która mi popełniła te wyniki jest zrobiona w LabView z wykorzystaniem GOOP.
STAS
Posty: 5
Rejestracja: 19 lis 2008 08:34
Lokalizacja: Warszawa
Kontakt:

Re: [MySQL + ODBC] obróbka dużej tabeli wyników

Post autor: STAS »

aha!! LV 8.5

przy 100 tys. wierszy działa :evil:
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

[MySQL + ODBC] obróbka dużej tabeli wyników

Post autor: Mikrobi »

Zatem może jednak słać kolejne paczki po 100.000 wierszy :?:
Jeśli to tablica 1D to mozna przekształcić taką tablice na 2D z jednym wymiarem ustawionym na 100.000

Gdy LabVIEW ma problemy w obrębie środowiska zasadniczo wyrzuca błąd przez klaster błędu. Zapnij probe na przewodzie zaraz za funkcją.

Jesli jest błąd na styku LabVIEW-MySQL - to może byc jego źródlem funkcja przenosząca z LabVIEW do MySQLa : dostaje za duzy pakiet i nie potrafi go obsłużyć - to może byc błąd który zamyka środowisko.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
STAS
Posty: 5
Rejestracja: 19 lis 2008 08:34
Lokalizacja: Warszawa
Kontakt:

Re: [MySQL + ODBC] obróbka dużej tabeli wyników

Post autor: STAS »

Tak właśnie jest! To komunikacja z bazą danych sprawia problem.
A ja nie mogę z nią nic zrobić, nawet podzielić na kawałki. Potrzebne mi są dane tylko z 2-4 tygodnie wstecz, a to już się łapie spokojnie w 100.000.
Ale jak to zrobić?
Jeżeli odepnę połączenie DATA, też się wysypuje.
Zauważ, że ja próbuję podejrzeć tylko jeden wiersz i to też nie działa.
Kluczem może być to, jak zrobić żeby nie otwierał mi całej tablicy, tylko ostatnie x wierszy?
:help:
STAS
Posty: 5
Rejestracja: 19 lis 2008 08:34
Lokalizacja: Warszawa
Kontakt:

Re: [MySQL + ODBC] obróbka dużej tabeli wyników

Post autor: STAS »

a przy okazji zapytam, bo też nie wiem. Jak wyciągnąć informację o rozmiarach tabeli?
Awatar użytkownika
Ender
Posty: 137
Rejestracja: 02 cze 2005 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Cieszyn

[MySQL + ODBC] obróbka dużej tabeli wyników

Post autor: Ender »

Rozmiar tabeli otrzymujesz za pomocą bloczka Array Size. Przyznam że nie bawiłem się bazami danych, ale bloczek DB Tools Select Data posiada wejście optional clause. Z opisu w help wynika, że służy ono do filtrowania danych pobieranych z bazy. Spróbuj wprowadź tam warunek że chcesz pobierać wiersze o numerach większych niż np 3,4 miliona.
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
STAS
Posty: 5
Rejestracja: 19 lis 2008 08:34
Lokalizacja: Warszawa
Kontakt:

Re: [MySQL + ODBC] obróbka dużej tabeli wyników

Post autor: STAS »

Bingo!!
Faktycznie "optional clause" zadziałało.
Jest to opcja umożliwiająca dopisanie kodu MySQL. Wpisując tam stringa "WHERE [...]" możemy sortować tabele i wtedy wyświetla tylko to co posortujemy. Ja zastosowałem sortowanie wg daty, bo to mi jest potrzebne.

Kod MySQL wygląda następująco:

mysql> select * from [nazwa_tabeli]
i to co powyżej, zawiera bloczek DB Tools Select Data.
Mamy możliwość dopisania dalszej części tego kodu.
I tak dopisujemy:

WHERE YEAR(nazwa_kolumny)='xxxx' AND MONTH(nazwa_kolumny)='xx' AND DAYOFMONTH(nazwa_kolumny)='xx'

Takiego stringa dajemy na optional clause i mamy sortowanie po dacie.

Jeżeli chodzi o liczenie ilości wierszy, jest to bardziej skomplikowane bo dane z bazy wychodzą jako Variant.
Trzeba przepuścić to przez "Variant to Data" i nadając odpowiedni typ danej (2D array of string) można zastosować bloczek "Array Size".
W ten sposób otrzymujemy macierz 1D z ilością kolumn oraz wierszy.

Dzięki za pomoc!
Ostatnio zmieniony 19 lis 2008 17:42 przez STAS, łącznie zmieniany 1 raz.
ODPOWIEDZ