Sybase IQ数据库之导出、导入研究

2023-12-06 13:08

本文主要是介绍Sybase IQ数据库之导出、导入研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导读:本文介绍了Sybase IQ导出、导入数据的相关内容,Sybase IQ是一个强大的即席查询服务器,用户可以使用Sybase IQ来分离决策支持系统和在线事务处理系统。

【TechTarget中国原创】ASIQ一直以其导出导入性能佳而著称,如果能将其用好确实不易。最近本人对此研究了一番,总结如下,仅供参考。

  1. 前言

  Sybase IQ是一个强大的即席查询服务器。用Sybase IQ来分离决策支持系统(DSS,Decision Support System,READER)和在线事务处理系统(OLTP,OnLine Transaction Processing,WRITER)。目前Sybase IQ在SG186数据中心项目中作为数据仓库数据库得到广泛使用。

  2. 导出

  导出在Sybase IQ也称卸载,总结Sybase IQ卸载方式无外乎以下几种:

  2.1、使用BCP卸载数据

  SybaseIQ支持BCP,可以有两种方式,一种呢是通过OCS提供的BCP,语法和ASE类似,还有一种是通过iq_bcp,语法如下:

usage: iq_bcp [[database_name.]owner.]table_name {in | out} datafile 
           [-c] [-t field_terminator] [-r row_terminator] 
            [-U username] [-P password] [-I interfaces_file] [-S server] 
            [-v] [-A packet size] [-J client character set] 
usage: bcp [[db_name.]owner.]table_name[:slice_num] [partition pname] {in | out} [filename] 
        [-m maxerrors] [-f formatfile] [-e errfile] 
        [-F firstrow] [-L lastrow] [-b batchsize] 
        [-n] [-c] [-t field_terminator] [-r row_terminator] 
        [-U username] [-P password] [-I interfaces_file] [-S server] 
        [-a display_charset] [-z language] [-v] 
        [-A packet size] [-J client character set]  
        [-T text or image size] [-E] [-g id_start_value] [-N] [-X] 
        [-M LabelName LabelValue] [-labeled] 
        [-K keytab_file] [-R remote_server_principal] [-C] 
        [-V [security_options]] [-Z security_mechanism] [-Q] [-Y] 
        [-x trusted.txt_file] 
        [--maxconn maximum_connections] [--show-fi] [--hide-vcc]

  这两种方式都需要配置,open client 的接口文件UNIX下是interfaces,与数据库option方式的数据卸载相比较,特点是:一速度比后者慢,但是支持客户端数据卸载。以下给出一个具体的例子:

bcp cmcc.d_district out "D_BRAND.dat" -c -t"|" -T32000 -UDBA -PSQL -Stestiq -Jcp936

  或者

iq_bcp cmcc.d_district out "D_BRAND.dat" -c -t"|" -UDBA -PSQL -Stestiq -Jcp936

  2.2文本数据方式

  2.2.1、Sqladv方式

  示例如下:

  在cmd状态下:

  c:\>sqladv -Sserver -Uuser -Ppassword-i c:\test.sql -o c:\testout.txt

  但是有几个问题:

  (1)、出来的东东格式不太标准:

  首先有字段名的表头,不知道怎么去掉。

  另外就是各个字段之间的数据采用N个空格分开,不是使用Tab,

  不过,这些可以通过编程解决。

  (2)、执行Bat处理时启动一次SQLADV之后,后面的就执行不过去了,必须先把SQLADV关闭才能执行。

  2.2.2、isql方式

  使用Isql可以实现同样的效果,这样就可直接使用批处理文件,不用Sqladv的方式了。

  c:\>isql -Sserver -Uuser -Ppassword -ic:\test.sql -o c:\testout.txt

  test.sql:

  select * from DSSD_TIME whereTIME_YEAR=2001

  go

  2.2.3、output方式

OUTPUT TO filename 
[ APPEND ]  
[ VERBOSE ] 
[ FORMAT output-format ] 
[ ESCAPE CHARACTER character ] 
[ DELIMITED BY string ] 
[ QUOTE string [ ALL ] ] 
[ COLUMN WIDTHS (integer , . . . ) ] 
[ HEXADECIMAL { ON | OFF | ASIS } ] 
[ ENCODING encoding ] 
output-format : 
ASCII | DBASEII | DBASEIII | EXCEL 
| FIXED | FOXPRO | HTML | LOTUS | SQL | XML

  • QUOTE

  • ESCAPE CHARACTER character 指定转义字符

  • 输出数据在当前运行端

  • 可以指定分割符方式的数据输出,也可以指定每个字段的定长方式.。示

  例如下:

