экспортировать данные из db2 из всех таблиц в N схемах в CSV с именами столбцов - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь экспортировать несколько таблиц DB2 в CSV с именами столбцов. Я не вижу прямого способа сделать это. Я следовал за этим , чтобы получить данные, которые я хочу. Но я должен выполнить это за сотнями таблиц. Есть ли способ динамически получить все столбцы и таблицы с N именами схем?

Я также попытался это , которое экспортирует все таблицы в csv в схеме, но это не дает мне имена столбцов. Поэтому, если кто-то может показать мне шоу, чтобы изменить этот скрипт, чтобы получить имена столбцов в CSV, моя работа завершена.

Сервер работает: Red Hat Linux Server.

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Использование файлов

Следующая команда 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 команд для каждой таблицы:
* db2 export команда для получения списка столбцов через запятую
* db2 export команда для получения данных таблицы
* команда конкатенации, чтобы собрать оба вышеприведенных вывода в один файл

Вы запускаете этот скрипт следующим образом:

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

Сценарий экспорта exp.sh состоит из 3 команд для каждой таблицы:
* echo команда для записи списка столбцов через запятую в файл
* Команда экспорта db2 для получения данных таблицы в канал (запущена в фоновом режиме)
* простая cat команда для чтения из канала и добавления данных в тот же файл со списком столбцов

Использование:
Сначала вы должны создать канал и исходный код (dot space script нотация - это важно), а затем скрипт экспорта:

mkfifo pipe_data
db2 connect to mydb ...
. ./exp.sh
rm -f pipe_data
0 голосов
/ 21 июня 2019

Попробуйте использовать этот замечательный инструмент: https://www.sql -workbench.eu / . Он универсален, и вы можете передавать данные между любыми типами двигателей базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...