我使用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