Hologres は PostgreSQL と互換性があり、データ開発のための標準的な PostgreSQL 構文をサポートしています。このトピックでは、Hologres でサポートされている汎用集計関数について説明します。
Hologres は、PostgreSQL で利用可能な関数の一部をサポートしています。これらの関数の使用方法の詳細については、「集計関数」をご参照ください。次の表に、Hologres がサポートする汎用集計関数を示します。
関数 | 説明 |
列内の個別値を持つ行の数を計算します。この関数の結果は概算値です。 | |
数値列の概算パーセンタイルを計算します。 説明 Hologres は V3.1 以降で APPROX_PERCENTILE をサポートしています。 | |
式の値を配列に集計します。 | |
BIGINT、FLOAT8、FLOAT4、または INT 式によって返される NULL 以外の値の平均を計算します。 | |
BIGINT または INT 式によって返される NULL 以外の値に対してビット単位の AND 演算を実行します。 | |
BIGINT または INT 式によって返される NULL 以外の値に対してビット単位の OR 演算を実行します。 | |
BOOLEAN 式によって返されるすべての値が TRUE であるかどうかをチェックします。 | |
BOOLEAN 式によって返されるいずれかの値が TRUE であるかどうかをチェックします。 | |
2 つの変数間の相関係数を計算します。 | |
指定されたテーブルの行数、または BIGINT または NUMERIC 式からの入力行数を取得します。 | |
母集団共分散を計算します。 | |
サンプル共分散を計算します。 | |
BOOLEAN 式のすべての値が TRUE であるかどうかをチェックします。 | |
BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 式から最大値を取得します。 | |
列 (列 y) の値を比較して最大値を見つけ、同じ行から別の指定された列 (列 x) の値を返します。 | |
BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 式から最小値を取得します。 | |
列 (列 y) の値を比較して最小値を見つけ、同じ行から別の指定された列 (列 x) の値を返します。 | |
独立変数 (X) の平均を計算します。 | |
従属変数 (Y) の平均を計算します。 | |
どちらの入力パラメーターも NULL でない行の数を計算します。 | |
相関係数の 2 乗を計算します。 | |
| |
最小二乗適合線形方程式の傾きを計算します。 | |
独立変数 (X) の二乗和を | |
独立変数 (X) と従属変数 (Y) の積の和を | |
BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 式からすべての値の合計を取得します。 | |
INT、NUMERIC、または FLOAT8 式によって返される値のサンプル標準偏差を計算します。 | |
INT、NUMERIC、または FLOAT8 式によって返される値の母集団標準偏差を計算します。 | |
INT、NUMERIC、または FLOAT8 式によって返される値のサンプル標準偏差を計算します。 | |
TEXT 式によって返される NULL 以外の値を、指定された区切り文字を使用して文字列に連結します。 | |
列内の個別値を持つ行の数を計算します。 | |
INT または NUMERIC 式によって返される値のサンプル分散を計算します。 | |
FLOAT8、INT、または NUMERIC 式によって返される値の母集団分散を計算します。 | |
INT、FLOAT8、または NUMERIC 式によって返される値のサンプル分散を計算します。 |
サンプルデータ
-- テーブルを作成します。
CREATE TABLE example_table(
c1 INT,
c2 BOOLEAN,
c3 VARCHAR(10),
c4 DECIMAL(3, 1),
c5 TEXT,
c6 FLOAT8,
c7 FLOAT8
);
-- データを挿入します。
INSERT INTO example_table (c1, c2, c3, c4, c5, c6, C7) VALUES
(1, true, 'a', 1.1, 3, 6, 7),
(2, false, 'b', 2.2, 4, 6, 2.6);APPROX_COUNT_DISTINCT
説明: 列内の個別値を持つ行の数を計算します。この関数は、単一の概算値を返します。
APPROX_COUNT_DISTINCT ( <column> )パラメーター
column: 必須。個別行の概算数を計算する列を指定します。
使用上の注意
APPROX_COUNT_DISTINCT関数は HyperLogLog カーディナリティ推定を使用して、不正確な COUNT DISTINCT 計算を実行します。不正確な COUNT DISTINCT 計算は、特に列に多くの離散値がある場合にクエリのパフォーマンスを向上させます。平均エラー率は通常0.1% から 1%の間です。この関数は、ある程度の誤差が許容されるパフォーマンス重視のシナリオに適しています。次のパラメーターを使用してエラー率を調整できます。SET hg_experimental_approx_count_distinct_precision = 20;値の範囲は 12 から 20 です。デフォルト値は 17 です。
precision パラメーターは、HyperLogLog アルゴリズムでのバケット化のためのビット数を指定します。値が大きいほど、バケット数が多くなり、理論上の精度が高くなります。
精度値を高くすると、計算時間とメモリのオーバーヘッドも増加します。ただし、オーバーヘッドは正確な
COUNT DISTINCT ( column )文よりもはるかに低くなります。したがって、COUNT DISTINCT ( column )の代わりにAPPROX_COUNT_DISTINCTを使用することをお勧めします。precision パラメーターが 17 より大きい値に設定されている場合、Hologres は HyperLogLog++ アルゴリズムを使用します。このアルゴリズムは戻り値を修正して、エラーをさらに削減し、安定させます。
たとえば、hg_experimental_approx_count_distinct_precision を 20 に設定すると、ほとんどの場合、エラー率を 0.01% から 0.2% の範囲に削減できます。
説明COUNT DISTINCT ( column )関数を使用して、正確な COUNT DISTINCT 計算を実行することもできます。この関数はより多くのリソースを消費します。例
次の例では、MaxCompute が提供する TPC-H パブリックデータセットの ORDERS テーブルを使用します。追加の準備なしで、次の SQL 文を直接実行できます。
-- 外部テーブルを作成します。 IMPORT FOREIGN SCHEMA public_data LIMIT TO (ORDERS_10g) FROM SERVER odps_server INTO public options (if_table_exist 'update'); -- 内部テーブルを作成します。 BEGIN; CREATE TABLE ORDERS ( O_ORDERKEY bigint NOT NULL PRIMARY KEY, O_CUSTKEY int NOT NULL, O_ORDERSTATUS text NOT NULL, O_TOTALPRICE DECIMAL(12, 2) NOT NULL, O_ORDERDATE timestamptz NOT NULL, O_ORDERPRIORITY text NOT NULL, O_CLERK text NOT NULL, O_SHIPPRIORITY int NOT NULL, O_COMMENT text NOT NULL ); CALL set_table_property ('ORDERS', 'segment_key', 'O_ORDERDATE'); CALL set_table_property ('ORDERS', 'distribution_key', 'O_ORDERKEY'); CALL set_table_property ('ORDERS', 'bitmap_columns', 'O_ORDERKEY,O_CUSTKEY,O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY,O_COMMENT'); CALL set_table_property ('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_COMMENT'); COMMENT ON COLUMN ORDERS.O_ORDERKEY IS '注文 ID'; COMMENT ON COLUMN ORDERS.O_CUSTKEY IS '顧客 ID'; COMMENT ON COLUMN ORDERS.O_ORDERSTATUS IS '注文ステータス'; COMMENT ON COLUMN ORDERS.O_TOTALPRICE IS '合計価格'; COMMENT ON COLUMN ORDERS.O_ORDERDATE IS '注文日'; COMMENT ON COLUMN ORDERS.O_ORDERPRIORITY IS '注文優先度'; COMMENT ON COLUMN ORDERS.O_CLERK IS 'レジ係'; COMMENT ON COLUMN ORDERS.O_SHIPPRIORITY IS '配送優先度'; COMMENT ON COLUMN ORDERS.O_COMMENT IS 'コメント'; COMMIT; -- 内部テーブルにデータをインポートします。 INSERT INTO ORDERS SELECT * FROM ORDERS_10g;O_CUSTKEY 列の個別行の概算数を計算します。
SELECT APPROX_COUNT_DISTINCT ( O_CUSTKEY ) FROM ORDERS;次の結果が返されます。
approx_count_distinct ----------------------- 1000422グローバル精度を 20 に設定し、O_CUSTKEY 列の個別行の概算数を計算します。
ALTER DATABASE dbname SET hg_experimental_approx_count_distinct_precision = 20; SELECT APPROX_COUNT_DISTINCT ( O_CUSTKEY ) FROM ORDERS;次の結果が返されます。
approx_count_distinct ----------------------- 1000422セッションレベルの精度を 20 に設定し、O_CUSTKEY 列の個別行の概算数を計算します。
--セッションレベルの精度を 20 に設定します。 SET hg_experimental_approx_count_distinct_precision = 20; SELECT APPROX_COUNT_DISTINCT ( O_CUSTKEY ) FROM ORDERS;次の結果が返されます。
approx_count_distinct ----------------------- 998854
APPROX_PERCENTILE
Hologres は V3.1 以降で APPROX_PERCENTILE をサポートしています。
説明: 数値列の概算パーセンタイルを計算します。この関数は、単一の概算値を返します。
APPROX_PERCENTILE (fraction) WITHIN GROUP (ORDER BY sort_expression)パラメーター
fraction: 0 から 1 までの定数。たとえば、0.5 は中央値を表します。
sort_expression: パーセンタイルを計算する列を指定します。この列はソート可能でなければなりません。
使用上の注意
APPROX_PERCENTILE関数は、リザーバーサンプリングアルゴリズムを使用します。最大 8,192 個の要素をサンプリングし、これらのサンプルからパーセンタイルを計算します。例
次の例では、O_CUSTKEY 列の個別値の概算数を計算します。
SELECT APPROX_PERCENTILE(0.25) WITHIN GROUP (ORDER BY salary) AS q1, APPROX_PERCENTILE(0.5) WITHIN GROUP (ORDER BY salary) AS median, APPROX_PERCENTILE(0.75) WITHIN GROUP (ORDER BY salary) AS q3 FROM employees;
ARRAY_AGG
説明: 式の値を配列に連結します。
ARRAY_AGG(expression)パラメーター
expression: 必須。JSON、JSONB、TIMETZ、INTERVAL、INET、OID、UUID、および配列型を除く任意のデータ型の式。
戻り値
ARRAY 型の値を返します。
例
SELECT ARRAY_AGG(c1) FROM example_table;次の結果が返されます。
array_agg ----------- {2,1}
AVG
説明: BIGINT、FLOAT8、FLOAT4、または INT 式によって返される NULL 以外の値の平均を計算します。
AVG(expression)パラメーター
expression: 必須。BIGINT、FLOAT8、FLOAT4、または INT 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT AVG(c7) FROM example_table;次の結果が返されます。
avg ---------- 1.500000
BIT_AND
説明: BIGINT または INT 式によって返される NULL 以外の値に対してビット単位の AND 演算を実行します。
BIT_AND(expression)パラメーター
expression: 必須。BIGINT または INT 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT BIT_AND(c1) FROM example_table;結果は次のとおりです。
bit_and --------- 0
BIT_OR
説明: BIGINT または INT 式によって返される NULL 以外の値に対してビット単位の OR 演算を実行します。
BIT_OR(expression)パラメーター
expression: 必須。BIGINT または INT 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT BIT_OR(c1) FROM example_table;次の結果が返されます。
bit_or -------- 3
BOOL_AND
説明: BOOLEAN 式によって返されるすべての値が TRUE であるかどうかをチェックします。
BOOL_AND(bool)パラメーター
bool: 必須。BOOLEAN 式。
戻り値
BOOLEAN 型の値を返します。この関数は、式によって返されるすべての値が true の場合は TRUE (t) を返し、そうでない場合は FALSE (f) を返します。
例
SELECT BOOL_AND(c2) FROM example_table;次の結果が返されます。
bool_and ---------- f
BOOL_OR
説明: BOOLEAN 式によって返されるいずれかの値が TRUE であるかどうかをチェックします。
BOOL_OR(bool)パラメーター
bool: 必須。BOOLEAN 式。
戻り値
BOOLEAN 型の値を返します。この関数は、式によって返されるいずれかの値が true の場合は TRUE (t) を返し、そうでない場合は FALSE (f) を返します。
例
SELECT BOOL_OR(c2) FROM example_table;次の結果が返されます。
bool_or --------- t
CORR
説明: 2 つの変数間の相関係数を計算します。
CORR(Y, X)説明パラメーターは DOUBLE PRECISION、FLOAT、または FLOAT8 データ型でなければなりません。
パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT CORR(c6, c7) FROM example_table;次の結果が返されます。
corr ------
COUNT
説明: 指定されたテーブルの行数、または BIGINT または NUMERIC 式からの入力行数を取得します。
指定されたテーブルの行数を取得します。
COUNT(*)BIGINT または NUMERIC 式から入力行数を取得します。
COUNT(expression)expression: 必須。BIGINT または NUMERIC データ型の NULL 以外の式。
戻り値
BIGINT 型の値を返します。
例
SELECT COUNT(*) FROM example_table;次の結果が返されます。
count ------- 2
COVAR_POP
説明: 母集団共分散を計算します。
COVAR_POP(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT COVAR_POP(c6, c7) FROM example_table;次の結果が返されます。
covar_pop --------------------- 3.5527136788005e-15
COVAR_SAMP
説明: サンプル共分散を計算します。
COVAR_SAMP(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT COVAR_SAMP(c6, c7) FROM example_table;次の結果が返されます。
covar_samp -------------------- 7.105427357601e-15
EVERY
説明: BOOLEAN 式のすべての値が TRUE であるかどうかをチェックします。
EVERY(bool)パラメーター
bool: 必須。BOOLEAN 式。
戻り値
BOOLEAN 型の値を返します。この関数は、式のすべての値が true の場合は TRUE (t) を返し、そうでない場合は FALSE (f) を返します。
例
SELECT EVERY(c2) FROM example_table;次の結果が返されます。
every ------- f
MAX
説明: BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 式から最大値を取得します。
MAX(expression)パラメーター
expression: 必須。BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT MAX(c1) FROM example_table;次の結果が返されます。
max ----- 2
MAX_BY
説明: 列 (列 y) の値を比較して最大値を見つけ、対応する行から別の指定された列 (列 x) の値を返します。
MAX_BY(x, y);説明数値型は数値に基づいて比較されます。非数値型は辞書のソート順に基づいて比較されます。
パラメーター
y: 必須。最大値を取得する列を指定します。列 y が NULL の行は計算に含まれません。
x: 必須。列 y の最大値に対応する値を取得する列を指定します。
使用上の注意
MAX_BY 関数は、Hologres V1.3.36 以降でのみサポートされています。
説明インスタンスのバージョンが V1.3.36 より前の場合は、Hologres DingTalk グループに参加してインスタンスのスペックアップをリクエストできます。詳細については、「オンラインサポートの利用方法」をご参照ください。
戻り値
この関数は、列 y の最大値に対応する列 x の値を返します。
列 y のすべての値が NULL の場合、関数は NULL を返します。
MAX_BY 関数が列 y に最大値を持つ複数の行を見つけた場合、列 x の対応する値から最大値を返します。
例
--サンプルデータ DROP TABLE IF EXISTS test; CREATE TABLE IF NOT EXISTS test ( id INT, name TEXT, cost INT ); INSERT INTO test VALUES (1, 'a', 100), (1, 'aa', 200), (1, 'aaa', 300), (2, 'b', 150), (2, 'bb', 300), (3, 'c', 150), (3, 'cc', 50);cost 列の最大値に対応する name 列の値をクエリします。この例では、複数の最大値が存在します。
SELECT max_by(name, cost) FROM test;次の結果が返されます。
max_by -------- aaa
MIN
説明: BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 式から最小値を取得します。
MIN(expression)パラメーター
expression: 必須。BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 型。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT MIN(c1) FROM example_table;次の結果が返されます。
min ----- 1
MIN_BY
説明: 列 (列 y) の値を比較して最小値を見つけ、対応する行から別の指定された列 (列 x) の値を返します。
MIN_BY(x, y);説明数値型は数値に基づいて比較されます。非数値型は辞書のソート順に基づいて比較されます。
パラメーター
y: 必須。最小値を取得する列を指定します。列 y が NULL の行は計算に含まれません。
x: 必須。列 y の最小値に対応する値を取得する列を指定します。
使用上の注意
MAX_BY および MIN_BY 関数は、Hologres V1.3.36 以降でのみサポートされています。
説明インスタンスのバージョンが V1.3.36 より前の場合は、Hologres DingTalk グループに参加してインスタンスのスペックアップをリクエストできます。詳細については、「オンラインサポートの利用方法」をご参照ください。
戻り値
この関数は、列 y の最小値に対応する列 x の値を返します。
列 y のすべての値が NULL の場合、関数は NULL を返します。
MIN_BY 関数が列 y に最小値を持つ複数の行を見つけた場合、列 x の対応する値から最小値を返します。
例
--サンプルデータ DROP TABLE IF EXISTS test; CREATE TABLE IF NOT EXISTS test ( id INT, name TEXT, cost INT ); INSERT INTO test VALUES (1, 'a', 100), (1, 'aa', 200), (1, 'aaa', 300), (2, 'b', 150), (2, 'bb', 300), (3, 'c', 150), (3, 'cc', 50);cost 列の最小値に対応する name 列の値をクエリします。
SELECT MIN_BY(name, cost) FROM test;次の結果が返されます。
min_by -------- cc (1 row)
REGR_AVGX
説明: 独立変数 (X) の平均を計算します。
REGR_AVGX(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT REGR_AVGX(c6, c7) FROM example_table;次の結果が返されます。
regr_avgx ----------- 4.8
REGR_AVGY
説明: 従属変数 (Y) の平均を計算します。
REGR_AVGY(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT REGR_AVGY(c6, c7) FROM example_table;次の結果が返されます。
regr_avgy ----------- 6
REGR_COUNT
説明: どちらの入力パラメーターも NULL でない行の数を計算します。
REGR_COUNT(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
BIGINT 型の値を返します。
例
SELECT REGR_COUNT(c6, c7) FROM example_table;次の結果が返されます。
regr_count ------------ 2
REGR_R2
説明: 相関係数の 2 乗を計算します。
REGR_R2(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT REGR_R2(c6, c7) FROM example_table;次の結果が返されます。
regr_r2 --------- 1
REGR_INTERCEPT
説明:
(Y, X)ペアによって決定される最小二乗適合線形方程式の y 切片を計算します。REGR_INTERCEPT(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT REGR_INTERCEPT(c6, c7) FROM example_table;次の結果が返されます。
regr_intercept ---------------- 6
REGR_SLOPE
説明: 最小二乗適合線形方程式の傾きを計算します。
REGR_SLOPE(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT REGR_SLOPE(c6, c7) FROM example_table;次の結果が返されます。
regr_slope ---------------------- 7.34031751818285e-16
REGR_SXX
説明: 独立変数 (X) の二乗和を
sum(X^2) - sum(X)^2/Nとして計算します。REGR_SXX(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT REGR_SXX(c6, c7) FROM example_table;次の結果が返されます。
regr_sxx ---------- 9.68
REGR_SXY
説明: 独立変数 (X) と従属変数 (Y) の積の和を
sum(X × Y) - sum(X) × sum(Y)/Nとして計算します。REGR_SXY(Y, X)パラメーター
Y および X: 必須。DOUBLE PRECISION、FLOAT、または FLOAT8 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT REGR_SXY(c6, c7) FROM example_table;次の結果が返されます。
regr_sxy -------------------- 7.105427357601e-15
SUM
説明: BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 式からすべての値の合計を計算します。
SUM(expression)パラメーター
expression: 必須。BIGINT、FLOAT8、FLOAT4、INT、または NUMERIC 式。
戻り値
戻り値はパラメーターと同じデータ型です。
例
SELECT SUM(c1) FROM example_table;次の結果が返されます。
sum ----- 3
STDDEV
説明: INT、NUMERIC、または FLOAT8 式によって返される値のサンプル標準偏差を計算します。
STDDEV(expression)パラメーター
expression: 必須。INT、NUMERIC、または FLOAT8 式。
戻り値
NUMERIC または FLOAT8 型の値を返します。
例
SELECT STDDEV(c1) FROM example_table;次の結果が返されます。
stddev -------------- 0.7071067811
STDDEV_POP
説明: INT、NUMERIC、または FLOAT8 式によって返される値の母集団標準偏差を計算します。
STDDEV_POP(expression)パラメーター
expression: 必須。INT、NUMERIC、または FLOAT8 式。
戻り値
NUMERIC または FLOAT8 型の値を返します。
例
SELECT STDDEV_POP(c1) FROM example_table;次の結果が返されます。
stddev_pop -------------- 0.5000000000
STDDEV_SAMP
説明: INT、NUMERIC、または FLOAT8 式によって返される値のサンプル標準偏差を計算します。
STDDEV_SAMP(expression)パラメーター
expression: 必須。INT、NUMERIC、または FLOAT8 式。
戻り値
NUMERIC または FLOAT8 型の値を返します。
例
SELECT STDDEV_SAMP(c1) FROM example_table;次の結果が返されます。
stddev_samp -------------- 0.7071067812
STRING_AGG
説明: TEXT 式によって返される NULL 以外の値を、指定された区切り文字を使用して文字列に連結します。
STRING_AGG(<expression> TEXT, <delimiter> TEXT)パラメーター
expression: 必須。ソース文字列。
delimiter: 必須。区切り文字。
戻り値
TEXT 型の値を返します。
例
SELECT STRING_AGG(c5, '-') FROM example_table;次の結果が返されます。
string_agg ------------ 3-4
UNIQ
説明: 列内の個別値を持つ行の数を計算します。
UNIQ ( < column > );パラメーター
column: 必須。個別値を持つ行の数を計算する列を指定します。この列は、SMALLINT、INTEGER、BIGINT、REAL、DOUBLE PRECISION、TEXT、VARCHAR、TIMESTAMP、TIMESTAMPTZ、DATE、TIMETZ、および UUID のデータ型にすることができます。
使用上の注意
UNIQ 関数は、Hologres V1.3 以降でのみサポートされています。
説明インスタンスのバージョンが V1.3 より前の場合、「アップグレード準備時の一般的なエラー」をご参照いただくか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「オンラインサポートの利用方法」をご参照ください。
UNIQ 関数は、SQL 文に GROUP BY 句が含まれ、GROUP BY フィールドの値がデータスキューなしで均等に分散されている場合にのみ、COUNT DISTINCT 関数よりも優れたパフォーマンスを発揮します。
通常、UNIQ は GROUP BY キーのカーディナリティが高い場合に COUNT DISTINCT よりも優れたパフォーマンスを発揮します。UNIQ は COUNT DISTINCT よりもメモリ消費量も少なくなります。COUNT DISTINCT を使用するときにメモリ不足エラーが発生した場合は、代替として UNIQ を使用できます。
Hologres V2.1 以降、COUNT DISTINCT のパフォーマンスは、単一または複数の COUNT DISTINCT 関数、データスキュー、または GROUP BY 句のない SQL 文を含むさまざまなシナリオで大幅に最適化されています。パフォーマンスを向上させるためにクエリを手動で UNIQ を使用するように書き換える必要はなくなりました。詳細については、「Count Distinct の最適化」をご参照ください。
例
次の例では、MaxCompute が提供する TPC-H パブリックデータセットの ORDERS テーブルを使用します。追加の準備なしで、次の SQL 文を直接実行できます。
-- 外部テーブルを作成します。 IMPORT FOREIGN SCHEMA public_data LIMIT TO (ORDERS_10g) FROM SERVER odps_server INTO public options (if_table_exist 'update'); -- 内部テーブルを作成します。 BEGIN; CREATE TABLE ORDERS ( O_ORDERKEY bigint NOT NULL PRIMARY KEY, O_CUSTKEY int NOT NULL, O_ORDERSTATUS text NOT NULL, O_TOTALPRICE DECIMAL(12, 2) NOT NULL, O_ORDERDATE timestamptz NOT NULL, O_ORDERPRIORITY text NOT NULL, O_CLERK text NOT NULL, O_SHIPPRIORITY int NOT NULL, O_COMMENT text NOT NULL ); CALL set_table_property ('ORDERS', 'segment_key', 'O_ORDERDATE'); CALL set_table_property ('ORDERS', 'distribution_key', 'O_ORDERKEY'); CALL set_table_property ('ORDERS', 'bitmap_columns', 'O_ORDERKEY,O_CUSTKEY,O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY,O_COMMENT'); CALL set_table_property ('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_COMMENT'); COMMENT ON COLUMN ORDERS.O_ORDERKEY IS '注文 ID'; COMMENT ON COLUMN ORDERS.O_CUSTKEY IS '顧客 ID'; COMMENT ON COLUMN ORDERS.O_ORDERSTATUS IS '注文ステータス'; COMMENT ON COLUMN ORDERS.O_TOTALPRICE IS '合計価格'; COMMENT ON COLUMN ORDERS.O_ORDERDATE IS '注文日'; COMMENT ON COLUMN ORDERS.O_ORDERPRIORITY IS '注文優先度'; COMMENT ON COLUMN ORDERS.O_CLERK IS 'レジ係'; COMMENT ON COLUMN ORDERS.O_SHIPPRIORITY IS '配送優先度'; COMMENT ON COLUMN ORDERS.O_COMMENT IS 'コメント'; COMMIT; -- 内部テーブルにデータをインポートします。 INSERT INTO ORDERS SELECT * FROM ORDERS_10g;ORDERS テーブルの O_CUSTKEY 列の個別行の数を計算します。
SELECT UNIQ ( O_CUSTKEY ) FROM ORDERS;次の結果が返されます。
uniq -------- 999982ORDERS テーブルの各 O_ORDERSTATUS の個別の O_CUSTKEY 値の数を計算します。
SELECT O_ORDERSTATUS, UNIQ ( O_CUSTKEY ) FROM ORDERS GROUP BY O_ORDERSTATUS;次の結果が返されます。
o_orderstatus | uniq ---------------+-------- P | 313478 F | 996258 O | 996400
VARIANCE
説明: INT または NUMERIC 式によって返される値のサンプル分散を計算します。
VARIANCE(expression)パラメーター
expression: 必須。INT または NUMERIC 式。
戻り値
NUMERIC 型の値を返します。
例
SELECT VARIANCE(c1) FROM example_table;次の結果が返されます。
variance -------------- 0.5000000000
VAR_POP
説明: FLOAT8、INT、または NUMERIC 式によって返される値の母集団分散を計算します。
VAR_POP(expression)パラメーター
expression: 必須。FLOAT8、INT、または NUMERIC 式。
戻り値
NUMERIC または FLOAT8 型の値を返します。
例
SELECT VAR_POP(c1) FROM example_table;次の結果が返されます。
var_pop -------------- 0.2500000000
VAR_SAMP
説明: INT、FLOAT8、または NUMERIC 式によって返される値のサンプル分散を計算します。
VAR_SAMP(expression)パラメーター
expression: 必須。INT、FLOAT8、または NUMERIC 式。
戻り値
NUMERIC または FLOAT8 型の値を返します。
例
SELECT VAR_SAMP(c1) FROM example_table;次の結果が返されます。
var_samp -------------- 0.5000000000