SELECT * FROM "DBA"."V_ICP_ID"; 
OUTPUT TO 'c:\temp\V_ICP_ID.out' 
DELIMITED BY '|' 
FORMAT ASCII 
quote '';

  输出结果在命令执行端。

  > # <文件名> 输出执行结果

  > & <文件名> 输出到文件包括错误信息和执行信息,执行结果

  例如:

  SELECT *

  FROM employee

  >& empfile

  或

  select * from psdss_dm.AA_RESULT >#D:\tmpda\AA_RESULT.txt;

  2.3、option方式

  此方式可以导出二进制数据:

  set temporary option temp_extract_name1='/apps/performance/IAC' ; --设置输出路径 
  set temporary option Temp_Extract_Column_Delimiter='|'; --设置分隔符 
  commit 
  select * from P_ABIS_IAC --执行查找 
  commit 
  set temporary option temp_extract_name1='' --重新设置到控制台 
  commit

  经过研究,并在东软导出工具基础上加以改造实现了批量表数据导出,填补了东软工具不能批量表导出的不足。

  2.4导出方式比较

  (1)Option是二进制方式,此种方式速度最快,在导入时完全避免了分隔符和空值等问题。

  (2)iq_bcp方式支持客户端导出。

  (3)其他几种方式是文本方式,可以灵活定制文本导出格式,只能在服务器端导出。

  3.导入

  3.1、load

  load语句的格式:

  LOAD [ INTO ] TABLE [ owner.]table-name [ ( column-name, . . . ) ] 
  FROM filename 
  [ load-option . . . ] 
  [ statistics-limitation-options ] 
  load-option : 
  CHECK CONSTRAINTS { ON | OFF } 
  | COMPUTES { ON | OFF } 
  | DEFAULTS { ON | OFF } 
  | DELIMITED BY string 
  | ESCAPE CHARACTER character 
  | ESCAPES { ON | OFF } 
  | FORMAT { ASCII | BCP } 
  | HEXADECIMAL {ON | OFF} 
  | ORDER {ON | OFF} 
  | PCTFREE percent-free-space 
  | QUOTES { ON | OFF } 
  | SKIP integer 
  | STRIP { ON | OFF } 
  | WITH CHECKPOINT { ON | OFF }

  • 如果字段名未出现在字段列表中,则填充NULL、0、空、或者DEFAULT;

  存在于输入文件中的字段可以用“filler()”.忽略

  • DEFAULTS { ON | OFF } 为ON则字段取缺省值。否则取NULL

  • QUOTES { ON | OFF } 缺省为ON ,字段定界符为‘’或者 “”

  • DELIMITED BY 选项: 可以单个字符,最多255个字符,例如:制表符

  号作分割符号:

  ...DELIMITED BY ’nx09’

  • SKIP n 忽略前n条记录;

  • STRIP ON|OFF 尾空格插入前是否截取;

  • WITH CHECKPOINT ON|OFF 缺省为 OFF, 如果设置为ON则,命令完成

  后,执行CHECKPOINT 操作。

  下面是从一个文本文件load到表F_INN_IA_DAILY_SUM中的语句:

  set temporary option date_order=YMD; 
  Load Table F_INN_IA_DAILY_SUM 
  ( 
  ORG_SID '+|+', 
  DEAL_SID '+|+', 
  ALL_TIME_SID '+|+', 
  R_COUNT_DIM_SID '+|+', 
  T_TAX_STOR_COST '+|+', 
  T_STOR_COST '+|+', 
  T_STOR_SUM '+|+', 
  CREATED_DT 'X0A' 
  ) 
  From '/load_data/F_Inn_IA_Daily_Sum.txt' 
  ESCAPES OFF 
  QUOTES OFF 
  NOTIFY 100000 
  WITH CHECKPOINT ON; 
  COMMIT

  其中+|+是字段的分隔符,X0A是记录的分隔符,即回车(文本文件中)。

  load中注意的问题:

  1、load的文本文件要在iq同一台机子上。

  2、load的时候经常出现类型转换错误,所以要注意字段类型和长度一致。

  3、最后一个字段有空值,也会出现字符转换错误,但真正的原因是最后一个字段有空值。

  对最后一个字段空值的load语句:

  数据:

  256|59|水资源费费展x00费|5903|自来水厂自来水厂保险x00船x00船x00x00|0|2006-12-01 02:15:19.0|2006-12-02 02:15:19.0

  257|59|水资源费费展x00费|5904|自来水厂取地自来保险x00船x00船x00x00|0|2006-12-01 02:15:19.0|2006-12-02 02:15:19.0

  258|59|水资源费费展x00费|5905|工业生产取地表水保险x00船x00船x00x00|0|2006-12-01 02:15:19.0|为空

  259|59|水资源费费展x00费|5906|工业生产取地下水保险x00船x00船x00x00|0|2006-12-01 02:15:19.0|为空

  因为有最后是有空值的,在装载的时候装载不进去,要指出空值的类型。load语句如下:

  LOAD TABLE d_tax_kind 
  (TAX_KIND_KEY '|', 
  TAX_KIND_CODE '|', 
  TAX_KIND_NAME '|', 
  TAX_ITEM_CODE '|', 
  TAX_ITEM_NAME '|', 
  TAX_FLAG '|', 
  EFFECTIVE_DATE '|' null(''), 
  END_DATE 'x0dx0a' null('') 
  ) 
  FROM 'c:d_tax_kind.out' 
  ESCAPES OFF 
  QUOTES Off 
  format ASCII 
  WITH CHECKPOINT ON;

  需要注意的问题:

  ASCII变长数据加载时,字段分割符号和行分隔符一般需要描述。

  3.2 insert 数据加载

  语法:

  INSERT [ INTO ] [ owner.]table-name [ ( column-name [, ...] ) ] 
  ... VALUES ( expression ... ) 
  Syntax 2 
  INSERT [ INTO ] [ owner.]table-name [ ( column-name [, ...] ) ] 
  ... insert-load-options 
  ... select-statement 
  Syntax 3 
  INSERT [ INTO ] [ owner.]table-name [ ( column-name [, ...] ) ] 
  ... insert-load-options 
  [ LOCATION 'servername.dbname ' 
  [ ENCRYPTED PASSWORD ][ PACKETSIZE packet-size ] ] 
  ... {select-statement}

  3.3、特殊的INSERT

  支持部分加载,从其他远程服务器数据加载。

  INSERT INTO lineitem 
  (l_shipdate, l_orderkey) 
  LOCATION 'detroit.asiqdb' 
  PACKETSIZE 512 
  { SELECT l_shipdate, l_orderkey 
  FROM lineitem }

  通过LOCATION 'detroit.asiqdb'指定Open Client配置的服务器名和数据

  库名称。

  3.4、管道方式的数据加载

  利用操作系统管道功能进行数据加载,减少磁盘I/O 使数据加载更加高效。

  3.4.1、管道数据加载命令脚本

  #!/bin/ksh 
  FILE=$1 
  if [ -z "${FILE}" ] 
  then 
  echo "" 
  echo "USAGE: $0 SQL_file_to_load" 
  echo "" 
  exit 
  fi 
  if [ -r CdrPipe ] 
  then 
  rm CdrPipe 
  fi 
  mknod /work_tmp/test_pipe/CdrPipe p 
  nohup dbisqlc -c 
  "eng=iq126;uid=DBA;pwd=SQL;dbn=iq126;links=tcpip{host=127.0.0.1:2660}" - 
  q ${FILE} > ${FILE}.out 2>&1 & 
  cat /work_tmp/test_pipe/rtqd_split.aa > /work_tmp/test_pipe/CdrPipe & 
  echo "Input from: ${FILE}" 
  echo "Output to : ${FILE}.out"

  4、总结

  综上所述,导出方式建议使用option方式,导入方式使用load在进行批量导出许多表时,可以考虑使用东软的export和load工具生成批量导出和导入脚本。东软的相关工具使用方法本文不作赘述。

这篇关于Sybase IQ数据库之导出、导入研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461940

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(