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
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
Do jakiej bazy? Najlepiej klepnąć skrypt w poweshellu lub bashu i odpalać cronem albo z dziennika zdarzeń.
do bazy sql która stworze.
Kreatorem to luz tylko jak dane się codziennie zmieniają to bez sensu codziennie robić to kreatorem.
Kolega pytał raczej o serwer, z którego korzystasz. MySQL/mariaDB/PostgreSQL/MSSQL/ORACLE/INNY
mssql
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
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.
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.
ok tylko zdarza się że np dziś jest 1000 wierszy a jutro 2000 ale nowych zupełnie a tamtych 1000 nie ma już.
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).
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.
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ć
masz w tym pliku jakiś klucz główny po którym możesz identyfikować rekordy? Bo jak nie to jest to nie do zrealizowania
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
dokładnie oto mi chodziło - dziękuje i życzę Wam Wesołych Świąt.