Generowanie poleceń Insert SQL z pliku csv
Muszę zaimportować plik csv do Firebird i spędziłem kilka godzin testując niektóre narzędzia i żadne nie pasują do moich potrzeb.
Głównym problemem jest to, że wszystkie narzędzia, które próbowałem jak Import danych EMSi Firebird Data Wizardoczekują, że mój plik csv zawiera wszystkie informacje potrzebne do mojej tabeli.
Muszę napisać jakiś Niestandardowy SQL w instrukcji insert, na przykład mam plik cvs z nazwą miasta, ale jako moja baza danych już ma wszystkie miasta w innej tabeli (znormalizowane), muszę napisać podwybór w instrukcji insert szukać dla miasta i napisać jego ID, również mam procedurę składowaną cread GUIDS.
Moja wstawka będzie mniej więcej taka:
INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES((SELECT NEW_GUID FROM CREATE_GUID), :NAME, (SELECT CITY_ID FROM CITY WHERE NAME = :CITY_NAME)
Wiem, że bardzo łatwo jest napisać aplikację, aby to zrobić, ale nie lubię odkrywać koła na nowo i jestem pewien, że istnieją pewne narzędzia, aby to zrobić.
Możecie mi coś doradzić?14 answers
To trochę prymitywne - ale do jednorazowych zadań czasem używam Excela.
Jeśli zaimportujesz plik CSV do programu Excel, możesz utworzyć formułę, która utworzy instrukcję INSERT za pomocą konkatenacji łańcuchowej w formule. Tak więc - jeśli Twój plik CSV ma kolumny 3, które pojawiają się w kolumnach a, B I C w programie Excel, możesz napisać formułę podobną...
="INSERT INTO MyTable (Col1, Col2, Col3) VALUES (" & A1 & ", " & B1&", " & C1&") "
Wtedy można odtworzyć formułę w dół wszystkich twoje wiersze, a następnie skopiuj i wklej odpowiedź do pliku tekstowego, aby uruchomić się z bazą danych.
Jak mówię-to prymitywne-ale to może być dość "szybki i brudny" sposób wykonania pracy!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-11 21:07:51
Czasami używam najprostszego na świecie generatora kodu (edycja Javascript). Jest online, ale to tylko javascript - Twoje dane nigdzie nie idą. Istnieje również wersja asp , z większą ilością funkcji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-11 22:12:20
Cóż, jeśli jest to plik CSV i jest to jednorazowy proces, otwórz plik w Excelu, a następnie napisz formuły, aby wypełnić dane w dowolny sposób, a następnie napisz prostą formułę Concat, aby skonstruować swój SQL, a następnie skopiuj tę formułę dla każdego wiersza. Otrzymasz dużą liczbę poleceń SQL, które możesz wykonać w dowolnym miejscu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-11 21:02:14
Fabio,
Zrobiłem to, co Vaibhav zrobił wiele razy, i jest to dobry "szybki i brudny" sposób, aby uzyskać dane do bazy danych.
Jeśli musisz to zrobić kilka razy lub w jakimś harmonogramie, bardziej niezawodnym sposobem jest załadowanie danych CSV" as-is " do tabeli roboczej (np. customer_dataload), a następnie użycie standardowych poleceń SQL do wypełnienia brakujących pól.
(nie znam składni Firebird - ale coś w tym stylu...)
UPDATE person
SET id = (SELECT newguid() FROM createguid)
UPDATE person
SET cityid = (SELECT cityid FROM cities WHERE person.cityname = cities.cityname)
Itd.
Zazwyczaj jest to dużo szybciej (i bardziej niezawodnie), aby uzyskać dane do bazy danych, a następnie naprawić dane, niż próbować naprawić dane podczas przesyłania. Otrzymujesz również korzyści z transakcji, aby umożliwić wycofanie, jeśli nie zadziała!!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-11 21:14:21
Możesz zaimportować plik CSV do tabeli w takim stanie, w jakim jest, a następnie napisać zapytanie SQL, które wykona wszystkie wymagane przekształcenia zaimportowanej tabeli i wstawi wynik do tabeli docelowej.
Więc coś w stylu:
Insert into target_table
Wybierz t. n, c. city_id jako miasto
From temp_table t, cities c
Gdzie T. city_name = c. city_name
Nice tip o korzystaniu z Excela, ale sugeruję również, aby czuć się komfortowo z językiem skryptowym, takim jak Python, ponieważ dla niektórych zadań łatwiej jest po prostu napisać szybki skrypt Pythona, aby wykonać zadanie, niż próbować znaleźć potrzebną funkcję w Excelu lub gotowe narzędzie, które wykonuje zadanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-11 21:13:51
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-22 10:26:08
Bardzo proste narzędzie online: Konwersja z / do CSV
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-25 20:34:37
Używam lekkiego wariantu na temat techniki Excela Balona .
I wysoce polecam ściągnięcie za darmo wtyczka ASAP Utilities dla programu Excel. Jednym z wielu narzędzi oszczędzających czas są insert przed bieżącą wartością i insert po bieżącej wartości opcje.
Powinny one pozwolić ci szybciej znaleźć rozwiązanie, pomagając w budowaniu instrukcji insert.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:24
Użyj pliku csv jako zewnętrznej tabeli. Następnie możesz użyć SQL do skopiowania danych z tabeli zewnętrznej do tabeli docelowej - ze wszystkimi możliwościami SQL. Zobacz http://www.firebirdsql.org/index.php?op=useful&id=netzka
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-09 16:48:57
Właśnie skończyłem skrypt VBA, który może być przydatny do tego celu. Wystarczy zmienić instrukcję Insert tak, aby zawierała daną tabelę i listę kolumn (oczywiście w tej samej kolejności, co w pliku Excel).
Function CreateInsertStatement()
'Output file location and start of the insert statement
SQLScript = "C:\Inserts.sql"
cStart = "Insert Into Holidays (HOLIDAY_ID, NAT_HOLDAY_DESC, NAT_HOLDAY_DTE) Values ("
'Open file for output
Open SQLScript For Output As #1
Dim LoopThruRows As Boolean
Dim LoopThruCols As Boolean
nCommit = 1 'Commit Count
nCommitCount = 100 'The number of rows after which a commit is performed
LoopThruRows = True
nRow = 1 'Current row
While LoopThruRows
nRow = nRow + 1 'Start at second row - presuming there are headers
nCol = 1 'Reset the columns
If Cells(nRow, nCol).Value = Empty Then
Print #1, "Commit;"
LoopThruRows = False
Else
If nCommit = nCommitCount Then
Print #1, "Commit;"
nCommit = 1
Else
nCommit = nCommit + 1
End If
cLine = cStart
LoopThruCols = True
While LoopThruCols
If Cells(nRow, nCol).Value = Empty Then
cLine = cLine & ");" 'Close the SQL statement
Print #1, cLine 'Write the line
LoopThruCols = False 'Exit the cols loop
Else
If nCol > 1 Then 'add a preceeding comma for all bar the first column
cLine = cLine & ", "
End If
If Right(Left(Cells(nRow, nCol).Value, 3), 1) = "/" Then 'Format for dates
cLine = cLine & "TO_DATE('" & Cells(nRow, nCol).Value & "', 'dd/mm/yyyy')"
ElseIf IsNumeric(Left(Cells(nRow, nCol).Value, 1)) Then 'Format for numbers
cLine = cLine & Cells(nRow, nCol).Value
Else 'Format for text, including apostrophes
cLine = cLine & "'" & Replace(Cells(nRow, nCol).Value, "'", "''") & "'"
End If
nCol = nCol + 1
End If
Wend
End If
Wend
Close #1
End Function
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-30 03:18:35
Możesz użyć darmowego csvsql .
- zainstaluj go używając tych instrukcji
-
Teraz uruchom polecenie tak, aby zaimportować dane do bazy danych. Więcej szczegółów pod linkami powyżej, ale byłoby to coś w stylu:
csvsql --db firebase:///d=mydb --insert mydata.csv
-
Poniższe działa z sqlite i jest tym, czego używam do konwersji danych do łatwego do zapytania formatu
csvsql --db sqlite:///dump.db --insert mydata.csv
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-06 14:27:13
Opcja 1: 1-Czy próbowałeś IBExert? IBExpert \ Tools \ Import danych (wersja próbna lub Wersja klienta).
Opcja 2: 2-Prześlij plik csv do tymczasowej tabeli za pomocą F_BLOBLOAD. 3-Utwórz procedurę składowaną, która wykorzystywała 3 Funkcje (f_stringlength, f_strcopy, f_MID) krzyżujesz cały łańcuch, ciągnąc pola, aby zbudować wkładkę.
Linki: 2: http://freeadhocudf.org/documentation_english/dok_eng_file.html 3: http://freeadhocudf.org/documentation_english/dok_eng_string.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-09 15:47:20
Ostatnio wypróbowałem narzędzie, które zadziałało znakomicie, to FSQL .
Piszesz polecenie IMPORT, wklejasz je do FSQL
i importuje plik CSV do tabeli Firebird.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-01 02:40:57
Zrobiłbym to z awk .
Na przykład, jeśli masz tę informację w pliku CSV:
Bob,New York
Jane,San Francisco
Steven,Boston
Marie,Los Angeles
Poniższe polecenie da ci to, co chcesz, uruchom w tym samym katalogu co plik CSV (o nazwie name-city.csv
w tym przykładzie).
$ awk -F, '{ print "INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES ((SELECT NEW_GUID FROM CREATE_GUID), '\''"$1"'\'', (SELECT CITY_ID FROM CITY WHERE NAME = '\''"$2"'\''))" }' name-city.csv
Wpisz awk --help
aby uzyskać więcej informacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-15 19:20:18