PTIテーブルに対するUPDATE(Upsert形式)操作の例を次に示します。ストレージ分散は以下の基づいています。
- タイムバケット
- タイムバケットと列句
- 列句
例: タイムバケットに基づくストレージ分散を含むアップサート
この例で使用するテーブルの定義は次のとおりです。非シーケンス化PTIテーブルocean_buoy_no_seqには、以下が含まれます。
- 2016年10月15日として指定されたタイム ゼロ、DATE '2016-10-15'。
- 1時間のタイムバケット、HOURS(1)
CREATE TABLE ocean_buoy_no_seq ( TD_TIMEBUCKET BIGINT NOT NULL GENERATED SYSTEM TIMECOLUMN, TD_TIMECODE TIMESTAMP(1) NOT NULL GENERATED TIMECOLUMN, salinity INTEGER, temperature INTEGER) PRIMARY TIME INDEX (TIMESTAMP(1), DATE '2016-10-15', HOURS(1), NONSEQUENCED);
これらのinsert操作により、テーブルにデータ行が設定されます。
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 10:33:12.1', 23, 33);
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 11:44:12.1', 24, 34);
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 12:55:12.1', 25, 35);
この文は、TD_TIMECODE値がTIMESTAMP '2016-10-16 10:33:12.1'に一致する行を更新して、salinityを28に設定します。
UPDATE ocean_buoy_no_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.1' ELSE INSERT INTO ocean_buoy_no_seq (TIMESTAMP '2016-10-16 10:33:12.1', 28, 33);
この文は、TD_TIMECODE列に一致する値が見つからなかった後で、新しい行、TIMESTAMP '2016-10-16 10:33:12.6'を挿入します。
UPDATE ocean_buoy_no_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.6' ELSE INSERT INTO ocean_buoy_no_seq (TIMESTAMP '2016-10-16 10:33:12.6', 28, 33);
例: タイムバケットと列句に基づくストレージ分散を含むアップサート
この例で使用するテーブルの定義は次のとおりです。非シーケンス化PTIテーブルocean_buoy_no_seqには、以下が含まれます。
- 2016年10月15日として指定されたタイム ゼロ、DATE '2016-10-15'。
- 1時間のタイムバケット、HOURS(1)
- PRIMARY TIME INDEXのbuoy_id列、COLUMNS(buoy_id)
CREATE TABLE ocean_buoy_no_seq ( TD_TIMEBUCKET BIGINT NOT NULL GENERATED SYSTEM TIMECOLUMN, TD_TIMECODE TIMESTAMP(1) NOT NULL GENERATED TIMECOLUMN, BUOY_ID INTEGER, SALINITY INTEGER, TEMPERATURE INTEGER) PRIMARY TIME INDEX (TIMESTAMP(1), DATE '2016-10-15', HOURS(1), COLUMNS(buoy_id), NONSEQUENCED);
これらのinsert操作により、テーブルにデータ行が設定されます。
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 10:33:12.1', 333, 23, 33);
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 11:44:12.1', 444, 24, 34);
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 12:55:12.1', 555, 25, 35);
この文は、TD_TIMECODE値がbuoy_id 333のTIMESTAMP '2016-10-16 10:33:12.1'に一致する行を更新し、salinityを28に設定します。
UPDATE ocean_buoy_no_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.1' AND buoy_id = 333 ELSE INSERT INTO ocean_buoy_no_seq (TIMESTAMP '2016-10-16 10:33:12.1', 333, 28, 33);
この文は、TD_TIMECODE列に一致する値が見つからなかった後で、新しい行、buoy_id 666のTIMESTAMP '2016-10-16 10:33:12.6'を挿入します。
UPDATE ocean_buoy_no_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.6' AND buoy_id = 666 ELSE INSERT INTO ocean_buoy_no_seq (TIMESTAMP '2016-10-16 10:33:12.6', 666, 28, 33);
この例で使用するテーブルの定義は次のとおりです。シーケンス化PTIテーブルocean_buoy_seqには、以下が含まれます。
- 2016年10月15日として指定されたタイム ゼロ、DATE '2016-10-15'。
- 1時間のタイムバケット、HOURS(1)
- PRIMARY TIME INDEXのbuoy_id列、COLUMNS(buoy_id)
CREATE TABLE ocean_buoy_seq ( TD_TIMEBUCKET BIGINT NOT NULL GENERATED SYSTEM TIMECOLUMN, TD_TIMECODE TIMESTAMP(6) NOT NULL GENERATED TIMECOLUMN, TD_SEQNO INTEGER NOT NULL GENERATED TIMECOLUMN, buoy_id INTEGER, salinity INTEGER, temperature INTEGER) PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2016-10-15', HOURS(1), COLUMNS(buoy_id), SEQUENCED(200));
これらのinsert操作により、テーブルにデータ行が設定されます。
INSERT INTO ocean_buoy_seq(TIMESTAMP '2016-10-16 10:33:12.1', 1, 333, 23, 33);
INSERT INTO ocean_buoy_seq(TIMESTAMP '2016-10-16 11:44:12.1', 1, 444, 24, 34);
INSERT INTO ocean_buoy_seq(TIMESTAMP '2016-10-16 12:55:12.1', 1, 555, 25, 35);
この文は、TD_TIMECODE値がbuoy_id 333のTIMESTAMP '2016-10-16 10:33:12.1'およびTD_SEQNO =1に一致する行を更新し、salinityを28に設定します。
UPDATE ocean_buoy_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.1' AND TD_SEQNO = 1 AND buoy_id = 333 ELSE INSERT INTO ocean_buoy_seq (TIMESTAMP '2016-10-16 10:33:12.1', 1, 333, 28, 33);
この文は、TD_TIMECODE列に一致する値が見つからなかった後で、新しい行、buoy_id 666のTIMESTAMP '2016-10-16 10:33:12.6'およびTD_SEQNO = 1を挿入します。
UPDATE ocean_buoy_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.6' AND TD_SEQNO = 1 AND buoy_id = 666 ELSE INSERT INTO ocean_buoy_seq (TIMESTAMP '2016-10-16 10:33:12.6', 1, 666, 28, 33);
例: 列句に基づくストレージ分散を含むアップサート
この例で使用するテーブルの定義は次のとおりです。非シーケンス化PTIテーブルocean_buoy_no_seqには、以下が含まれます。
- 2016年10月15日として指定されたタイム ゼロ、DATE '2016-10-15'。
- PRIMARY TIME INDEXのocean_zone列とbuoy_id列、COLUMNS(ocean_zone, buoy_id)
CREATE TABLE ocean_buoy_no_seq ( TD_TIMECODE TIMESTAMP(1) NOT NULL GENERATED TIMECOLUMN, ocean_zone CHAR(2), buoy_id INTEGER, salinity INTEGER, temperature INTEGER) PRIMARY TIME INDEX (TIMESTAMP(1), DATE '2016-10-15', COLUMNS(ocean_zone, buoy_id), NONSEQUENCED);
これらのinsert操作により、テーブルにデータ行が設定されます。
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 10:33:12.1', 'PC', 333, 23,33);
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 11:44:12.1', 'AT', 444, 24,34);
INSERT INTO ocean_buoy_no_seq(TIMESTAMP '2016-10-16 12:55:12.1', 'IN', 555, 25,35);
この文は、TD_TIMECODE値がbuoy_id 333のTIMESTAMP '2016-10-16 10:33:12.1'およびocean_zone = 'PC'に一致する行を更新し、salinityを28に設定します。
UPDATE ocean_buoy_no_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.1' AND ocean_zone = 'PC' AND buoy_id = 333 ELSE INSERT INTO ocean_buoy_no_seq (TIMESTAMP '2016-10-16 10:33:12.1', 'PC', 333, 23, 33);
この文は、TD_TIMECODE列に一致する値が見つからなかった後で、新しい行、buoy_id 666のTIMESTAMP '2016-10-16 10:33:12.6'およびocean_zone = 'PC'を挿入します。
UPDATE ocean_buoy_no_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.6' AND ocean_zone = 'PC' AND buoy_id = 666 ELSE INSERT INTO ocean_buoy_no_seq (TIMESTAMP '2016-10-16 10:33:12.6', 'PC', 666, 28, 33);
この例で使用するテーブルの定義は次のとおりです。シーケンス化PTIテーブルocean_buoy_seqには、以下が含まれます。
- 2016年10月15日として指定されたタイム ゼロ、DATE '2016-10-15'。
- PRIMARY TIME INDEXのocean_zone列とbuoy_id列、COLUMNS(ocean_zone, buoy_id)
CREATE TABLE ocean_buoy_seq ( TD_TIMECODE TIMESTAMP(1) NOT NULL GENERATED TIMECOLUMN, TD_SEQNO INTEGER NOT NULL GENERATED TIMECOLUMN, ocean_zone CHAR(2), buoy_id INTEGER, salinity INTEGER, temperature INTEGER) PRIMARY TIME INDEX (TIMESTAMP(1), DATE '2016-10-15', COLUMNS(ocean_zone, buoy_id), SEQUENCED(20));
これらのinsert操作により、テーブルにデータ行が設定されます。
INSERT INTO ocean_buoy_seq(TIMESTAMP '2016-10-16 10:33:12.1', 1, 'PC', 333, 23,33);
INSERT INTO ocean_buoy_seq(TIMESTAMP '2016-10-16 11:44:12.1', 1, 'AT', 444, 24,34);
INSERT INTO ocean_buoy_seq(TIMESTAMP '2016-10-16 12:55:12.1', 1, 'IN', 555, 25,35);
この文は、TD_TIMECODE値がbuoy_id 333のTIMESTAMP '2016-10-16 10:33:12.1'、TD_SEQNO = 1、およびocean_zone = 'PC'に一致する行を更新し、salinityを28に設定します。
UPDATE ocean_buoy_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.1' AND TD_SEQNO = 1 AND ocean_zone = 'PC' AND buoy_id = 333 ELSE INSERT INTO ocean_buoy_seq (TIMESTAMP '2016-10-16 10:33:12.1', 1, 'PC', 333, 23, 33);
この文は、TD_TIMECODE列に一致する値が見つからなかった後で、新しい行、buoy_id 666のTIMESTAMP '2016-10-16 10:33:12.6'、TD_SEQNO = 1、およびocean_zone = 'PC'を挿入します。
UPDATE ocean_buoy_seq SET salinity = 28 WHERE TD_TIMECODE = TIMESTAMP '2016-10-16 10:33:12.6' AND TD_SEQNO = 1 AND ocean_zone = 'PC' AND buoy_id = 666 ELSE INSERT INTO ocean_buoy_seq (TIMESTAMP '2016-10-16 10:33:12.6', 1, 'PC', 666, 28, 33);