Autor | Zpráva | ||
---|---|---|---|
MikeO Profil |
#1 · Zasláno: 19. 1. 2019, 17:43:03
Mám problém s importem velmi jednoduchého textového souboru stávajícího ze tří sloupců do tabulky v mysql. Data jsem převedl i do formátu csv, ale taktéž mi nejdou importovat. Formát dat v csv souboru je následující: "hodnota1","hodnota2",hodnota3"
Pakliže se rozhodnu jako uživatel v phpmyadmin o import, výsledek skončí s touhle hláškou: Nepodařilo se načíst žádná data k importu. Buďto nebyl odeslán žádný soubor, nebo jeho velikost překročila velikost povolenou v nastavení PHP. Viz FAQ 1.16. Pomocí příkazu mysqlimport: mysqlimport -u root -p -h localhost --fields-enclosed-by=" --fields-terminated-by=, databaze tabulka.csv se taktéž nic neděje a skončím takhle >_ a data naimportována nebyla. Tabulka tabulka je v databazi vytvořena a je s prvním sloupcem id jako AUTO_INCREMENT a třemi dalšími: hodnota1, hodnota2, hodnota3, vše typy VARCHAR. Import jsem zkoušel i bez sloupce id v mysql tabulce. V nastavení mám: file_uploads On, upload_max_filesize 2M. Můj soubor je větší, ale rozdělil jsem jej na menší, konfiguraci jsem neměnil. A už mi dochází inspirace, kde je problém. |
||
TomášK. Profil * |
#2 · Zasláno: 20. 1. 2019, 00:32:12
Máš ošetřené uvozovky? Nečeká to jen na ukončení příkazu?
mysqlimport -u root -p -h localhost --fields-enclosed-by='"' --fields-terminated-by=, |
||
Časová prodleva: 11 měsíců
|
|||
MikeO Profil |
TomášK.:
Díky, ale tím to asi nebude. Po nějaké aktualizaci mysql, která proběhla letošní rok, zcela nepozměněný příkaz mysqlimport viz výše, prošel, ovšem s chybovou hláškou mysqlimport: Error: 13, Can't get stat of 'tabulka.csv' (Errcode: 13 "Permission denied"), when using table: tabulka Práva v mysql pro databázi jsem přidělil: GRANT ALL PRIVILEGES ON databaze TO pro daného uživatele Linuxová práva pro datový adresář mysql jsou pro uživatele mysql:mysql drwxr-xr-x Připojený jsem přes localhost UNIX socket |
||
Kajman Profil |
#4 · Zasláno: 14. 12. 2019, 16:00:43
Může být špatná cesta (zkuste absolutní) nebo může být omezení politikou selinuxu.
|
||
Keeehi Profil |
MikeO:
Taky mysql nemusí mít přístup do té složky. Nejde jen o práva toho souboru ale taky o adresáře ve kterých se nachází. Ověřit by to mělo jít pomocí: sudo -u mysql ls /cesta/k/souboru/tabulka.csv |
||
MikeO Profil |
#6 · Zasláno: 15. 12. 2019, 23:13:30
Děkuji. Ano byla to ta práva pro složku, kde se nacházel soubor csv, mysqlimport tam nemohl.
Data pak dle parametrů šla ze souboru naimportovat, ale musel jsem smazat v databázi id pole s vlastností auto_increment, s id to končilo chybou: mysqlimport: Error: 1062, Duplicate entry '2018' for key 'PRIMARY', when using table: tabulka Asi bych řekl, že až po naimportování všech dat, teprve řešit id záznamů. |
||
Keeehi Profil |
#7 · Zasláno: 16. 12. 2019, 00:37:15
MikeO:
No ta chyba to říká celkem jasně, snažil jsi se do toho sloupce uložit záznam s id 2018, jenže záznam s takovým id tam už byl. Druhá možnost je, že duplikované id bylo v tom csv souboru. |
||
MikeO Profil |
#8 · Zasláno: 16. 12. 2019, 13:37:15
Ano vím, tak jsem sloupec id s auto_increment dal jako poslední a při vkládání je to již bez problému. Hodnota 2018 se tam opakovat několikrát samozřejmě bude, ale již ne v id, ale v jiném sloupci.
|
||
MikeO Profil |
#9 · Zasláno: 16. 12. 2019, 17:37:46
Ztrácím už tipy jak odmazat prázdné řádky v rozsáhlejším textovém souboru. Soubory mají cca 80000 řádků a tyhle možnosti mi na tak velké soubory už nefungují, pouze na menší.
sed '/^$/d' cat /souborkimportu | tr -s '\n' V příkazu sed jsem nenašel žádný parametr, ktery by ovlivňoval velikost souboru se kterým může pracovat. |
||
Keeehi Profil |
#10 · Zasláno: 16. 12. 2019, 18:12:07
MikeO:
On taky na to žádný parametr není. On tam žádný limit na to teoreticky není. Limitem je paměť, kterou ten příkaz (program) ke svému běhu potřebuje. Pokud to spouštíš na serveru, tak to zkus udělat u sebe na počítači, protože u sebe budeš mít asi více paměti. Pokud ti nestačí paměť nikde, budeš se muset podívat po nástroji který nenačítá celý vstupní soubor do paměti najednou ale čte ho sekvenčně, po částech. |
||
MikeO Profil |
#11 · Zasláno: 16. 12. 2019, 18:37:47
Ty soubory jsou v řádcích sice rozsáhlejší, ale o velikosti max 2-3MB více ne, na serveru jsem to ani nespouštěl, spouštím na pc, 16GB ram, což mi přijde dostačující pro tenhle účel. Zkusím je ješt ě rozdělit na menší části. A nebo přikoupit paměť :-)
|
||
Keeehi Profil |
MikeO:
Při takovýchto hodnotách by to pro počítač neměl být žádný problém. Jak se projevuje to, že ti nefunguje to mazání řádků? Příkaz běží a nikdy neskončí/soubor je nezměněn/soubor je prázdný/něco jiného? Co mě teď napadá je, že některé příkazy nemají rády když upravují soubor který čtou, je u nich potřeba zdrojová data načítat z jednoho souboru a transformovaný výstup ukládat do jiného souboru. Tak jestli problém nemůže být v tom. |
||
Časová prodleva: 5 let
|
0