TPC-DS 用load client from批量导入数据到DB2
最近正好要学习TPC-DS, 需要用到批量导入数据。这里用到了db2自带的load client from来导入数据。
这里是centos7中可执行的详细步骤:
1. 下载带DB2 version: 10.5.5的docker,注意可以根据自己需要选择合适的image,我这里选择的是ibmoms/db2express-c
docker search db2 docker pull ibmoms/db2express-c
2. 在docker中启动db2
docker run -d -it -p50000:50000 -e DB2INST1_PASSWORD=DB2Password -e LICENSE=accept -v /home/hyang/docker/db2:/db2data ibmoms/db2express-c bash docker ps docker exec -it f6aa8b1229e6 bash su - db2inst1 db2start
注:f6aa8b1229e6是db2 docker 的container id,可以用docker ps查看,并且创建之后一般会保持不变
3. 创建数据库
db2 create db 'DB2TESTDB' ALIAS 'DB2TESTDB' using codeset UTF-8 territory US pagesize 32 K db2 connect to 'DB2TESTDB' db2 GRANT DBADM ON DATABASE TO USER db2admin db2 GRANT SECADM ON DATABASE TO USER db2admin
现在我们可以用以下连接信息连接到DB2数据库
jdbc:db2://ip:50000/DB2TESTDB db2inst1 DB2Password
4. 将以前由TPCDS工具产生的25个dat文件copy到docker
命令行如下:
docker cp call_center.dat f6aa8b1229e6:/home/db2inst1/tpcds/.
为了简单,批量copy这些dat文件
for file in `pwd`/*.dat; do tmp=$(basename $file) docker cp $tmp f6aa8b1229e6:/home/db2inst1/tpcds/. Done
5. 如果导入过程中出错,可以删除所有表中的数据
#!/bin/bash for file in `pwd`/*.dat; do tmp=$(basename $file .dat) db2 'delete from $tmp’; done
6. 如果上个批量删除表数据出错,请改为直接输出命令,然后copy命令再在db2客户端执行
for file in `pwd`/*.dat; do tmp=$(basename $file .dat) echo "db2 'delete from $tmp'"; done
7. 批量导入数据到各个表,import from 和load client from都可以,但是load client from性能更高。注意chardel'' coldel|的用法,coldel|表示列分隔符为|
for file in `pwd`/*.dat; do tmp=$(basename $file .dat) db2 "load client from $tmp.dat of del modified by chardel'' coldel|, insert into $tmp"; done
8. 同样如果出错,请改为直接输出命令,然后copy命令再在db2客户端执行
for file in `pwd`/*.dat; do tmp=$(basename $file .dat) echo "db2 \"load client from $tmp.dat of del modified by chardel'' coldel|, insert into $tmp\""; done