オプション3: 欠落値を見積値に置き換え - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ 時系列テーブルおよび操作

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/sfz1493079039055.ditamap
dita:ditavalPath
ja-JP/sfz1493079039055.ditaval
dita:id
B035-1208
Product Category
Software
Teradata Vantage

欠落値がある行を更新するための値を見積もることができます。

読み込まれた値は、他の集約を含む任意の関数の結果になります。

この例では、時系列集約のテーブルとデータ定義の例のTEMPERATURE列について示します。この例では、各タイムバケットの欠落しているすべての値を、現在の値の平均で更新します。

Create table ocean_buoys2 as ocean_buoys with no data;
INSERT INTO OCEAN_BUOYS2 VALUES(TIMESTAMP '2014-01-06 08:00:00.000000', 0, 55, );
INSERT INTO OCEAN_BUOYS2 VALUES(TIMESTAMP '2014-01-06 08:09:59.999999', 0, 55, );
INSERT INTO OCEAN_BUOYS2 VALUES(TIMESTAMP '2014-01-06 09:01:25.122200', 1, 55, );
INSERT INTO OCEAN_BUOYS2 VALUES(TIMESTAMP '2014-01-06 09:02:25.122200', 1, 55, );
 
MERGE INTO OCEAN_BUOYS2
USING (SELECT TD_TIMECODE, BUOYID, Avg(TEMPERATURE) FROM OCEAN_BUOYS GROUP BY (TD_TIMECODE, BUOYID) WHERE TEMPERATURE IS NOT NULL) AS S(a,b,c)
ON TD_TIMECODE=S.a AND BUOYID=S.b AND TEMPERATURE IS NULL
WHEN MATCHED THEN UPDATE SET TEMPERATURE=S.c;
select * from ocean_buoys2 order by 1;

結果:

TIMECODE BUOYID SALINITY TEMPERATURE
2014-01-06 08:00:00.000000 0 55 10
2014-01-06 08:09:59.999999 0 55 99
2014-01-06 09:01:25.122200 1 55 73
2014-01-06 09:02:25.122200 1 55 74
SELECT $TD_TIMECODE_RANGE, $TD_GROUP_BY_TIME, BUOYID, AVG(TEMPERATURE), COUNT(*)
FROM OCEAN_BUOYS
WHERE TD_TIMECODE BETWEEN TIMESTAMP '2014-01-06 08:00:00' AND TIMESTAMP '2014-01-06 10:30:00'
AND BUOYID=0
GROUP BY TIME (MINUTES(10) AND BUOYID)
ORDER BY 2,3;

結果: 平均列への影響に注意してください。

TIMECODE_RANGE GROUP BY TIME(MINUTES(10)) BUOYID Average(TEMPERATURE) COUNT(*)
('2014-01-06 08:00:00.000000+00:00', '2014-01-06 08:10:00.000000+00:00') 1 0 54 3
('2014-01-06 08:10:00.000000+00:00', '2014-01-06 08:20:00.000000+00:00') 2 0 55 2