- カテゴリ:
GENERATOR¶
指定された行数、指定された生成期間(秒単位)、またはその両方に基づいてデータの行を作成します。このシステム定義のテーブル関数により、合成行の生成が可能になります。
0列の仮想テーブルを生成することは可能ですが、多くの行を含む可能性があります。このような仮想テーブルは、 SELECT 句が完全にデータ生成関数で構成されるクエリに役立ちます。
構文¶
GENERATOR( ROWCOUNT => <count> [ , TIMELIMIT => <sec> ] )
GENERATOR( [ TIMELIMIT => <sec> ] )
使用上の注意¶
count
およびsec
は負でない整数定数でなければなりません。ROWCOUNT
引数のみが指定されている場合、結果のテーブルにはcount
行が含まれます。TIMELIMIT
引数のみが指定されている場合、クエリはsec
秒間実行され、時間枠内で可能な限り多くの行が生成されます。正確な行数はシステムの速度に依存し、完全に決定的ではありません。ROWCOUNT
とTIMELIMIT
引数の両方が指定されている場合は、TIMELIMIT
の前にROWCOUNT
に到達すると、結果のテーブルにはcount
行が含まれます。ROWCOUNT
の前にTIMELIMIT
に到達すると、テーブルには時間枠内に生成された行数が含まれます。正確な行数はシステムの速度に依存し、完全に決定的ではありません。
ROWCOUNT
またはTIMELIMIT
がnullの場合、それらは無視されます。したがって、generator(ROWCOUNT => null)
は0行を生成します。両方のパラメーター(
ROWCOUNT
とTIMELIMIT
)が省略された場合、 GENERATOR 関数は0行を返します。行の内容は、 GENERATOR 関数自体ではなく、射影句の関数によって決定されます。詳細については、以下の例セクションをご参照ください。射影句で使用する予定の特定の関数( SEQ()など)の説明もご参照ください。 すべての有効な関数がギャップのないシーケンスを生成するわけではありません。
例¶
注釈
これらの例は、ギャップを持つ可能性のあるシーケンスを生成します。ギャップのないシーケンスを生成する例については、 SEQ1 / SEQ2 / SEQ4 / SEQ8 と ROW_NUMBER をご参照ください。
この例では、 GENERATOR 関数を使用して10行を生成します。行の内容は、射影句の関数によって決定されます。
SEQ4() 列は、0で始まる4バイトの整数のシーケンスを生成します。
UNIFORM(...) 列は、関数または3番目のパラメーターとして渡された定数に基づいて、最初のパラメーター(1)と2番目のパラメーター(10)の間の範囲の値を生成します。
この例には、出力の一貫性を保つために、 RANDOM()関数のオプションの「シード」が含まれています。
SELECT seq4(), uniform(1, 10, RANDOM(12)) FROM TABLE(GENERATOR(ROWCOUNT => 10)) v ORDER BY 1; +--------+----------------------------+ | SEQ4() | UNIFORM(1, 10, RANDOM(12)) | |--------+----------------------------| | 0 | 7 | | 1 | 2 | | 2 | 5 | | 3 | 9 | | 4 | 6 | | 5 | 9 | | 6 | 9 | | 7 | 5 | | 8 | 3 | | 9 | 8 | +--------+----------------------------+
この例は、 UNIFORM
関数の3番目のパラメーターとして関数ではなく定数を渡すことを除いて、前述の例と似ています。その結果、 UNIFORM
列の出力はすべての行で同じになります。
SELECT seq4(), uniform(1, 10, 42) FROM TABLE(GENERATOR(ROWCOUNT => 10)) v ORDER BY 1; +--------+--------------------+ | SEQ4() | UNIFORM(1, 10, 42) | |--------+--------------------| | 0 | 10 | | 1 | 10 | | 2 | 10 | | 3 | 10 | | 4 | 10 | | 5 | 10 | | 6 | 10 | | 7 | 10 | | 8 | 10 | | 9 | 10 | +--------+--------------------+
ROWCOUNT
パラメーターと TIMELIMIT
パラメーターの両方を省略すると、出力は0行になります。
SELECT seq4(), uniform(1, 10, RANDOM(12)) FROM TABLE(GENERATOR()) v ORDER BY 1; +--------+----------------------------+ | SEQ4() | UNIFORM(1, 10, RANDOM(12)) | |--------+----------------------------| +--------+----------------------------+
次の例では、 ROWCOUNT
パラメーターなしで TIMELIMIT
パラメーターを使用しています。
SELECT COUNT(seq4()) FROM TABLE(GENERATOR(TIMELIMIT => 10)) v;
+---------------+
| COUNT(SEQ4()) |
|---------------|
| 3615440896 |
+---------------+