---
title: 通过 select into outfile 导出的文件名后缀说明-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于通过 select into outfile 导出的文件名后缀说明相关的常见问题和使用技巧，帮助您快速解决通过 select into outfile 导出的文件名后缀说明的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 通过 select into outfile 导出的文件名后缀说明

更新时间：2026-05-28 02:06

适用版本： V4.3.x 内容类型：TechNote  

`select into outfile` 语句是常用的一种数据导出方式，该语句能够对需要导出的字段做出限制，这很好地满足了某些不需要导出主键字段的场景。配合 `load data infile` 语句导入数据，是一种便利的数据导入导出方式。

目前在最新的 OceanBase 数据库 V4.3.5 版本中 `select into outfile` 支持导出 `csv/parquet/orc` 三种不同格式的文件，并且在导出文件时支持自动压缩导出文件。

本文主要介绍导出这三种文件格式的具体用法，以及指定文件压缩格式时，导出的文件名后缀规则。

## 详细说明

**导出的文件名后缀命名规则：**

- 当 single=true 时（缺省的配置），导出的文件名不会自动添加任何的后缀，不管有没有开启压缩或者指定 FILE_EXTENSION。
 - 当 single=false 时：

     - 如果没指定 FILE_EXTENSION 的话，会自动添加上导出的文件格式名如 `.csv/.parquet/.orc`。
     - 如果指定了 FILE_EXTENSION 的话，会自动添加上用户指定的 FILE_EXTENSION（仅导出 CSV 格式时适用）。
     - 如果指定了压缩的话导出的文件名最后还会自动添加上对应压缩格式的后缀（仅导出 CSV 格式时适用）。

#### 备注：

- single=true 为缺省的默认值，表示只能导出到单个文件。
 - 可选项 FILE_EXTENSTION 用于指定用户自定义的文件扩展名，仅多文件导出时使用，且仅 CSV 格式支持指定。不指定该参数时，文件扩展名由格式类型决定。

### 测试版本

OceanBase 数据库 V4.3.5 版本。

### 测试表结构

t1 表为非分区表，表中的行数为 320000 行。

```shell
MySQL [test]> show create table test;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                              |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `name` varchar(2000) DEFAULT NULL,
  `sex` char(10) DEFAULT NULL,
  `birth_date` datetime DEFAULT NULL
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 WITH COLUMN GROUP(each column) |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.007 sec)

MySQL [test]> select count(*) from test;
+----------+
| count(*) |
+----------+
|   320000 |
+----------+
1 row in set (0.007 sec)

```

### Case 1）导出 CSV 文件，不指定 single=false+ 不指定压缩，导出的文件名不会额外添加任何的后缀

```shell
MySQL [test]> SELECT * FROM test
into outfile '/tmp/test'
format = (TYPE = 'CSV',
          FIELD_DELIMITER = ',',
          ENCODING = 'utf8mb4');
Query OK, 320000 rows affected (7.781 sec)

[root@observer ~]# ls -tlr /tmp/test
-rw-r--r-- 1 admin admin 348160000 Jan  8 19:22 /tmp/test
[root@observer ~]# file /tmp/test
/tmp/test: CSV text
[root@observer ~]#

MySQL [test]> SELECT * FROM test
into outfile '/tmp/test'
format = (TYPE = 'CSV',
          FIELD_DELIMITER = ',',
          ENCODING = 'utf8mb4',
          FILE_EXTENSION = '.abc');
Query OK, 320000 rows affected (7.943 sec)

[root@observer ~]# ls -ltr /tmp/test*
-rw-r--r-- 1 admin admin 348160000 Jan  8 19:25 /tmp/test
[root@observer ~]# file /tmp/test*
/tmp/test: CSV text

```

### Case 2）导出 CSV 文件，不指定 single=false+ 指定压缩，导出的文件名不会额外添加任何的后缀

```shell
MySQL [test]> SELECT * FROM test
into outfile '/tmp/test'
format = (TYPE = 'CSV',
          FIELD_DELIMITER = ',',
          ENCODING = 'utf8mb4',
          FILE_EXTENSION = '.abc',
          COMPRESSION = gzip);
Query OK, 320000 rows affected (14.754 sec)

[root@observer ~]# ls -tlr /tmp/test*
-rw-r--r-- 1 admin admin 4476159 Jan  8 19:31 /tmp/test
[root@observer ~]# file /tmp/test
/tmp/test: gzip compressed data, from Unix, original size modulo 2^32 348160000

```

### Case 3）导出 CSV 文件，指定 single=true+ 指定压缩，导出的文件名不会额外添加任何的后缀

```shell
MySQL [test]> SELECT * FROM test
into outfile '/tmp/test'
format = (TYPE = 'CSV',
          FIELD_DELIMITER = ',',
          ENCODING = 'utf8mb4',
          FILE_EXTENSION = '.abc',
          COMPRESSION = gzip) single=true;
Query OK, 320000 rows affected (14.766 sec)

[root@observer ~]# ls -ltr /tmp/test*
-rw-r--r-- 1 admin admin 4476159 Jan  8 19:33 /tmp/test
[root@observer ~]# file /tmp/test
/tmp/test: gzip compressed data, from Unix, original size modulo 2^32 348160000

```

### Case 4）导出 CSV 文件，指定 single=false+ 不指定压缩，导出的文件名会自动添加 .csv 后缀

