更新时间:2025-05-29 GMT+08:00
需自行解析文件的导出场景
在从数据库中导出数据文件后,需要自行解析文件的导出场景下,FIXED格式的数据具有固定结构,每行对应一条记录,且每行中各字段值的起始偏移量和长度均固定,这使得文件解析更为便捷。因此,在该场景下,用户可选用FIXED格式。不过,FIXED格式存在一些使用约束,具体详情请参考FIXED详解。
导出命令:
1 2 3 4 |
--data_source可以是一个表名称,也可以是一个select语句。 --server_encoding可以通过show server_encoding获得。 --col1_name(col1_offset, col1_length)表示在数据文件的每一行里,名为col1_name的数据是从偏移量为col1_offset的位置开始,长度为col1_length的部分。 COPY {data_source} FROM '/path/export.fixed' encoding {server_encoding} FIXED FORMATTER(col1_name(col1_offset, col1_length), col2_name(col2_offset, col2_length)); |
导入命令:
1 2 3 4 |
--data_destination只能是一个表名称 --file_encoding 为该文件导出时指定的编码格式 --col1_name(col1_offset, col1_length) 表示在数据文件的每一行里,名为col1_name的数据是从偏移量为col1_offset的位置开始,长度为 col1_length的部分 COPY {data_destination} FROM '/path/export.fixed' ENCODING {file_encoding} FIXED FORMATTER(col1_name(col1_offset, col1_length), col2_name(col2_offset, col2_length)); |

固定列宽格式的适用场景具有特定限制:该格式要求表中各字段数据宽度保持相对均匀,能够为每列选取固定的col_length值,既避免数据截断又不会产生冗余空格。若实际数据存在字段宽度差异较大或动态变化的情况,建议优先选用TEXT或CSV等弹性格式,以确保数据存储的完整性和空间利用率。
示例
- 数据准备。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
gaussdb=# CREATE DATABASE db1 ENCODING='UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE ='en_US.UTF-8' DBCOMPATIBILITY = 'ORA'; CREATE DATABASE gaussdb=# \c db1 Non-SSL connection (SSL connection is recommended when requiring high-security) You are now connected to database "db1" as user "omm". db1=# CREATE TABLE test_copy(id int, name text); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE db1=# INSERT INTO test_copy VALUES(1, 'aaa'); INSERT 0 1 db1=# INSERT INTO test_copy VALUES(2, 'bb"b'); INSERT 0 1 db1=# INSERT INTO test_copy VALUES(3, 'cc c'); INSERT 0 1 db1=# INSERT INTO test_copy VALUES('', e'dd\td'); INSERT 0 1 db1=# INSERT INTO test_copy VALUES('5', e'ee\e'); INSERT 0 1 db1=# SELECT * FROM test_copy; id | name ----+----------- 1 | aaa 2 | bb"b 3 | cc c | dd d 5 | eee (5 rows)
- 数据导出。
1 2
db1=# COPY test_copy TO '/home/xy/test.fixed' encoding 'UTF-8' FIXED FORMATTER(id(0,1), name(1,5)); COPY 5
导出数据文件内容如下所示:
1 2 3 4 5
1 aaa 2 bb"b 3cc c dd d 5 eee
- 数据导入。
db1=# TRUNCATE test_copy; TRUNCATE TABLE db1=# COPY test_copy FROM '/home/xy/test.fixed' ENCODING 'UTF-8' FIXED FORMATTER(id(0,1), name(1,5)); COPY 5
父主题: 典型场景