Skip to content

SELECT INTO 写出

MatrixOne 支持以下两种方式导出数据:

  • SELECT INTO...OUTFILE
  • mo-dump

本篇文档主要介绍如何使用 SELECT INTO...OUTFILE 导出数据。

使用 SELECT...INTO OUTFILE 语法可以将表数据导出到主机上的文本文件或者 stage 中。

语法结构

SELECT...INTO OUTFILE 语法是 SELECT 语法和 INTO OUTFILE filename 的结合。默认输出格式与 LOAD DATA 命令相同。

mysql> SELECT * FROM <table_name>
    -> INTO OUTFILE '<filepath>|<stage://stage_name>';

你可以采用多种形式和选项更改输出格式,用于表示如何引用、分隔列和记录。

使用以下代码以. csv 格式导出 TEST 表,下面的代码行是用回车换行进行展示的:

mysql> SELECT * FROM TEST INTO OUTFILE '/root/test.csv'
   -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
   -> LINES TERMINATED BY '\r\n';

SELECT ... INTO OUTFILE 特性如下

  • 导出的文件是由 MatrixOne 服务直接创建的,因此命令行中的 filename 应该指向你需要文件存入的服务器主机的位置。MatrixOne 暂不支持将文件导出到客户端文件系统。

  • SELECT ... INTO OUTFILE 是用于将检索出来的数据按格式导出到文件中,即需要导出的文件是由 MatrixOne 服务直接创建,导出的文件只能位于 MatrixOne 所在的服务器主机上,所以你必须得有登录 MatrixOne 所在的服务器主机的用户名密码,并且你有权限可以从 MatrixOne 检索文件。

  • 你必须有执行 SELECT 的权限。

  • 检查文件需要导出到的目录里不要有重名的文件,否则会被新导出的文件覆盖。

示例

开始前准备

已完成单机部署 MatrixOne

Note

如果你是通过 docker 安装的 MatrixOne,那么导出目录默认位于 docker 镜像中。如果你要需要挂载本地目录,参见下面的代码示例:本地文件系统路径 ${local_data_path}/mo-data 挂载到 MatrixOne Docker 镜像中,并映射到 /mo-data 路径下。更多信息,参见 Docker Mount Volume tutorial

sudo docker run --name <name> --privileged -d -p 6001:6001 -v ${local_data_path}/mo-data:/mo-data:rw matrixorigin/matrixone:0.8.0

步骤

  1. 在 MatrixOne 中新建一个数据表:

    create database aaa;
    use aaa;
    CREATE TABLE `user` (`id` int(11) ,`user_name` varchar(255) ,`sex` varchar(255));
    insert into user(id,user_name,sex) values('1', 'weder', 'man'), ('2', 'tom', 'man'), ('3', 'wederTom', 'man');
    select * from user;
    +------+-----------+------+
    | id   | user_name | sex  |
    +------+-----------+------+
    |    1 | weder     | man  |
    |    2 | tom       | man  |
    |    3 | wederTom  | man  |
    +------+-----------+------+
    
  2. 数据导出

  3. 导出到本地

对于使用源代码或二进制文件的方式安装构建 MatrixOne,将表导出到本地目录,例如 ~/tmp/export_demo/export_datatable.txt,命令示例如下:

```
select * from user into outfile '~/tmp/export_demo/export_datatable.txt'
```

使用 Docker 安装启动 MatrixOne,导出到你挂载的容器目录路径,如下例所示。其中目录 *mo-data* 指的是本地路径 *~/tmp/docker_export_demo/mo-data*。

```
select * from user into outfile 'mo-data/export_datatable.txt';
```

- 导出到 satge

```sql
create stage stage_fs url = 'file:///Users/admin/test';
select * from user into outfile 'stage://stage_fs/user.csv';
```
  1. 查看导出情况:

    • 导出到本地
    (base) admin@192 test % cat export_datatable.txt 
    id,user_name,sex
    1,"weder","man"
    2,"tom","man"
    3,"wederTom","man"
    
    • 导出到 stage
    (base) admin@192 test % cat user.csv 
    id,user_name,sex
    1,"weder","man"
    2,"tom","man"
    3,"wederTom","man"