我使用awk在stdout中生成csv。 有沒有辦法直接導入mysql中的內容而不把它放到文件中?從stdin導入MySQL
回答
是的,只需使用管道。
$ your_command | mysql -u用戶-p
對不起,這個答案是不夠的。您不能將csv直接傳輸到mysql。 你必須做額外的工作才能使結果成爲有效的sql。
或者,您可以考慮使用mysql本機load data infile
語法,它支持將csv文件加載到數據庫。
@xdazz比我快,但我會考慮把結果放到一個文件中。爲什麼?因此,如果出現問題,您可以檢查並追蹤問題。如果您遇到間歇性問題,這並不總是會發生,這將非常有幫助。當然,爲了保留磁盤空間,導入完成後,我會將它們壓縮到不會消耗太多。
似乎你可以直接從stdin導入CSV。 你必須讓MySQL使用它的名字作爲表名(不包括擴展名),將其保存到一個文件,你可以使用的mysqlimport爲:
mysqlimport -uUSER -pPASS DB FILE
在這裏,我們有最接近正確的答案,零upvotes。 –
MySQL的支持通過擴展獲取數據插入看起來像這樣:
insert into table (col1, col2, col3) values
(a,b,c),
(d,e,f),
(g,h,i);
所以,你可以修改您的CSV到包括左括號和右括號和逗號,並與insert into table...
預置它,並用分號追加,那麼你可以通過管道將直接到MySQL命令行。
您還可以使用命名管道,Unix的結構,管道的TSV(製表符分隔,而不是逗號分隔)到load data infile
這樣的:
mkfifo /tmp/mysqltsv
cat file.csv | sed -e 's/,/\t/g' > /tmp/mysqltsv
mysql -e "load data infile '/tmp/mysqltsv' into table tblname"
這就是僞代碼。你需要在一個進程中運行cat,在另一個進程中運行mysql命令。最簡單的是使用兩個不同的終端。更高級的是背景cat|sed
。
正如@xdazz所說的答案,只需使用LOAD DATA LOCAL INFILE
即可。我認爲它是由於無知或懶惰而被低估的。仔細閱讀MySQL手冊就會發現這是一個完美可行的答案。
2016年和MariaDB的,這將是最相關的大多數用戶,你這樣做:
bash awk '{ /* My script that spits out a CSV */ }' | mysql --local-infile=1 -u user -ppassword mydatabase -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE mytable FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';"
顯然,就懶得去閱讀手冊並更改選項LOAD DATA INFILE
根據需要適應你的具體案例。
- 1. 從PHP寫入stdin?
- 2. 從stdin中加入數組
- 3. 嵌入Lua在C從STDIN輸入
- 4. LoopBack:從MySql導入模型
- 5. 從CSV導入的MySql
- 6. 從execv運行mysql導入
- 7. Excel ODBC從MySQL導入
- 8. 從XSLX自動導入Mysql
- 9. ElasticSearch從mysql導入數據
- 10. 從腳本導入Mysql
- 11. Windows腳本:註冊表從Pipe/STDIN導入?
- 12. filemaker從MySQL導入和導出
- 13. PostgreSQL csv從MySQL csv導出導入?
- 14. mysql導入/導出
- 15. 從ARGF獲取文件輸入和STDIN?
- 16. 從STDIN讀取文件並寫入STDOUT
- 17. 從C重定向stdin輸入驗證
- 18. 構建從stdin
- 19. 從stdin讀取
- 20. 讀線從STDIN
- 21. 從MariaDB導入到MySQL時的錯誤
- 22. 從MySql導入數據到Stata
- 23. 從php文件導入信息到mysql
- 24. 從txt導入MySQL - 字符集
- 25. 從java代碼導入mysql數據庫
- 26. 轉置從mySQL導入的表的列
- 27. 如何從MySQL將表導入到Hive?
- 28. 從CSV到MySQL的選擇性導入
- 29. 如何從Excel導入數據到MYSQL?
- 30. 導入CSV表,然後從MySQL表
爲什麼這個答案給出?它不起作用。爲什麼它被提高了?它不起作用。嘗試一下。你會得到一個語法錯誤。這隻有在「your_command」的輸出是有效的SQL時纔有效,而CSV肯定不是。 –
@xdazz我驚呆了,發佈這樣的答案的人能夠積累101k的聲望,除非他們通過不正確地閱讀問題而犯了一個誠實的錯誤。也許是時候編輯這個答案了? – toon81