NORMALIZE、EXPAND ON、およびPTIテーブル - 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

NORMALIZE

CREATE TABLE文のNORMALIZE句は、非PTIテーブルに対して使用するのと同様に、PTIテーブルに対して使用できます。NORMALIZE句は、行の他のすべての値が互いに等価である場合に、一致または重複するPeriodデータ型列の値を持つテーブルの行をまとめます。NORMALIZE句の詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。

例: 正規化されたPTIテーブル

この例では、5つの挿入行を2行にまとめます。

CREATE TABLE flight_sensors ( 
      FlightID   INTEGER,
      SensorID   INTEGER,
      SensorData INTEGER,
      duration PERIOD(TIMESTAMP(6)),
NORMALIZE ALL BUT(SensorData) ON duration ON MEETS OR OVERLAPS)
PRIMARY TIME INDEX (TIMESTAMP(6), DATE '2016-10-15', COLUMNS(flightID, SensorID), NONSEQUENCED);

INSERT INTO flight_sensors (TIMESTAMP '2017-01-06 08:10:00.000000', 67,4,1,
  PERIOD (timestamp '2017-01-06 08:10:00.000000',
          timestamp '2017-01-06 08:10:00.000010'));

INSERT INTO flight_sensors (TIMESTAMP '2017-01-06 08:10:00.000000', 67,4, 1,
  PERIOD (timestamp '2017-01-06 08:10:00.000000',
          timestamp '2017-01-06 08:10:00.000020'));

INSERT INTO flight_sensors (TIMESTAMP '2017-01-06 08:10:02.000000', 67,5, 99,
  PERIOD (timestamp '2017-01-06 08:10:02.000000',
          timestamp '2017-01-06 08:10:02.000030'));

INSERT INTO flight_sensors (TIMESTAMP '2017-01-06 08:10:02.000000', 67,5, 99,
  PERIOD (timestamp '2017-01-06 08:10:02.000000',
          timestamp '2017-01-06 08:10:02.000040'));

INSERT INTO flight_sensors (TIMESTAMP '2017-01-06 08:10:02.000000', 67,5, 99,
  PERIOD (timestamp '2017-01-06 08:10:02.000000',
          timestamp '2017-01-06 08:10:02.000050'));


SELECT * FROM flight_sensors;
TD_TIMECODE flightID SensorID SensorData 期間
2017-01-06 08:10:00.000000 67 4 1 ('2017-01-06 08:10:00.000000','2017-01-06 08:10:00.000020')
2017-01-06 08:10:02.000000 67 5 99 ('2017-01-06 08:10:02.000000','2017-01-06 08:10:02.000050')

EXPAND ON

SELECT文のEXPAND ON句をPTIテーブルに対して使用し、EXPAND ON句での仕様に従って、返される各テーブル行の結果セットに複数の行を作成できます。

例: 正規化されたPTIテーブルでのSELECT EXPAND ON句の使用

この例では、上記のNORMALIZEの例のテーブルを使用して、2つの行を持つ新しいPTIテーブルを作成します。

SELECT EXPAND ONクエリーは、flight_sensorsテーブルの2つの行を、それぞれの元の行に関連付けられた0.00001単位の期間を満たす複数の行に展開します。

SELECT td_timecode, flightID, SensorData, tsp 
FROM flight_sensors
 EXPAND ON duration AS tsp BY INTERVAL '0.00001' SECOND
 FOR PERIOD (timestamp '2017-01-06 08:10:00.000000',
             timestamp '2017-01-06 08:10:02.000050');
TD_TIMECODE FlightID SensorData tsp
2017-01-06 08:10:00.000000 67 1 ('2017-01-06 08:10:00.000000', '2017-01-06 08:10:00.000010')
2017-01-06 08:10:00.000000 67 1 ('2017-01-06 08:10:00.000010', '2017-01-06 08:10:00.000020')
2017-01-06 08:10:02.000000 67 99 ('2017-01-06 08:10:02.000000', '2017-01-06 08:10:02.000010')
2017-01-06 08:10:02.000000 67 99 ('2017-01-06 08:10:02.000010', '2017-01-06 08:10:02.000020')
2017-01-06 08:10:02.000000 67 99 ('2017-01-06 08:10:02.000020', '2017-01-06 08:10:02.000030')
2017-01-06 08:10:02.000000 67 99 ('2017-01-06 08:10:02.000030', '2017-01-06 08:10:02.000040')
2017-01-06 08:10:02.000000 67 99 ('2017-01-06 08:10:02.000040', '2017-01-06 08:10:02.000050')