例: CREATE TABLE AS(時系列形式) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - 時系列テーブルと操作の概要

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/zzg1600277315070.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1208
Product Category
Software
Teradata Vantage

例: 非PTIテーブルからPTIテーブルを作成する

Create table src1(
  TD_TIMECODE TIMESTAMP(6) NOT NULL,
  C1 INTEGER,
  C2 INTEGER);

CREATE TABLE pt71_tgt
AS (SELECT * FROM src1) WITH DATA
PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2016-01-01', HOURS(1));


show table pt71_tgt;

CREATE SET TABLE pt71_tgt,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO,
MAP = TD_MAP1
(
  TD_TIMEBUCKET BIGINT NOT NULL GENERATED SYSTEM TIMECOLUMN,
  TD_TIMECODE TIMESTAMP(6) NOT NULL GENERATED TIMECOLUMN,
  C1 INTEGER,
  C2 INTEGER)
PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2016-01-01', HOURS(1), NONSEQUENCED);

例: PTIテーブルをデータとともにコピーする

PTIテーブル定義と行データを新しいPTIテーブルにコピーするには、単純なCREATE TABLE AS文を使用します。
CREATE TABLE pt1_tgt AS pt1_src WITH DATA;
生成された新しいPTIテーブル、pt1_tgtは、PTI定義と自動生成された列を含む、ソース テーブルpt1_srcの正確なコピーです。

例: 別のPTI定義を使用して、PTIテーブルを新しいPTIテーブルにコピーする

新しいPTIテーブルのPTI定義を変更するには、CREATE TABLE AS文にPRIMARY TIME INDEX句を含めます。
Create table pti_src (
  C1 INTEGER,
  C2 INTEGER NOT NULL,
  C3 INTEGER)
PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2016-01-01', HOURS(1), columns(c1), SEQUENCED);

-- Because the PTI includes a timebucket duration parameter, the table will include a TD_TIMEBUCKET column,
--   but this column is invisible to SELECT queries and other DML.
-- Because the PTI includes a SEQUENCED parameter, the table will include a TD_SEQNO column.

SHOW TABLE pti_src;

Create SET TABLE pti_src,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO,
MAP = TD_MAP1 
(
TD_TIMEBUCKET BIGINT NOT NULL GENERATED SYSTEM TIMECOLUMN,
TD_TIMECODE TIMESTAMP(6) NOT NULL GENERATED TIMECOLUMN,
TD_SEQNO INT NOT NULL GENERATED TIMECOLUMN,
C1 INTEGER,
C2 INTEGER NOT NULL,
C3 INTEGER)
PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2016-01-01', HOURS(1), columns(c1), SEQUENCED(20000));

-- Assume the table has been populated with data.

CREATE TABLE pti_tgt
AS pti_src WITH DATA
PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2015-07-01', HOURS(1), NONSEQUENCED);

SHOW TABLE pti_tgt;

Create SET TABLE pti_tgt,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO,
MAP = TD_MAP1 
(
TD_TIMEBUCKET BIGINT NOT NULL GENERATED SYSTEM TIMECOLUMN,
TD_TIMECODE TIMESTAMP(6) NOT NULL GENERATED TIMECOLUMN,
TD_SEQNO INTEGER NOT NULL,
C1 INTEGER,
C2 INTEGER NOT NULL,
C3 INTEGER)
PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2015-07-01', HOURS(1), NONSEQUENCED);
元のPTIテーブルと新しいPTIテーブルの間の次の違いに注意してください。
  • ソース テーブルpti_srcには、COLUMNSオプションを含むPRIMARY TIME INDEX句があるため、ソース テーブルのPTIは、非表示のTD_TIMEBUCKET列とc1列の両方の値に基づいて、pti_srcからシステムAMPにデータを分散します。ただし、新しいテーブルpti_tgtのPRIMARY TIME INDEX句にはCOLUMNSオプションが含まれていないため、Primary Time Indexにはテーブルからのデータ列は含まれません。この新しいテーブルでは、データはTD_TIMEBUCKET列の値のみに基づいて、システムAMPに配布されます。
  • 新しいPTIテーブルは、SEQUENCEDではなく、NONSEQUENCEDです。したがって、列属性GENERATED TIMECOLUMNは新しいPTIテーブルのTD_SEQNO列定義の一部ではなく、TD_SEQNOは通常の列として扱われます。
  • 新しいテーブルのPTIには、ソース テーブルとは異なるtimezero_dateがあります。は、テーブルに格納されたデータに許可される最も早いタイムスタンプ日付を制限します。このCREATE TABLE … AS文にはWITH DATA句が含まれているため、pti_srcからのすべての行はpti_tgtに取り込まれます。これらの行のいずれかに、ターゲット テーブルに指定されたより前のTD_TIMECODE(タイムスタンプ)値がある場合、はエラーを生成し、CREATE TABLE … AS文は失敗します。新しいテーブルのPTIには、ソース テーブルとは異なるtimezero_dateがあります。は、テーブルに格納されたデータに許可される最も早いタイムスタンプ日付を制限します。このCREATE TABLE … AS文にはWITH DATA句が含まれているため、pti_srcからのすべての行はpti_tgtに取り込まれます。これらの行のいずれかに、ターゲット テーブルに指定されたより前のTD_TIMECODE(タイムスタンプ)値がある場合、はエラーを生成し、CREATE TABLE … AS文は失敗します。文のASこのCREATE TABLEは、WITH DATA句が含まれているため、pti_srcからすべての行がpti_tgtに移入されます。これらの行のいずれかに、ターゲット テーブルに指定されたtimezero_dateよりも前のTD_TIMECODE(タイムスタンプ)値がある場合、データベースはエラーを生成し、 CREATE TABLEステートメントは失敗します。

例: PTIテーブルから非PTIテーブルを作成する

SHOW TABLE pti_src;

Create SET TABLE pti_src,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO,
MAP = TD_MAP1 
(
TD_TIMEBUCKET BIGINT NOT NULL GENERATED SYSTEM TIMECOLUMN,
TD_TIMECODE TIMESTAMP(6) NOT NULL GENERATED TIMECOLUMN,
TD_SEQNO INT NOT NULL GENERATED TIMECOLUMN,
C1 INTEGER,
C2 INTEGER NOT NULL,
C3 INTEGER)
PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2016-01-01', HOURS(1), columns(c1), SEQUENCED);

CREATE TABLE reg1_tgt AS (SELECT * FROM pti_src) WITH DATA;
 
show table reg1_tgt;

CREATE SET TABLE reg1_tgt ,
     NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO,
     MAP = TD_MAP1
     (
      TD_TIMEBUCKET BIGINT,
      TD_TIMECODE TIMESTAMP(6),
      TD_SEQNO INTEGER,
      C1 INTEGER,
      C2 INTEGER,
      C3 INTEGER)
PRIMARY INDEX ( TD_TIMEBUCKET );

ただし、CREATE TABLE AS文に指定されているものが他にない場合、新しい非PTIテーブルのプライマリ インデックスは、最初に定義された列をテーブルに対して使用します。この場合、PTIソース テーブルにはtimebucket_durationパラメータ、HOURS(1)が含まれているため、ソース テーブルとターゲット テーブルの最初の列はTD_TIMEBUCKETになり、これが新しいテーブルのプライマリ インデックスとして使用されます。ソースPTIテーブルに最初の列としてTD_TIMEBUCKETがない場合、TD_TIMECODEが非PTIテーブルのプライマリ インデックスとして使用されます。PRIMARY INDEX句を明示的に指定すると、デフォルトの動作を上書きできます。