Wgrywanie i odświeżanie plików .csv

0

cześć

Wiem jak wgrać kreatorem plik csv/ txt.
Czy jest możliwość aby te pliki codziennie się aktualizowałyby w bazie sql - codziennie się zmieniają dane?

Pozdrawiam

2

Do jakiej bazy? Najlepiej klepnąć skrypt w poweshellu lub bashu i odpalać cronem albo z dziennika zdarzeń.

0

do bazy sql która stworze.
Kreatorem to luz tylko jak dane się codziennie zmieniają to bez sensu codziennie robić to kreatorem.

1

Kolega pytał raczej o serwer, z którego korzystasz. MySQL/mariaDB/PostgreSQL/MSSQL/ORACLE/INNY

0

mssql

2
Jeziorko napisał(a):

Czy jest możliwość aby te pliki codziennie się aktualizowałyby w bazie sql - codziennie się zmieniają dane?

Pytanie, co to znaczy aktualizacja. Bo dla mnie to wbijanie się w te same klucze pierwotne.
Obstawiam, że bardziej nastawiasz się na "wycięcie i wgranie na nowo"

Klientem command-line do bazy ms-sql jest sqlcmd

odpowiedż na tyle szczegółowa, na ile twoje pytanie

0

Wycięcie i wgranie na nowo to byłoby to czego potrzebuje.

Wyobrażam dobie tak - mam wgrany do bazy plik i ma 1000 rekordów. W kolejnym dniu ten sam plik ma już 2000 rekordów . Chciałbym stary usunąć a wziąć pod uwagę nowe dane.

2

Zrób sobie tabelkę A tylko do celów importu - przed importem kasuj jej zawartość i wrzucaj do niej CSV. Do docelowej tabeli X, z której korzysta twoja "aplikacja" wstawiasz tylko te dane, które się różnią.
W zależności od tego co się dzieje w CSV (czy tylko nowe rekordy są dodawane czy również modyfikowane) musisz opracować metodę aktualizacji danych w tabeli X. Najprościej będzie to zrobić poleceniem MERGE. Warunkiem jest, żeby w CSV była kolumna lub kolumny, które składają się na unikalny klucz. Wtedy po nim jesteś w stanie połączyć dane z A i X.
MERGE wstawi ci nowe rekordy, jeśli dany klucz unikalny nie istnieje w X lub zrobi UPDATE, jeśli dany klucz już istnieje.

0

ok tylko zdarza się że np dziś jest 1000 wierszy a jutro 2000 ale nowych zupełnie a tamtych 1000 nie ma już.

0

No ale jeśli nie usuwasz ich z tabeli X w procesie ładowania, to w czym problem?
Chyba, że CSV zawiera zawsze tylko to co ma być w X, to wtedy musisz zaimplementować również sposób usuwania danych nieaktualnych (analogicznie - na podstawie jakiegoś unikalnego klucza).

0

nie do końca rozumiem.
Chodzi tylko o to aby z pliku csv/ txt który zmienia się codziennie w mojej tabeli w mssql były aktualne dane a nie np z dnia wczorajszego.
Dane w pliku txt czasami są zupełnie inne a czasami do już istniejących dochodzą zupełnie nowe dane.

0
Jeziorko napisał(a):

nie do końca rozumiem.
Chodzi tylko o to aby z pliku csv/ txt który zmienia się codziennie w mojej tabeli w mssql były aktualne dane a nie np z dnia wczorajszego.
Dane w pliku txt czasami są zupełnie inne a czasami do już istniejących dochodzą zupełnie nowe dane.

Jak na razie, to twoje wypowiedzi chodzą w kółko.

Co to za dane?
Co rozumiesz jako "nowa dana", a co "do istniejących dochodzą nowe" , bo sam sfinks nie zgadnie

Jak już się znajdą w bazie SQL, jak zamierzasz je przeszukiwać (po czym, wg jakiego klucza) i jak przetwarzać (czy będa tylko czytane, czy jakieś aktywne życie). Moze od tej stronu sam (i my) uzyskasz większą jasnosć

0

masz w tym pliku jakiś klucz główny po którym możesz identyfikować rekordy? Bo jak nie to jest to nie do zrealizowania

1

Wydaje mi się, że próbujecie rozwiązać problem bardziej złożony, niż jest w rzeczywistości.
Jeśli dobrze rozumiem, OP chce codziennie importować zestaw danych do tabeli bez zachowania danych z poprzedniego dnia.

W takiej sytuacji wystarczy wyczyścić tabelę i zassać do niej wszystkie rekordy z pliku.
To pierwsze wykonujesz poprzez

TRUNCATE TABLE [nazwa_tabeli]

To drugie sobie wyklikaj w kreatorze MS SSMS i wyskryptuj.

Całość zapisz sobie w pliku .sql i zaplanuj w harmonogramie zadań codzienne wykonywanie za pomocą sqlcmd

link

0

dokładnie oto mi chodziło - dziękuje i życzę Wam Wesołych Świąt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1