南大通用大数据新型列存储数据库GBase 8a gbloader参考手册_图文_第1页
南大通用大数据新型列存储数据库GBase 8a gbloader参考手册_图文_第2页
南大通用大数据新型列存储数据库GBase 8a gbloader参考手册_图文_第3页
南大通用大数据新型列存储数据库GBase 8a gbloader参考手册_图文_第4页
南大通用大数据新型列存储数据库GBase 8a gbloader参考手册_图文_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 GBase 8a gbloader参考手册,南大通用数据技术有限公司GBase版权所有©2004-2012,保留所有权利。版权声明本文档所涉及的软件著作权、版权和知识产权已依法进行了相关注册、登记,由南大通用数据技术有限公司合法拥有,受中华人民共和国著作权法、计算机软件保护条例、知识产权保护条例和相关国际版权条约、法律、法规以及其它知识产权法律和条约的保护。未经授权许可,不得非法使用。免责声明本文档包含的南大通用公司的版权信息由南大通用公司合法拥有,受法律的保护,南大通用公司对本文档可能涉及到的非南大通用公司的信息不承担任何责任。在法律允许的范围内,您可以查阅,并仅能够在中华人民共

2、和国著作权法规定的合法范围内复制和打印本文档。任何单位和个人未经南大通用公司书面授权许可,不得使用、修改、再发布本文档的任何部分和内容,否则将视为侵权,南大通用公司具有依法追究其责任的权利。本文档中包含的信息如有更新,恕不另行通知。您对本文档的任何问题,可直接向南大通用数据技术有限公司告知或查询。未经本公司明确授予的任何权利均予保留。通讯方式南大通用数据技术有限公司天津华苑产业区海泰发展六道6号海泰绿色产业基地J座(300384电话:400-817-9696 邮箱:info商标声明 标,注册商标专用权由南大通用公司合法拥有,受法律保护。未经南大通用公司书面许可,任何单位及个人不得以任何方式或理

3、由对该商标的任何部分进行使用、复制、修改、传播、抄录或与其它产品捆绑使用销售。凡侵犯南大通用公司商标权的,南大通用公司将依法追究其法律责任。GBase 8a gbloader 参考手册 南大通用数据技术有限公司 I 目 录联系我们 (1前言 (2相关手册 (2手册约定 (2正文约定 (2代码示例约定 (2操作系统约定 (31 概述 (41.1 简介 (41.2 安装 (41.3 基本操作 (41.4 拓扑图 (52 数据源及数据准备 (62.1 orato8a (62.1.1 参数说明 (82.1.1.1 batch (82.1.1.2 field (82.1.1.3 file (82.1.1

4、.4 format (92.1.1.5 log (92.1.1.6 query (92.1.1.7 shm_mode (102.1.1.8 user (102.1.2 应用实例 (112.1.2.1 导出文本格式数据 (112.1.2.2 导出二进制格式数据 (132.1.2.3 导出到共享内存 (142.2 gbunloader (152.2.1 参数说明 (152.2.1.1 batch (152.2.1.2 database (162.2.1.3 field (162.2.1.4 file (162.2.1.5 format (17GBase 8a gbloader 参考手册 II南大通

5、用数据技术有限公司 2.2.1.6 host . 17 2.2.1.7 log . 17 2.2.1.8 password . 18 2.2.1.9 port . 18 2.2.1.10 query . 18 2.2.1.11 shm_mode . 19 2.2.1.12 socket . 19 2.2.1.13 user . 19 2.2.2 应用实例 . 20 3 gbloader 配置介绍 (213.1 gbloader 特性 (213.2 gbloader 参数说明 (213.2.1 必选配置 (213.2.2 可选配置 (223.2.3 charset (223.2.4 commit

6、_lines (233.2.5 db_name (233.2.6 delimiter (233.2.7 error_data_file (243.2.8 escape_character (243.2.9 format (243.2.10 infile_mode (243.2.11 insert (253.2.12 load_data_infile (253.2.13 log (253.2.14 parallel (263.2.15 partition (263.2.16 password (263.2.17 port (273.2.18 scn_number (273.2.19 socket

7、 (273.2.20 string_qualifier (273.2.21 table_fields (283.2.22 table_name (283.2.23 trim (283.2.24 user (283.3 用例: (29GBase 8a gbloader 参考手册 南大通用数据技术有限公司 III 3.3.1 一个简单的数据加载示例(文本 . 29 3.3.2 一个简单的数据加载示例(二进制 . 30 3.3.3 一个简单的数据加载示例(共享内存 . 31 3.3.4 如何导入多个数据文件 . 34 3.3.5 如何处理文本字段中含有分隔符的数据加载 . 35 3.3.6 如何处理

8、特殊字符 . 40 3.3.7 如何加载全部数据到一个分区中 . 44 3.3.8 如何加载全部数据到多个分区中 . 47 3.3.9 如果数据文件和表定义不一致怎么办 . 50 3.3.10 如何处理不同的字符集 . 55 3.3.11 如何利用多核特性加载数据 . 57 3.3.12 如何保留数据中尾部的空格 . 59 3.3.13 如何加载其它Linux 服务器上的数据 . 62 4异常处理 . 66 4.1 正常结束. 66 4.2 异常情况. 66 5附录 . 68 5.1 Oracle 中的创建表脚本 . 68 5.2 GBase 8a 中的创建表脚本 . 68 6索引 (70GB

9、ase 8a gbloader 参考手册 南大通用数据技术有限公司 - 1 -联系我们南大通用欢迎您对此手册提出自己的宝贵意见和建议,您的意见和建议将成为完善此手册的重要部分。您发现手册中的错误了吗? 您认为手册中的哪些部分描述的还不太清楚? 您认为手册中还需要在哪些方面提供更多的内容? 手册中的示例正确吗?您还是否需要更多的示例? 您喜欢手册中的哪些部分?如果您发现了手册中的错误,或者您有更好的意见和建议,请您标明需要改正或改进部分的页码、章节号、标题,及手册中的内容(如果可能。您可以通过下面的方式将您的意见和建议发送给我们。电子邮件:info电话:400-817-9696传真:022-*通

10、信地址:天津滨海高新区海泰绿色产业基地J 座如果您希望收到我们的回复,请您告诉我们您的姓名,电话,或者电子邮箱地址。如果您对我们的软件有任何问题,请您联系我们的技术支持人员。GBase 8a gbloader 参考手册 - 2 - 南大通用数据技术有限公司前言本手册将指导您如对GBase8a 数据库进行数据的导入/导出。相关手册GBase 8a 安装手册GBase 8a SQL 参考手册GBase 8a 管理员手册手册约定正文约定表 6-1 代码示例约定GBase 8a gbloader 参考手册 南大通用数据技术有限公司 - 3 -表 6-2操作系统约定假定用户使用的操作系统为Red Hat

11、 Linux ,用户的Shell 为Bash Shell 。GBase 8a gbloader 参考手册 - 4 - 南大通用数据技术有限公司1 概述1.1 简介为了提高GBase 8a 的数据加载速度,GBase 8a 数据库提供了专用的数据加载工具- gbloader 。该工具是一个命令行工具,用于从满足一定格式的数据文件中快速加载数据到GBase 8a 数据库。gbloader 工具是一个线程并行的数据加载工具,可以充分利用多核CPU 的处理能力进行数据加载,因此数据加载效率很高。在运用PC Server 的硬件环境下,可以获得200GB/h 的加载性能。使用高端服务器和专用阵列设备可以

12、大幅提高加载能力,在高端配置的条件下,多表并行数据加载速度最大可以达到500GB/h 。1.2 安装gbloader 随GBase 8a 一起安装,该文件被安装在$GBASE_HOME/bin 下。1.3 基本操作gbloader 的命令格式是:gbloader OPTIONS <控制文件>其中,OPTIONS 包括以下选项:-user=user_name ,数据库用户名-password=password ,数据库用户的登录密码示例如下:gbloader -user=root -password=linna lineorder.ctl1.4拓扑图gbloader从控制文件中获得数

13、据加载的必要信息和数据文件的相关信息,将数据加载到GBase 8a中。对于加载过程中加载失败的数据,记录在失败数据指定的文件中。对于加载过程中的相关显示信息,记录在日志文件中。 2数据源及数据准备gbloader支持多种数据源。gbloader的数据源可以是具体一定格式的文本文件,也可以是GBase公司专用的二进制数据文件,还可以是由GBase公司专用工具生成的共享内存文件。常用的为gbloader提供数据文件的工具有orato8a和gbunloader。orato8a为从Oracle数据库向GBase 8a数据库迁移数据的工具,gbunloader为从GBase 8a中导出数据的工具。由gb

14、unloader工具导出的数据可以方便的导入另外一个GBase 8a数据库。2.1o rato8aorato8a是一个可以快速、高效的从Oracle数据库中抽取数据的专用工具。orato8a通过Oracle的 OCI接口访问数据,运行orato8a的计算机需要安装Oracle数据库或客户端。orato8a随GBase 8a一起安装,该文件被安装在$GBASE_HOME/bin下。为了在非Oracle安装用户可以访问Oracle,通常只要将该用户加入到Oracle安装用户所在的组中,设置Oracle的安装目录允许同组的用户可以访问,并在该用户中正确设置ORACLE_BASE,ORACLE_HOM

15、E,ORACLE_SID,及将$ORACLE_HOME/bin加入到PATH变量,将$ORACLE_HOME/lib加入LD_LIBRARY_PATH变量即可。如我们希望在linna用户下可以正常运行orato8a,则登录到root用户下:rootgbase555 # groups linnalinna : linnarootgbase555 # groups oracleoracle : oinstall dbarootgbase555 # usermod -G oinstall,dba linnarootgbase555 # groups linnalinna : linna oinsta

16、ll dba在linna用户的根目录下的.bash_profile中加入下面的内容后,用source 命令执行.bash_profile中的内容。ORACLE_BASE=/home/oracle/oracleexport ORACLE_BASEORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1export ORACLE_HOMEORACLE_SID=mayaexport ORACLE_SIDPATH=$ORACLE_HOME/bin:$PATHexport PATHLD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PAT

17、Hexport LD_LIBRARY_PATHlinnagbase555 $ source .bash_profile执行sqlplus命令,登录sqlplus。linnagbase555 $ sqlplus /nologSQL*Plus: Release 10.2.0.4.0 - Production on Thu Aug 4 18:38:41 2011 Copyright (c 1982, 2007, Oracle. All Rights Reserved.SQL>出现提示符,成功登录Oracle的sqlplus。如果采用编辑/etc/group的方法添加用户的组,可以在保存后,使用

18、pwconv 将更改应用到shadow中,使修改即刻生效。2.1.1参数说明2.1.1.1batch语法batch=number_value功能该参数指明将多少条记录单独保存为一个单独的数据文件。该参数需要与file参数配合使用。当指定batch参数时,file参数指定的文件名中应包含%b。2.1.1.2field语法field=char_value功能当导出的数据为文本格式时,指定分隔各字段的分隔符。只能指定一个字符,或者为一个转义符后接一个字符。不能指定n和r。2.1.1.3file语法file=string_value功能该参数指定数据文件名。该参数可以为一个包含绝对路径的文件名,也可以

19、为一个包含相对路径的文件名。当该参数为一个不包含路径的文件名时,该文件被保存在当前路径中。当参数文件中指定batch参数时,file参数中应包含%b字符。%b为占位符,用于产生多个文件时,对产生的多个文件进行顺序编号。2.1.1.4format语法format=0|2功能控制导出数据的格式。当设置为0时,导出数据为文本格式;当设置为2时,导出数据为二进制格式。该参数的默认值为2。2.1.1.5log语法log=string_value功能记录抽取时的日志信息。2.1.1.6query语法query=string_value功能配置抽取数据所使用的SQL语句。由于查询语句常有空格,该参数在指定时

20、,需要用双引号限定。查询语句为一个合法的Oracle查询语句,且只返回一个结果集。2.1.1.7shm_mode语法shm_mode=0|1功能控制导出文件的方式。当参数设置为0时,导出方式为文件方式;当参数设置为1时,导出方式为共享内存方式。该参数的默认值为0。当采用共享内存方式时,orato8a可以和gbloader通过共享一个128M的内存来传输数据。gbloader在加载数据时,需要在控制文件中设置infile_mode 为1。使用该方式加载数据时, orato8a必须与 GBase 8a Server运行在同一台服务器上。先启动orato8a抽取工具,然后再启动gbloader导入工

21、具,就可以实现gbloader共享内存方式的数据导入。2.1.1.8user语法user=string_value功能配置登录Oracle数据库的用户名、密码和数据库本地服务名,该参数的格式为用户名称/密码数据库本地服务名。2.1.2应用实例为了演示,在Oracle的ssbm用户中,创建表lineorder,结构如下:SQL> desc lineorder;Name Null? Type- - - LO_ORDERKEY NUMBER(18LO_LINENUMBER NUMBER(18LO_CUSTKEY NUMBER(18LO_PARTKEY NUMBER(18LO_SUPPKEY N

22、UMBER(18LO_ORDERDATE NUMBER(18LO_ORDERPRIORITY VARCHAR2(15LO_SHIPPRIORITY VARCHAR2(1LO_QUANTITY NUMBER(18LO_EXTENDEDPRICE NUMBER(18LO_ORDTOTALPRICE NUMBER(18LO_DISCOUNT NUMBER(18LO_REVENUE NUMBER(18LO_SUPPLYCOST NUMBER(18LO_TAX NUMBER(18LO_COMMITDATE NUMBER(18LO_SHIPMODE VARCHAR2(10 在这个表中,已经加载一个scal

23、e的测试数据。 2.1.2.1导出文本格式数据执行orato8a,将format参数设置为0,即可将数据导出为文本格式。linnagbase555 $ orato8a -user=ssbm/ssbmmaya -query="select * from lineorder" -file=/home/linna/lineorder.txt -field=""-format=0you machine is Little endian!- unload text file mode - field="" -LogonDB Sucess !Pr

24、epare OK : ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' Prepare OK : ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DDHH24:MI:SSXFF'Prepare OK : ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH24:MI:SSXFF TZH:TZM'Prepare OK : select * from lineorderPrepa

25、reSQL Sucess !executeStmt Sucess !0 rows exported at 2011-09-09 10:40:046001215 rows exported at 2011-09-09 10:41:13output file /home/linna/lineorder.txt closedexport: 6001215 rows.export: 17 columns.export time: 1 min 9.92 sec.在导出过程中,我们可以看到unload text file mode,说明导出为文本模式。导出成功后,我们用head命令查看导出的文件。 我们可

26、以看到,导出的文件为文本格式,各个字段之间用分号进行分隔。2.1.2.2导出二进制格式数据执行orato8a,将format参数设置为2,即可将数据导出为二进制格式。linnagbase555 $ orato8a -user=ssbm/ssbmmaya -query="select * from lineorder" -file=/home/linna/lineorder.bin -format=2you machine is Little endian!- unload binary file mode -LogonDB Sucess !Prepare OK : ALTE

27、R SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' Prepare OK : ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DDHH24:MI:SSXFF'Prepare OK : ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH24:MI:SSXFF TZH:TZM'Prepare OK : select * from lineorderPrepareSQL Sucess !e

28、xecuteStmt Sucess !0 rows exported at 2011-09-09 10:46:496001215 rows exported at 2011-09-09 10:48:00output file /home/linna/lineorder.bin closedexport: 6001215 rows.export: 17 columns.export time: 1 min 11.16 sec.在导出过程中,我们可以看到unload binary file mode,说明导出为二进制模式。导出成功后,我们用head命令查看 注意这里,我们在用head查看时,没有使

29、用-n参数,而是使用-c参数。如果使用-n参数,head将按行来取数据,在二进制格式中,这可能取出全部文件内容。我们使用-c参数,只取出文件的前100字节,即可看到取出的内容包含了一些特殊字符,这些字符不是我们的数据内容。2.1.2.3导出到共享内存orato8a可以将数据以文本或二进制的格式导出为磁盘文件,也可以将数据导出到共享内存中。我们在导出时指定shm_mode参数为1,即可将数据导出到到共享内存。 在执行到共享内存的数据导出时,orato8a会将数据保存在共享内存中。orato8a为导出的数据分配128M的共享内存缓冲数据。当分配的128M共享内存写满时,orato8a将暂停数据写入

30、,直到共享内存中的数据被gbloader取出并释放。 2.2g bunloadergbunloader是GBase 8a的一个数据迁移工具。该工具随GBase 8a的安装被默认安装在$GBASE_HOME/bin目录中。使用gbunloader导出GBase 8a数据库中的数据,是一件非常简单的事情。如果要导出当前服务器中的GBase 8a数据库的数据时,只需指定连接GBase 8a 服务的用户名,密码,需要导出的数据库名称,查询数据的SQL语句及保存导出数据的文件,即可将查询结果导出。gbunloader的命令使用格式为:gbunloader 参数列表,各个参数通过-parameternam

31、e=value的格式指定,多个参数之间使用空格分隔。2.2.1参数说明2.2.1.1batch语法batch=number_value功能指定按多少行记录保存为一个单独的文件。当该参数为0时,将全部导出数据保存为一个文件。2.2.1.2database语法database=string_value功能导出的数据所在的数据库名称。2.2.1.3field语法field=char_value功能当导出数据的文件为文本格式时,定义用于分隔每行的各文本域所使用的字符。2.2.1.4file语法file=string_value功能保存导出数据的文件名称。当batch参数大于0时,文件名需要包含%b两个

32、字符,即datafilename%b.dat的格式。在实际导出时,%b将被实际的导出文件序号替换。文件名可以指定为绝对路径和相对路径格式。当参数指定为不含路径的文件名时,文件保存在当前目录中。2.2.1.5format语法format=0|2功能保存导出数据的文件格式。当format为0时,导出文件为文本格式;当format为2时,导出文件为二进制格式。该参数默认值为2。2.2.1.6host语法host=string_value功能连接GBase 8a服务时,使用的IP地址。2.2.1.7log语法log=string_value功能保存导出数据时,记录日志信息的文件。文件名可以指定为绝对路

33、径和相对路径格式。当参数指定为不含路径的文件名时,文件保存在当前目录中。2.2.1.8password语法password=string_value功能连接GBase 8a服务的密码。2.2.1.9port语法port=number_value功能连接GBase 8a服务时,使用的端口号。2.2.1.10query语法query=string_value功能导出数据时使用的SQL查询语句。该值应为一个合法的SQL查询,且只返回一个结果集。2.2.1.11shm_mode语法shm_mode=0|1功能该参数用来控制导出文件的方式。默认值为0,代表落地为文件的方式。当设置为1,表示采用共享内存的

34、方式。当采用共享内存方式导入数据时,该参数设置为1,同时gbloader控制文件中INFILE_MODE选项应该设置为1。使用共享内存方式加载数据时,必须先启动gbunloader抽取工具,然后再启动gbloader导入工具,就可以实现将数据导入GBASE 8a 数据库中。2.2.1.12socket语法socket=string_value功能导出数据时使用的socket文件。2.2.1.13user语法user=string_value功能连接GBase 8a服务的用户名。2.2.2应用实例用gbunloader导出数据,只需要在命令行中,依次输入各个参数的值即可。linnagbase55

35、5 $ gbunloader -database=ssbm -user=root-password=linna -query="select * from lineorder" -port=5258-format=0 -file=lineorder.tblConnected to localhostConnected to ssbm database.Total rows: 6001215Preparing data for exporting .Prepare done.Exporting data .- unload text file mode - field=&qu

36、ot;" - fileName="lineorder.tbl" -0 rows exported at 2011-09-09 16:12:346001215 rows exported at 2011-09-09 16:15:42output file lineorder.tbl closed.export: 6001215 rowsexport time: 3 min 8.03 secUnloader complete!3gbloader配置介绍3.1g bloader特性只支持本地加载,不支持远程加载。一个gbloader会话只支持加载一个表,但可以加载多个数

37、据文件。gbloader不支持字符集转换。数据文件的字符集必须和表定义的字符集一致。3.2g bloader参数说明参数优先级:命令行参数优先控制文件参数SOCKET优先PORTloader参数与cnf文件参数无关3.2.1必选配置 3.2.2可选配置 3.2.3charset语法charset= gbk_chinese_ci| utf8_general_ci功能该参数用于指定数据文件的字符集。gbloader不支持字符集的转换。数据文件的字符集应和表定义的字符集一致。当数据文件的字符集和表定义的字符集不一致时,可能出现乱码。3.2.4commit_lines语法commit_lines=nu

38、mber_value功能在使用insert模式进行导入时,可以使用这个参数指定多少行提交一次数据。3.2.5db_name语法db_name=string_value功能数据库名称。数据将被加载到该参数指定的数据库的表中。3.2.6delimiter语法delimiter=char_value功能当数据文件为文本格式时,指定数据文件中的字段分隔符。gbloader用该参数来判断一行数据中每个字段的开始和结束位置。3.2.7error_data_file语法error_data_file=string_value功能指定一个文件,用于记录在加载过程中,加载失败的数据记录。3.2.8escape_

39、character语法escape_character=char_value功能定义一个字符,来对特殊字符进行转义。3.2.9format语法format=0|2功能数据文件格式。0表示文本文件,2表示二进制文件。该参数默认值为0。3.2.10infile_mode语法infile_mode=0|1功能数据源模式。0表示普通文件,1表示共享内存。默认值为0。3.2.11insert语法insert功能为了解决将全部数据一次性的加载到分区表的不同分区中,gbloader提供INSERT模式。在INSERT模式,gbloader通过数据库引擎加载数据,自动对数据范围进行识别并保存到相应的分区中。使

40、用INSERT模式会降低数据加载速度。3.2.12load_data_infile语法load_data_infile=string_value功能指定需要导入的文件。当一次导入多个文件时,各文件用逗号分隔。3.2.13log语法log=string_value功能指定日志文件。3.2.14parallel语法parallel=number_value功能指定数据加载的并行度。通常该参数的取值范围为1到CPU的总核数。如不指定该参数,该参数的取值为主机的CPU总核心数。3.2.15partition语法partition=string_value功能指定表分区名称。3.2.16password

41、语法password=string_value功能用户密码。3.2.17port功能port=number_value功能数据库服务器监听端口。此参数与socket参数同时使用时会被gbloader忽略。3.2.18scn_number该参数在单机版的gbloader中不可用。3.2.19socket语法socket=string_value功能数据库服务器的socket文件。3.2.20string_qualifier语法string_qualifier=char_value功能文本格式数据文件中的字符串限定符。当指定该参数后,被限定符包围的字符串中出现的delimiter参数指定的分隔符被

42、视为一般文本处理,不视为字段分隔符。3.2.21table_fields语法table_fields=string_value功能列名称集合。3.2.22table_name语法table_name=string_value功能表名。3.2.23trim语法trim=0|1功能截掉字符串右边空格。3.2.24user语法user=string_value功能用户名称。导入数据时,连接数据库的用户名。要求该用户对要导入的表有写权限。3.3用例:3.3.1一个简单的数据加载示例(文本通过这个示例,您可以了解最简单,也是最常见的gbloader数据加载方式。在这个示例中,我们将一个文本格式的数据加载

43、到数据库的表中。编辑控制文件lineorder.ctl,内容如下: 在控制文件所在的目录,执行下面的命令:gbloader -uroot -plinna lineorder.ctl其中加载数据的用户为root,用户的密码为linna,加载的控制文件为当前目录下的lineorder.ctl文件。 命令执行结束后,我们查看目录下的lineorder.gbl_report文件,该文件为加载数据时的报告文件。 通过查看文件内容我们得知,数据被成功加载到ssbm数据库的lineorder 表中。3.3.2一个简单的数据加载示例(二进制当需要导入的数据中有大量文本信息,很难确定一个合适的字段分隔符时,我们

44、可以使用二进制格式的方式进行数据导入导出。二进制格式是GBase 8a的专有格式,该数据应由GBase公司的专用工具导出。由于对二进制字段的分隔不再采用分隔符,而是通过记录字段的长度方式组织数据,保证了文本数据导入的正确性。采用二进制方式组织的数据会增加原始数据的体积,尤其在文本数据字段很少,且字段很多的情况下,体积增加比较明显。虽然用二进制的数据会膨胀,但由于采用字段长度来分隔字段的效率高于采用分隔符的方式,采用二进制格式的数据加载速度比文本格式的数据加载更高效。二进制格式的数据加载是我们推荐的数据加载方式。编辑控制文件lineorder.ctl,内容如下: 在控制文件所在的目录,执行下面的

45、命令:gbloader -uroot -plinna lineorder.ctl其中加载数据的用户为root,用户的密码为linna,加载的控制文件为当前目录下的lineorder.ctl文件。 命令执行结束后,我们查看目录下的lineorder.gbl_report文件,该文件为加载数据时的报告文件。 通过查看文件内容我们得知,数据被成功加载到ssbm数据库的lineorder 表中。3.3.3一个简单的数据加载示例(共享内存当服务器的磁盘空间不足,无法存放orat08a导出的数据文件时,可以采用共享内存模式加载数据。使用共享内存模式时,orato8a分配128M的共享内存用于和gbload

46、er进行数据交换。orato8a将导出的数据写入共享内存中。当分配的共享内存写满数据时,orato8a暂停数据导出,并等待gbloader取走数据和释放共享内存。我们执行下面的脚格,在Oracle中创建表,并加载一个scale的测试数据。create table lineorder (lo_orderkey number(18,lo_linenumber number(18,lo_custkey number(18,lo_partkey number(18,lo_suppkey number(18,lo_orderdate number(18,lo_orderpriority varchar2

47、(15,lo_shippriority varchar2(1 ,lo_quantity number(18,lo_extendedprice number(18,lo_ordtotalprice number(18,lo_discount number(18,lo_revenue number(18,lo_supplycost number(18,lo_tax number(18,lo_commitdate number(18,lo_shipmode varchar2(10;执行orato8a,将数据导出到共享内存中。 创建用于gbloader使用的控制文件。 执行gbloader,将数据加载

48、到GBase 8a中。 3.3.4如何导入多个数据文件用户为了管理需要,常常将一个大的数据文件分隔成多个较小的文件来存储。我们可以通过多次运行gbloader,将数据加载到数据库的表中,也可以在控制文件中的参数load_data_infile指定多个数据文件,各个文件用逗号分隔,一次将多个数据文件加载到数据库的表中。编辑控制文件lineorder.ctl,内容如下: 在控制文件所在的目录,执行下面的命令:gbloader -uroot -plinna lineorder.ctl其中加载数据的用户为root,用户的密码为linna,加载的控制文件为当前目录下的lineorder.ctl文件。 命

49、令执行结束后,我们查看目录下的lineorder.gbl_report文件,该文件为加载数据时的报告文件。 通过查看文件内容我们得知,数据被成功加载到ssbm数据库的lineorder 表中。3.3.5如何处理文本字段中含有分隔符的数据加载虽然我们推荐用户使用二进制的方式进行数据加载,但由于一些技术原因,用户只能提供文本数据。为了防止文本中包含字段分隔符,导入gbloader的解析程序不能正确分离字段,我们需要在文本字段加上限定符,这样gbloader解析程序就可以正确识别完整的字段信息,不受其中的包含的字段分隔符的干扰了。ssbm的supplier表的结构如下:+-+-+-+-+-+-+|

50、Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| s_suppkey | int(11 | YES | | NULL | | s_name | varchar(25 | YES | | NULL | | s_address | varchar(25 | YES | | NULL | | s_city | varchar(10 | YES | | NULL | | s_nation | varchar(15 | YES | | NULL | | s_region | varchar(12 | YES | | NULL | |

51、s_phone | varchar(15 | YES | | NULL | |+-+-+-+-+-+-+ 现在我们有一些新的供应商需要加入到系统中。这些供应商的信息被保存到一个Excel文件中,内容如下。 我们将供应商信息保存到一个文本文件supplier.tbl中,各字段之间用逗号分隔。我们选用逗号做为分隔符,是因为在供应商信息中,第一条和第九条的地址字段包含逗号。生成的数据文件内容如下: 我们先创建一个控制文件supplier.ctl,内容如下: 在这个控制文件中,我们的delimiter设置为逗号,和我们的supplier.tbl 中的分隔符保持一致。接下来,我们用gbloader导入这

52、个文件。 导入显示全部成功。可是当我们从数据库中查询数据时: 我们可以看到,s_phone字段中的数据有两条明显的不是电话号码,数据没有被正确导入到数据库中。通过观察原始数据可以看到,这两条记录的address 字段中,均包含一个逗号。也正是因为这个逗号,使数据的字段发生了位移,导致phone字段的内容变成了region字段的内容。我们将原始数据的第一条和第九条的地址字段两边加上一个双引号。 并在控制文件中加入参数string_qualifier,其值设置为'"'。 再次用新控制文件导入修改后的供应商信息。导入完成后进入数据库中查询。 查询结果显示,导入的信息完全正确。当我们需要从文本文件中加载数据时,我们应在字符串类型的字段两端加上一个限定符,来防止因为字段内容中包含分隔符,导致字段发生位移。3.3.6如何处理特殊字符如果供应商的信息变为下面的情况,也就是供应商地址中包含连续的一个双引号和一个逗号,我们用双引号做为字符串限定符又会是什么情况呢? 我们先用双引号做为字符串限定符,简单的对数据进行处理,内容如下: 运行gbloader,导入数据。 这次导入没有完全成功,有两条数据被跳过。查看gbloader的错误数据文件,我们看到: 出错的正是这两条记录

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论