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

  

posted @ 2020-12-25 16:52  panda4671  阅读(740)  评论(0编辑  收藏  举报