宣言
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