宣言
ZIPF(<s> , <N> , <gen>)
説明
この関数は、Zipf分布に従う整数を返します。値の範囲は[0, N)であり、パーティションの特徴指数はsです。
sは特徴指数であり、sが大きいほど生成されるシーケンスはより傾斜します。シーケンスを曲線としてプロットすると、曲線はより急勾配になります。sとNの値の要件:スカラー値であり、行の反復によって変化しないこと。例えば、整数または浮動小数点定数、スカラー関数などです。PLでは@v1、1+@v3なども可能です。sの値の範囲は[1, +∞)であり、Nの値の範囲は[1, 16777215]です。zipfアルゴリズムの実装時に消費されるストレージ、計算リソースはNの値に関連しています。アルゴリズムの空間複雑さはO(N)であり、整数を1つ生成するたびの時間複雑さはO(logN)です。そのため、Nの値の範囲は[1, 16777215]に制限されています。genは数値生成関数であり、通常はRANDOM()関数を使用して生成されます。渡された値が定数の場合、zipf()関数の戻り値も定数になります。
例
以下の例は、ZIPF()関数を使用してZipf分布に従う整数を返す方法です。
obclient> SELECT ZIPF(1, 10, RANDOM()) FROM TABLE(GENERATOR(6));
+-----------------------+
| ZIPF(1,10,RANDOM()) |
+-----------------------+
| 2 |
| 0 |
| 0 |
| 0 |
| 3 |
| 3 |
+-----------------------+
6 rows in set
obclient> SELECT ZIPF(1, 10, 0415) FROM TABLE(GENERATOR(6));
+-------------------+
| ZIPF(1, 10, 0415) |
+-------------------+
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
+-------------------+
6 rows in set
obclient> SELECT ZIPF(ABS(-1), 23, RANDOM()) FROM DUAL;
+-----------------------------+
| ZIPF(ABS(-1),23,RANDOM()) |
+-----------------------------+
| 9 |
+-----------------------------+
1 row in set