```shell
MySQL [test]> SELECT * FROM test
into outfile '/tmp/test'
format = (TYPE = 'CSV',
          FIELD_DELIMITER = ',',
          ENCODING = 'utf8mb4') single=false;
Query OK, 320000 rows affected (8.492 sec)

[root@observer ~]# ls -ltr /tmp/test*
-rw-r--r-- 1 admin admin 268434624 Jan  8 19:36 /tmp/test_0.csv
-rw-r--r-- 1 admin admin  79725376 Jan  8 19:36 /tmp/test_1.csv
[root@observer ~]# file /tmp/test_1.csv
/tmp/test_1.csv: CSV text

```

### Case 5）导出 CSV 文件，指定 single=false+ 指定压缩，导出的文件名会自动添加 .csv 后缀，然后再添加上对应的压缩格式后缀

```shell
MySQL [test]> SELECT * FROM test
into outfile '/tmp/test'
format = (TYPE = 'CSV',
          FIELD_DELIMITER = ',',
          ENCODING = 'utf8mb4',
          COMPRESSION = gzip) single=false;
Query OK, 320000 rows affected (15.574 sec)

[root@observer ~]# ls -tlr /tmp/test*
-rw-r--r-- 1 admin admin 4476159 Jan  8 19:39 /tmp/test_0.csv.gz
[root@observer ~]# file /tmp/test_0.csv.gz
/tmp/test_0.csv.gz: gzip compressed data, from Unix, original size modulo 2^32 348160000

```

### Case 6）导出 CSV 文件，指定 single=false+ 指定 FILE_EXTENSION+ 指定压缩，导出的文件名会自动添加 FILE_EXTENSION 后缀，然后再添加上对应的压缩格式后缀

```shell
MySQL [test]> SELECT * FROM test
into outfile '/tmp/test'
format = (TYPE = 'CSV',
          FIELD_DELIMITER = ',',
          ENCODING = 'utf8mb4',
          FILE_EXTENSION = '.abc',
          COMPRESSION = zstd) single=false;
Query OK, 320000 rows affected (8.293 sec)

[root@observer ~]# ls -ltr /tmp/test*
-rw-r--r-- 1 admin admin 3075734 Jan  8 19:42 /tmp/test_0.abc.zst
[root@observer ~]# file /tmp/test*
/tmp/test_0.abc.zst: Zstandard compressed data (v0.8+), Dictionary ID: None

```

### Case 7）导出 Apache Parquet 文件，不指定 single=false+ 指定压缩，导出的文件名不会额外添加任何的后缀

```shell
MySQL [test]> SELECT * FROM test
INTO outfile '/tmp/test'
FORMAT(
  TYPE = 'PARQUET',
  COMPRESSION = 'SNAPPY'
  ROW_GROUP_SIZE = '64MB'
);
Query OK, 320000 rows affected (2.719 sec)

[root@observer ~]# ls -ltr /tmp/test*
-rw-r--r-- 1 admin admin 22547538 Jan  8 19:47 /tmp/test
[root@observer ~]# file /tmp/test*
/tmp/test: Apache Parquet

```

### Case 8）导出 Apache Parquet 文件，指定 single=false+ 指定压缩，导出的文件名会自动添加 .parquet 后缀

```shell
MySQL [test]> SELECT * FROM test
INTO outfile '/tmp/test'
FORMAT(
  TYPE = 'PARQUET',
  COMPRESSION = 'GZIP'
  ROW_GROUP_SIZE = '64MB'
) single=false;
Query OK, 320000 rows affected (12.789 sec)

[root@observer ~]# ls -ltr /tmp/test*
-rw-r--r-- 1 admin admin 4072833 Jan  8 19:49 /tmp/test_0.parquet
-rw-r--r-- 1 admin admin 1198440 Jan  8 19:49 /tmp/test_1.parquet
[root@observer ~]# file /tmp/test_1.parquet
/tmp/test_1.parquet: Apache Parquet

```

### Case 9）导出 Apache ORC 文件，不指定 single=false+ 指定压缩，导出的文件名不会额外添加任何的后缀

```shell
MySQL [test]> SELECT * FROM test
INTO outfile '/tmp/test'
FORMAT(
  TYPE = 'ORC'
  COMPRESSION = 'SNAPPY'
  COMPRESSION_BLOCK_SIZE = '64KB'
);
Query OK, 320000 rows affected (2.761 sec)

[root@observer ~]# ls -ltr /tmp/test*
-rw-r--r-- 1 admin admin 21783073 Jan  8 19:51 /tmp/test
[root@observer ~]# file /tmp/test
/tmp/test: Apache ORC

```

### Case 10）导出 Apache ORC 文件，指定 single=false+ 指定压缩，导出的文件名会自动添加上 .orc 后缀

```shell
MySQL [test]> SELECT * FROM test
INTO outfile '/tmp/test'
FORMAT(
  TYPE = 'ORC'
  COMPRESSION = 'ZLIB'
  COMPRESSION_BLOCK_SIZE = '64KB'
) single=false;
Query OK, 320000 rows affected (5.769 sec)

[root@observer ~]# ls -ltr /tmp/test*
-rw-r--r-- 1 admin admin 6518406 Jan  8 19:54 /tmp/test_0.orc
[root@observer ~]# file /tmp/test_0.orc
/tmp/test_0.orc: Apache ORC

```

## 影响租户

影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。

## 适用版本

OceanBase 数据库 V4.3.5 及之后版本。

Previous

[Mybatis 框架改写 insert 语句为 returning into 语句导致报错 -4016 的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001964977)

Next

[merge into xxxx when xxxx insert 报错 ORA-00904: invalid identifier 'A.A' in 'field list'](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002393581) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
