宣言
ZIPF(<s> , <N> , <gen>)
説明
この関数は、ジップ分布(Zipf-distributed)に従う整数を返します。値の範囲は [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() 関数を使用してジップ分布に従う整数を返す方法です。
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