- パラメトリック集約関数: カラムに加えて、ほかのパラメータも受け取ります。
- コンビネータ: 集約関数の動作を変更します。
NULL の処理
NULL の argument はすべてスキップされます。集約 に複数の argument がある場合は、そのうち 1 つ以上が NULL である行は無視されます。
この規則には例外があります。関数 first_value、last_value と、それらの別名 (それぞれ any と anyLast) に modifier RESPECT NULLS が続く場合です。たとえば、FIRST_VALUE(b) RESPECT NULLS です。
例:
次の table を考えます。
y カラムの値の合計を求めるとします。
groupArray 関数を使って y カラムから配列を作成できます。
groupArray は、結果の配列に NULL を含めません。
COALESCE を使うと、NULL を用途に応じた適切な値に置き換えられます。たとえば avg(COALESCE(column, 0)) では、集約時にカラムの値を使用し、NULL の場合は 0 を使用します。
NULL値だけを含むTupleはNULLではないため、集約関数はそのNULL値があってもその行をスキップしません。
count は、パラメータなし (count()) または定数パラメータ付き (count(1)) の場合、ブロック内のすべての行をカウントします (引数に GROUP BY カラムが含まれないため、その値には依存しません) 。一方、count(column) は、column が NULL ではない行数のみを返します。
RESPECT NULLS を指定した first_value の例を以下に示します。この例では、NULL 入力がそのまま考慮されるため、NULL であるかどうかにかかわらず、最初に読み取られた値が返されることがわかります。