ROWTIME
ROWTIME is an operator and system column that returns the time at which a particular row of a stream was created.
It is used in four distinct ways:
As an operator
As a system column of a stream
As a column alias, to override the timestamp on the current row
As an ordinary column in a table
For more details, see the topics Timestamp, ROWTIME, and CURRENT_ROW_TIMESTAMP in this guide.
ROWTIME operator
When used in the SELECT clause of a streaming query, without being qualified by a preceding 'alias.' , ROWTIME is an operator that evaluates to the timestamp of the row that is just about to be generated.
Its type is always TIMESTAMP NOT NULL.
ROWTIME system column
Every stream has a ROWTIME column. To reference this column from within a query, qualify it with the stream name (or alias). For example, the following join query returns three timestamp columns: the system columns of its input streams, and the timestamp of the generated row.
SELECT STREAM o.ROWTIME AS leftRowtime, s.ROWTIME AS rightRowtime, ROWTIME AS joinRowtime FROM Orders AS o JOIN Shipments OVER (RANGE INTERVAL '1' HOUR FOLLOWING) AS s ON o.orderId = s.orderId leftRowtime rightRowtime joinRowtime =================== =================== =================== 2008-02-20 10:15:00 2008-02-20 10:30:00 2008-02-20 10:15:00 2008-02-20 10:25:00 2008-02-20 11:15:00 2008-02-20 10:25:00 2008-02-20 10:25:30 2008-02-20 11:05:00 2008-02-20 10:25:30
As it happens, leftRowtime is always equal to joinRowtime, because the join is specified such that the output row timestamp is always equal to the ROWTIME column from the Orders stream.
It follows that every streaming query has a ROWTIME column. However, the ROWTIME column is not returned from a top-level JDBC query unless you explicitly include it in the SELECT clause. For example:
CREATE STREAM Orders( "orderId" INTEGER NOT NULL, "custId" INTEGER NOT NULL); SELECT columnName FROM ALL_STREAMS; columnName ========== orderId custId SELECT STREAM * FROM Orders; orderId custId ======= ====== 100 501 101 22 102 699 SELECT STREAM ROWTIME, * FROM Orders; ROWTIME orderId custId =================== ======= ====== 2008-02-20 10:15:00 100 501 2008-02-20 10:25:00 101 22 2008-02-20 10:25:30 102 699
This is mainly to ensure compatibility with JDBC: the stream Orders declares two columns, so it makes sense that "SELECT STREAM *" should return two columns.