SELECT INTO OUTFILE 语句是 DBA 常用的一种数据导出方式,与 MySQLDump 对比 SELECT INTO OUTFILE 语句能够对需要导出的字段做出限制,这很好的满足了某些不需要导出主键字段的场景。再配合 LOAD DATA INFILE 语句这将是一种很便利的数据导入导出方式。OceanBase 目前兼容这一个语法。

MySQL 模式

Oracle 模式

推荐使用的 OceanBase 版本

2.2.40 及以上

2.2.40 及以上

推荐使用的客户端

MySQL Client、OBClient

OBClient

注意:

客户端需要直连 OceanBase 实例以做导入导出操作。

语法

下述为SELECT INTO OUTFILE 语句的语法:

  1. SELECT [column_list] INTO '/PATH/FILE'
  2. [TERMINATED BY OPTIONALLY]
  3. [ENCLOSED BY OPTIONALLY]
  4. [ESCAPED BY OPTIONALLY]
  5. [LINES TERMINATED BY OPTIONALLY]
  6. [FROM TABLENAME]
  7. [WHERE condition]
  8.      [GROUP BY group_expression_list ]
  9. [HAVING condition]]
  10.      [ORDER BY order_expression_list]

语法中:

  • TERMINATED BY 子句用来指定字段值之间的符号。例如, TERMINATED BY ',' 指定了逗号作为两个字段值之间的标志。
  • ENCLOSED BY 子句用来指定包裹文件中字符值的符号。例如, ENCLOSED BY ' " ' 表示文件中字符值放在双引号之间,若加上关键字 OPTIONALLY 表示所有的值都放在双引号之间。
  • ESCAPED BY 子句用来指定转义字符。例如, ESCAPED BY '*' 表示将星号(*)指定为转义字符以取代默认的转义字符(\)。
  • LINES TERMINATED BY 子句用来指定一行结束的标志。例如, LINES TERMINATED BY ',' 表示一行将以逗号(,)作为结束标志。

示例

以下是本示例准备的示例表 student 和其中的数据:

  1. obclient> select * from student;
  2. +------+------+
  3. | ID | AGE |
  4. +------+------+
  5. | 1 | 7 |
  6. | 3 | 8 |
  7. | 4 | 9 |
  8. +------+------+

OceanBase 兼容 MySQL 的 SELECT INTO OUTFILE 语句,所以在 OceanBase 支持的客户端中运行下述语句以导出表 student 中的数据到指定路径的 TXT 文件中:

  1. obclient> select * into outfile '/tmp/demo01.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' from student;

OceanBase 也兼容 MySQL 的 LOAD DATA INFILE 语句,所以在 OceanBase 支持的客户端中运行下述语句以导入 TXT 文件中的数据至目标表 student 中:

  1. obclient> load data infile '/tmp/demo01.txt' into table student FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';