IBM Support

[Db2] 自動採番される ID 列が定義されている表へのインポート

Question & Answer


Question

生成列が定義されている表に対してデータを IMPORT する際の考慮点を教えてください。

Answer

当文書では自動生成される ID 列のケースと列の内容から生成される生成列のケースについて説明します。

1. ID 列の場合

a. 入力元になるデータに ID 列が定義されていない場合

インポート実行時に modified by identitymissing を指定してください。
入力データに ID 列が含まれていないものとみなして、ID 列値を生成します。

例:
入力元になる表 tab1 が

  create table tab1 (c1 int,
                     c2 int,
                     c3 char(1))

インポート先となる表 tab2 が

  create table tab2 (c1 int,
                     c2 int,
                     c3 int generated by default as identity,
                     c4 char(1))

で定義されていたとします。

tab1 の内容が以下の場合、

> db2 "select * from tab1"

C1          C2          C3
----------- ----------- --
          5          10 K
          1          15 T
          3           8 B

  3 レコードが選択されました。

> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by identitymissing replace into tab2"
> db2 "select * from tab2"

C1          C2          C3          C4
----------- ----------- ----------- --
          5          10           1 K
          1          15           2 T
          3           8           3 B

  3 レコードが選択されました。


b. 入力元の表に ID 列が定義されているが、インポート先では別の ID 列値を生成させたい場合

b-1. エクスポート時に ID 列を含めず、インポート実行時に modified by identitymissing を指定してください。
入力データに ID 列が含まれていないものとみなして、ID 列値を生成します。

例:
入力元になる表 tab1 が

  create table tab2 (c1 int,
                     c2 int,
                     c3 int generated by default as identity,
                     c4 char(1))

インポート先となる表 tab2 が tab1 と同じ内容で定義されていたとします。

tab1 の内容が以下の場合、

> db2 "select * from tab1"

C1          C2          C3          C4
----------- ----------- ----------- --
          5          10           1 K
          1          15           2 T
          3           8           3 B

  3 レコードが選択されました。

tab2 で c4 列の順番で ID 列を生成させたい場合、エクスポート時に C4 列でソートしてください。このとき出力列に ID 列は含めません。

> db2 "export to tab1.del of del select c1, c2, c4 from tab1 order by c4"
> db2 "import from tab1.del of del modified by identitymissing replace into tab2"
> db2 "select * from tab2"

C1          C2          C3          C4
----------- ----------- ----------- --
          3           8           1 B
          5          10           2 K
          1          15           3 T

  3 レコードが選択されました。

インポートされた順序にしたがって ID 列が生成されます。


b-2. エクスポート時に ID 列を含め、インポート実行時に modified by identityignore を指定してください。
入力データに含まれる ID 列の値を無視して新たに ID 列値を生成します。

例:
tab1, tab2 の定義、tab1 表の内容は b-1 のケースと同じとします。
tab2 で c4 列の順番で ID 列を生成させたい場合、エクスポート時に C4 列でソートしてください。このとき出力列に ID 列も含めます。

> db2 "export to tab1.del of del select * from tab1 order by c4"
> db2 "import from tab1.del of del modified by identityignore replace into tab2"
> db2 "select * from tab2"

C1          C2          C3          C4
----------- ----------- ----------- --
          3           8           1 B
          5          10           2 K
          1          15           3 T

  3 レコードが選択されました。


2. 生成列の場合

a. 入力元になるデータに生成列が定義されていない場合

インポート実行時に modified by generatedmissing を指定してください。
入力データに生成列が含まれていないものとみなして、生成列値を生成します。

例:
入力元になる表 tab1 が

  create table tab1 (c1 int,
                     c2 int,
                     c3 char(1))

インポート先となる表 tab2 が

  create table tab2 (c1 int,
                     c2 int,
                     c3 int generated always as (c1 * 2),
                     c4 char(1))

で定義されていたとします。

tab1 の内容が以下の場合、

> db2 "select * from tab1"

C1          C2          C3
----------- ----------- --
          5          10 K
          1          15 T
          3           8 B

  3 レコードが選択されました。

> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by generatedmissing replace into tab2"
 >db2 "select * from tab2"

C1          C2          C3          C4
----------- ----------- ----------- --
          5          10          10 K
          1          15           2 T
          3           8           6 B

  3 レコードが選択されました。


b. 入力元になる表に生成列が定義されている場合

b-1. エクスポート時に生成列を含めず、インポート実行時に modified by generatedmissing を指定してください。
入力データに生成列が含まれていないとみなして、生成列値を生成します。

例:
入力元になる表 tab1 が

  create table tab2 (c1 int,
                     c2 int,
                     c3 int generated always as (c1 * 2),
                     c4 char(1))

インポート先となる表 tab2 が

  create table tab2 (c1 int,
                     c2 int,
                     c3 int generated always as (c1 * 5),
                     c4 char(1))

で定義されていたとします。

tab1 の内容が以下の場合、

C:\Worktemp\faqid>db2 "select * from tab1"

C1          C2          C3          C4
----------- ----------- ----------- --
          5          10          10 K
          1          15           2 T
          3           8          15 B

  3 レコードが選択されました。

エクスポート時に出力列に生成列 (c3) を含めません。

> db2 "export to tab1.del of del select c1, c2, c4 from tab1"
> db2 "import from tab1.del of del modified by generatedmissing replace into tab2"
> db2 "select * from tab2"

C1          C2          C3          C4
----------- ----------- ----------- --
          5          10          25 K
          1          15           5 T
          3           8          15 B

  3 レコードが選択されました。


b-2. エクスポート時に生成列を含め、インポート実行時に modified by generatedignore を指定してください。
入力データに含まれる生成列の値を無視して、新たに生成列値を生成します。

例:
tab1, tab2 の定義、tab1 表の内容は b-1 のケースと同じとします。
エクスポート時に出力列に生成列 (c3) も含めます。

> db2 "export to tab1.del of del select * from tab1"
> db2 "import from tab1.del of del modified by generatedignore replace into tab2"
> db2 "select * from tab2"

C1          C2          C3          C4
----------- ----------- ----------- --
          5          10          25 K
          1          15           5 T
          3           8          15 B

  3 レコードが選択されました。


関連情報
ID 列のインポートに関する考慮事項
生成列のインポートに関する考慮事項
[Db2] パスポート・アドバンテージによく寄せられる質問
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlHAAU","label":"Data Movement-\u003EImport"},{"code":"a8m500000008PlJAAU","label":"Data Movement-\u003ELoad"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
30 August 2023

UID

swg21903492