首页 > 解决方案 > 将 db2 中的数据从 N 模式中的所有表中导出到带有列名的 CSV

问题描述

我正在尝试使用列名将一堆 DB2 表导出到 CSV。我没有看到任何直接的方法来做到这一点。我按照这个来获取我想要的数据。但我必须在数百个表上执行。有没有办法动态获取给定 N 模式名称的所有列和表?

我也尝试过所有表导出到模式中的 csv 但这并没有给我列名。因此,如果有人可以向我展示如何更改此脚本以获取 CSV 中的列名,我的工作就完成了。

服务器正在运行:Red Hat Linux 服务器。

标签: sqlbashshellcsvdb2

解决方案


使用文件

以下 db2 命令生成导出脚本:

export to exp.sql of del modified by nochardel
select
  x'0a'||'export to file_header of del modified by nochardel VALUES '''||columns||''''
||x'0a'||'export to file_data of del messages messages.msg select '||columns||' from '||tabname_full
||x'0a'||'! cat file_header file_data > '||tabname_full||'.csv'
from
(
select rtrim(c.tabschema)||'.'||c.tabname as tabname_full, listagg(c.colname, ', ') as columns
from syscat.tables t
join syscat.columns c on c.tabschema=t.tabschema and c.tabname=t.tabname
where t.tabschema='SYSIBM' and t.type='T'
group by c.tabschema, c.tabname
--fetch first 10 row only
)
;

最好将上面的命令放在某个文件中gen_exp.sql并运行它以生成导出脚本:

db2 -tf gen_exp.sql

导出脚本exp.sql由每个表的 3 个命令组成:
* db2export命令,用于获取逗号分隔的列列表
* db2export命令,用于获取表数据
* 连接命令,用于将上述两个输出收集到单个文件

您按如下方式运行此脚本:

db2 -vf exp.sql -z exp.sql.log

使用管道

gen_exp_sh.sql:

export to exp.sh of del modified by nochardel
select
  x'0a'||'echo "'||columns||'" > '||filename
||x'0a'||'db2 "export to pipe_data of del messages messages.msg select '||columns||' from '||tabname_full||'" >/dev/null 2>&1 </dev/null &'
||x'0a'||'cat pipe_data >> '||filename
from
(
select
  rtrim(c.tabschema)||'.'||c.tabname as tabname_full
, rtrim(c.tabschema)||'.'||c.tabname||'.csv' as filename
, listagg(c.colname, ', ') as columns
from syscat.tables t
join syscat.columns c on c.tabschema=t.tabschema and c.tabname=t.tabname
where t.tabschema='SYSIBM' and t.type='T'
group by c.tabschema, c.tabname
--fetch first 10 row only
)
;

运行如下:

db2 -tf gen_exp_sh.sql

导出 shell 脚本exp.sh包含每个表的 3 个命令:
* echo 命令,用于将逗号分隔的列列表写入文件
* db2 export 命令,用于将表数据获取到管道(在后台启动)
*cat从管道并将数据添加到具有列列表的同一文件中

用法:
您必须先创建管道,然后再创建dot space script导出脚本(符号 - 这很重要):

mkfifo pipe_data
db2 connect to mydb ...
. ./exp.sh
rm -f pipe_data

推荐阅读