#CSV文件导出
exp工具支持通过两种交互方式导出CSV数据,分别为命令行方式和配置文件方式。
# 使用命令行导出数据
# 命令格式
exp --csv {Common Options} {Export Options} {CSV Options}
# 命令选项-Common Options
具体选项如下表所示,[]表示可选项。
选项 | 含义 |
---|---|
-f, --format | 数据文件格式,csv |
-u, --user | 数据库用户名, 系统用户或普通用户,普通用户需要具备访问系统表权限 |
-p, --password | 数据库用户密码 |
[-L, --logfile] | 日志文件路径,缺省时直接将日志打印在前端,支持相对路径(不可为../相对路径) |
[-F, --file] | CSV文件导出路径,缺省时导出至当前路径,支持相对路径(不可为../相对路径) |
[--lob] | 设置LOB数据的导出方式,可选值lls/csv,默认值lls: lls表示将LOB数据另外导出至一个单独的文件,当前CSV文件中记录该单独文件名称,文件名称格式见LOAD DATA中lls_column_clause描述 csv表示将LOB导出到当前CSV文件 |
[--inline-blob-format] | 当--lob为CSV时,设置BLOB数据的导出方式,可选值binary/string,默认值binary: binary表示blob以二进制格式存储 string表示blob以字符串格式存储 |
[--loglevel] | 日志等级,off/error/warn/info/debug/trace,默认值info |
[--server-host] | 数据库IP及监听端口,默认值"127.0.0.1:1688" |
[--use-threads] | 工作线程数,默认值1 |
[-q, --query] | 设置查询语句导出对应结果集 |
[-qf, --query-file] | 指定SQL文件,将文件中的查询语句导出对应结果集 |
[-qo, --query-out-file] | 设置查询语句导出对应结果集所在的文件名,与-F参数指定路径配合使用,不配置时,导出文件名为outfile |
[--bit-format] | 设置BIT数据的导出方式,可选值binary/decimal,默认值binary: binary表示bit列数据以二进制字符串形式导出存储 decimal表示bit列数据以十进制字符串形式导出存储 |
[-ch, --character-set] | 设置导出文件的字符集,取值范围为[ASCII,GBK,UTF8,ISO88591,GB18030],默认与客户端字符集相同 |
Note:
- 导出失败时,会删除指定文件名的导出文件,建议每次导出时指定不同的导出文件名,避免误删已成功导出的同名文件。
- 命令行参数应小于16KB。
# 参数说明
# query-file参数
Note:
- --query或--query-file参数与--table、--owner参数互斥,使用时只能选择导出表或导出相应结果集中的一种模式。
- --query和--query-file参数可指定相应表名的schema,不指定时,默认为-u登录用户的schema。
- --query和--query-file参数只支持单条SQL参数的导出,--query不支持换行、注释,--query-file支持在SQL文件中换行、注释。
- --query和--query-file同时指定时,以--query为准。
- --query或--query-file参数生效时,--use-threads默认置为1,无法多线程导出。
# character-set参数
Note:
- -ch参数影响导出CSV的字符集以及LOB文件的字符集。
- 导出过程中命令的返回信息以及导出后的日志文件的字符集由${YASDB_HOME}/client/yasc_env.ini中配置的客户端字符集参数CHARACTER_SET决定。
- 导出CSV时,-qo与-T参数指定的导出文件名称的字符集与shell输入字符集保持一致。
- 导出SQL结果集的CSV时,指定的-qf参数的字符集由${YASDB_HOME}/client/yasc_env.ini中配置的客户端字符集参数CHARACTER_SET决定。
- 使用配置文件导出CSV时,解析配置文件exp.ini的字符集由${YASDB_HOME}/client/yasc_env.ini中配置的客户端字符集参数CHARACTER_SET决定。
- 导出日期格式数据类型的CSV时,解析--date-format参数的字符集由${YASDB_HOME}/client/yasc_env.ini中配置的客户端字符集参数CHARACTER_SET决定。
# 命令选项-Export Options
具体选项如下表所示。
选项 | 含义 |
---|---|
-T, --tables | 导出的表名称,多张表以逗号隔开 |
-O, --owner | 表的所属用户,仅指定一个 |
# 命令选项-CSV Options
具体选项如下表所示,[]表示可选项。
选项 | 含义 |
---|---|
[--fields-enclosed-by] | 指定单个字符作为文件中各字段的包围符,该字符取值范围是ASCII码1-126对应字符,换行符、空格除外。默认值" ,支持用字符、十六进制表示注意: * number、bool、rowId、bit类型导出后不带包围符 * 如果字符类型(char、nchar、varchar、nvarchar)的字段中出现了指定的包围符,会使用两个包围符对数据转义后导出 |
[--fields-terminated-by] | 使用单个字符作为字段的分隔符,该字符取值范围是ASCII码1-126对应字符,字母、数字、换行符除外。默认值为| ,支持用字符、十六进制表示 |
[--lines-terminated-by] | 使用单个字符char作为行分隔符,该字符可以是ASCII任意一个字符,默认值\n |
[--date-format] | 支持修改日期格式,与数据库支持的所有日期格式一致,默认值为yyyy-mm-dd |
[--time-format] | 支持修改时间格式,与数据库支持的所有时间格式一致,默认值为hh24:mi:ss.ff |
[--timestamp-format] | 支持修改时间戳格式,与数据库支持的所有时间戳格式一致,默认值为yyyy-mm-dd hh24:mi:ss.ff |
# 参数说明
# 包围符、分隔符 参数
Note:
- 包围符、行分隔符、分隔符彼此不能相同。
- 命令行指定分隔符或包围符时,字符形式应使用单引号包围,如果不进行包围,则需要注意对特殊字符进行转义,十六进制形式无需使用单引号包围。
- 指定字符形式加单引号包围,例如--fields-terminated-by
'"'
、--fields-terminated-by'@'
- 指定字符形式不加引号包围,需要转义的字符:
'
可转义为\'\'
,也可转义为\'
,`
、"
、#
、&
、(
、)
、*
、;
、<
、>
、|
、~
、\
均使用\
进行转义,例如--fields-enclosed-by\"
、--fields-enclosed-by\&
- 可以指定十六进制形式,且无需使用单引号包围,例如--fields-terminated-by
0x01
- 命令行指定单引号字符形式作为包围符或分隔符时可转义为
''
,例如--fields-terminated-by"''"
、--fields-terminated-by"'"
、--fields-enclosed-by\'\'
、--fields-enclosed-by\'
- 命令行指定空格,水平制表符
\t
,换页符\r
的字符形式作为包围符或分隔符时,使用双引号+单引号包围,例如--fields-terminated-by"' '"
、--fields-terminated-by"'$(echo -e "\t")'"
# 使用配置文件导出数据
# 配置模板
可按如下配置模板进行导出选项配置:
owner = sales
format = csv
user = sys
password = sys
server-host = 127.0.0.1:1688
tables = area,branches
logfile = /home/yasdb
file = /home/yasdb
loglevel = info
fields-enclosed-by = "
fields-terminated-by = ,
Note:
- 配置文件和命令行配置相同的参数,以命令行为准。
- 同一参数重复配置,以最后一次配置为准。
- 上述配置文件中的各项值请替换为实际值。
- 上述路径可配置为相对路径,但不能为../相对路径。
- 配置文件指定空格、水平制表符
\t
、换页符\r
的字符形式作为分隔符或包围符时,使用单引号包围,例如fields-terminated-by =' '
,指定十六进制或单引号作为分隔符或包围符时,不需要包围,例如fields-terminated-by =''
、fields-terminated-by =0x02
。
# 操作示例
以对YashanDB的sales用户下的样例表area,branches执行导出为例。
新建导出任务配置文件expconfig.ini:
owner = sales format = csv user = sys password = sys server-host = 127.0.0.1:1688 tables = area,branches logfile = /home/yasdb file = /home/yasdb loglevel = info fields-enclosed-by = " fields-terminated-by = ,
执行导出命令exp --csv --config-file expconfig.ini:
$ exp --csv --config-file expconfig.ini YashanDB Export Release 22.2.0.0 x86_64 8f54fba [EXPORT] export sales.area succeeded [EXPORT] export sales.branches succeeded
导出路径/home/yasdb下生成按表名命名的CSV数据文件:
$ ll total 1792 -rw-r-----. 1 yasdb yasdb 121 Nov 6 00:06 area -rw-r-----. 1 yasdb yasdb 332 Nov 6 00:06 branches $ vi area "01","华东","Shanghai" "02","华西","Chengdu "03","华南","Guangzhou" "04","华北","Beijing" "05","华中","Wuhan"