提交 50c0d6a9 编写于 作者: Y youxiangyang

gbase8s 数据导出

上级 cc537c69
# Gbase8s 数据迁移
[toc]
Note:
- 数据迁移分类
- 按格式分类: 文本格式、二进制格式
- 按数据范围:整库迁移、单表迁移
- 按用途看:自用、第三方使用
- 数据迁移中常需要考虑的问题:
- 行分隔符
- 列分隔符
- 日期时间格式
- 汉字乱码
- 数据迁移方法
- unload / load
- dbload
- dbexport / dbimport
- onunload \ onload
- external table
## 迁移工具对比
| 数据迁移方法 | 运行方式 | 数据格式 | 数据范围 | 数据用途 |
| ----------------- | -------- | ---------- | -------- | ----------- |
| unload/load | SQL | 文本数据 | 单表 | 自用/第三方 |
| dbexport/dbimport | 命令行 | 文本数据 | 库 | 自用 |
| dbload | 命令行 | 文本数据 | 多表 | 自用 |
| onunload/onload | 命令行 | 二进制数据 | 库/表 | 自用 |
| external table | SQL | 文本数据 | 单表 | 自用/第三方 |
### unload / load
**unload 语法**
```
unload to 文件名 [delimiter 分隔符]
select <*|columns> from table\view\synonym;
```
备注:
- 支持单表和夺标关联
- 默认的列分隔符是【|】
- GBase 8s最多支持4个字符做为列分隔符,超过4个时分报错
```sql
unload to "/data/test.unl" delimiter ','
select * from t_test;
-- 设置导出的时间和文字
-- export CLIENT_LOCAL=en_US.UTF8
-- export GL_DATE="%iY%m%d"
unload to "/data/test/unl"
select t1.*,t2.* from tb1 t1,tb2 t2
where t1.id=t2.id;
```
**load语法**
```sql
load from "filename" [delimiter "分隔符"]
insert into tableName|synonym_name|view_name [columns]
-- 分隔符默认是|
-- columns: 导入表的字段列表,默认为数据库表的字段顺序
```
```sql
load from "/data/test.db" delimiter ","
insert into t_test;
-- 多表,不能直接塞进去,需要转换喜爱
```
### dbload
dbload语法:
```sql
dbload [-d db_name] [-c cmd_file] [-l log_file] [-e errors] [-n num_rows]
[-i i_skip] [-s] [-p] [-r | -k] [-X]
-- db_name:指定要加载数据的数据库名称
-- cmd_file:指定包含加载命令的文件路径
-- log_file:指定日志文件,其中记录不能正确加载的数据
-- errors:指定最多可以有多少行数据错误,超过指定的行数后,加载任务失败
-- -- num_rows:指定多少条记录执行一次提交
-- s:指定只做语法检查,不进行实际的数据加载
-- i_skip:指定跳过多少行数据,再进行加载,可用于跳过数据中的标题部分
-- r:加载数据时,不对表加锁
-- k:加载数据时,对表加排它锁
```
command file 语法
```sql
file "filename" delimiter "分隔符" nfields
insert into tablename [(col1,col2...) values (f1,f2,..)];
-- file_name:指定要导入的文件名称,可以为绝对路径和相对路径。
-- delimiter_string:数据文件使用的列分隔符。
-- nfields:数据文件中,每行的列数。
-- table_name:要导入的表的名称。
-- col1,col2...:表的列名称,多个列用逗号分隔。
-- f01,f02...:数据文件中的列数据编号,从01开始编号,多个编号用逗号分隔。
```
```sql
file '/home/gbasedbt/train/data/unload_03.unl' delimiter '.' 4;
insert into t_employee_00;
file '/home/gbasedbt/train/tmp/unload_02.unl' delimiter '|' 5;
insert into t_employee_02(f_employeeid, f_employeename, f_deptid, f_birthdate) values(f01, f02, f03, f05);
```
### dbexport / dbimport
dbexport 语法
```
dbexport <database> [-X] [-c] [-q] [-d] [-ss [-si]] [-ext]
[{ -o <dir> | -t <tapedev> -b <blksz> -s <tapesz> [-f <sql-command-file>] }] [-nw]
[-no-data-tables[=table name{,table name}]]
[-no-data-tables-accessmethods[=access method name{,access method name}]]
database:指定要导出全部表数据的数据库名称
no-data-tables:指定哪些表不导出数据
o:指定导出的数据保存在哪个操作系统的目录中
ss:测试是否对分片表有特殊作用
```
dbimport语法:
```
dbimport <database> [-X] [-c] [-q] [-ext] [-d <dbspace>]
[-l [{ buffered }] [-ansi]] [-ci] [-nv] [-D]
[{ -i <dir> | -t <tapedev> [ -b <blksz> -s <tapesz> ] [-f <script-file>] }]
database:指定要导入全部表数据的数据库名称
d:指定数据库导入到哪个数据库空间中
nv:不对引用约束进行校验
i:指定要导入数据所在的目录
```
### onunload \ onload
onunload
```sql
onunload [-l] [-t <tape_device>] [-b <block size>] [-s <tape size>]
<db_name>[:[<owner>.]<table_name>]
tape_device:保存数据的磁带设备。当使用磁盘时,需创建一个空文件并指定。
db_name:要导出数据的数据库名称。如果不指定表名称,则导出全库数据。
table_name:当需要导出表数据时,指定表名称。
说明:
参数b,参数s和参数l主要用于使用磁带设备,当使用磁盘设备时,可以忽略。
导出数据为二进制格式,只能用于兼容硬件上的兼容数据库版本的数据导入。
该方式使用限制较严格,真实场景中使用较少。
```
onload
```
onload [-l] [-t <tape_device>] [-b <block size>] [-s <tape size>]
[-d <data_dbs>] <db_name>[:[<owner>.]<table_name>]
[{-i <old index name> <new index name>}]
[{-fd old-DBspace-name new-DBspace-name}]
[{-fi index-name old-DBspace-name new-DBspace-name}]
[{-c <old constraint name> <new constraint name>}]
tape_device:保存数据的磁带设备或操作系统文件目录。
data_dbs:指定数据导入时,使用的数据库空间。
db_name:指定导入的数据库名称。
table_name:指定导入的表名称。
```
### external table
```
create external table table_name([column definition | sameas table_template])
using (
datafiles ('disk:/textfile'),
format 'delimited',
delimiter 'delimiter_string'
);
table_name:要创建的外部表名称。
table_template:可以指定一个模板,以该表的列定义创建一个外部表。
datafiles:指定外部表使用的数据文件。
format:
delimiter:
```
# Gbase8s日期格式表
| 格式化符 | 说明 |
| -------- | ----------------------------------------- |
| %a | 星期的短格式表示 |
| %A | 星期的完整格式表示 |
| %b | 月份的短格式表示 |
| %B | 月份的完整格式表示 |
| %C | 世纪的表示,通常是年值除以100后的整数部分 |
| %d | 天(01-31) |
| %D | 相当于格式:%m/%d/%y |
| %e | 天(1-31) |
| %h | 和%b相同 |
| %H | 小时(00-24) |
| %iy | 两位年(00-99) |
| %iY | 四位年(0000-9999) |
| %m | 月(01-12) |
| %M | 分钟(00-59) |
| %n | 换行符 |
| %S | 秒(00-59) |
| %t | 制表符 |
| %w | 星期的数字表示(0-6) |
| %y | 两位年(00-99) |
| %Y | 四位年(0000-9999) |
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册