SELECT INTO OUTFILE语句使用
1.1 SELECT … INTO OUTFILE的使用场景
在工作中,经常遇到需要将数据导出到excel表给到数据分析的同事,当数据量较大的时候,通过mysql的图形界面工具navcait无法导出,此时可以尝试使用SELECT … INTO OUTFILE的方法。
另外,在关系型数据库MySQL与Hive进行数据交互的时候,除了使用sqoop工具,也可以导出成csv或txt文件,然后在Hive端通过load data的方式进行导入。
当然,我们也可以通过SELECT … INTO OUTFILE与Load data来迁移不同MySQL实例上的数据。
1.2 SELECT … INTO OUTFILE官方文档介绍
SELECT … INTO OUTFILE ‘file_name’ 形式将选定的行写入文件。该文件是在服务器主机上创建的,因此您必须拥有file特权才能使用此语法。File_name不能是已存在的文件,这样可以防止修改/etc/passwd和数据库表等文件。character_set_filesystem系统变量控制文件名的解释。
SELECT … INTO OUTFILE句旨在启用将表转储到服务器主机上的文本文件。要在其他主机上创建结果文件,这个命令是不合适的,因为没有办法编写文件相对于服务器主机文件系统的路径,除非可以使用服务器主机文件系统上的网络映射路径访问远程主机上的文件位置。
或者,如果MySQL客户端软件安装在远程主机上,您可以使用一个客户端命令,如MySQL -e “SELECT…”> file_name生成该主机上的文件。
SELECT … INTO OUTFILE 是LOAD DATA的补充。列值被写入转换为character set子句中指定的字符集。如果没有这样的子句,则使用二进制字符集转储值。实际上,不存在字符集转换。如果结果集包含多个字符集中的列,那么输出数据文件也是如此,可能无法正确地重新加载文件。
语句的export_options部分的语法由与LOAD DATA语句使用的相同的FIELDS和LINES子句组成。有关FIELDS和LINES子句的信息,包括它们的默认值和允许值。
FIELDS ESCAPED BY 控制如何编写特殊字符。如果FIELDS转义BY字符不为空,则在必要时使用它作为输出中后面字符的前缀以避免歧义:
按字符转义的字段
字段[可选]由字符包围
FIELDS TERMINATED BY和LINES TERMINATED BY值的第一个字符
ASCII NUL(零值字节;转义字符后面实际写的是ASCII 0,而不是零值字节)
必须对以FIELDS TERMINATED BY, ENCLOSED BY, ESCAPED BY, or LINES TERMINATED BY 字符结束的行进行转义,以便可以可靠地读取回文件。ASCII NUL被转义,以便使用某些分页器更容易查看。
生成的文件不需要符合SQL语法,因此不需要转义任何其他内容。
如果FIELDS ESCAPED BY 字符为空,则不转义任何字符,NULL输出为NULL,而不是\N。指定空转义字符可能不是一个好主意,特别是如果数据中的字段值包含刚才给出的列表中的任何字符。
当您希望将表的所有列转储到文本文件时,也可以使用INTO OUTFILE与TABLE语句一起使用。在这种情况下,可以使用ORDER BY和LIMIT控制行顺序和行数;这些条款必须在出库文件之前。表格INTO OUTFILE支持相同的export_options as does SELECT…在写入到文件系统时,它受到相同的限制。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




