0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DB2 で圧縮されたCSVファイルへのエクスポート・インポートについて

Posted at

概要

DB2 コマンドでエクスポートやインポートを行う際、CSVファイルをファイル名で指定する必要があり、パイプで受け渡すことができません。このため直接圧縮されたファイルを利用するためには一工夫が必要です。
具体的には FIFO を使うことで直接圧縮されたCSVファイルの読み書きを行うことができます。

記述

EXPORT
mkfifo fifo
ksh -c "gzip < fifo > [圧縮して出力するCSVファイル名]" &
db2 "export to fifo of del select * from hoge"
rm fifo
IMPORT
mkfifo fifo
ksh -c "gunzip < [圧縮された入力するCSVファイル名] > fifo" &
db2 "import from fifo of del insert into hoge"
rm fifo

TIPS

データベースのコードページをIBM943で作成しており、UTF-8のCSVをインポートする場合、VARCHARやCHARに2バイト文字を含んでいると、以下のようにCODEPAGEを指定して取り込もうとすると、UTF-8は漢字や半角カタカナなどが3バイトで表現されるため、文字列の後半が欠落してしまいます。

だめな例
db2 "import from [UTF-8なCSVファイル名] of del modified by codepage=1208 insert into hoge"

これを事前にエンコーディング変換してFIFO経由する方法で回避できます。

FIFOを利用した例
mkfifo fifo
ksh -c "iconv -f UTF8 -t IBM943 < [UTF-8なCSVファイル名] > fifo" &
db2 "import from fifo of del modified by codepage=943 insert into hoge"
rm fifo

UTF-8のCSVを圧縮したものをIBM943なDBに取り込みたいならこんな感じ。

mkfifo fifo
ksh -c "gunzip < [UTF-8な圧縮したCSVファイル名] | iconv -f UTF8 -t IBM943 > fifo" &
db2 "import from fifo of del modified by codepage=943 insert into hoge"
rm fifo
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?