APPROX_COUNT_DISTINCT_DETAIL
目的
APPROX_COUNT_DISTINCT_DETAIL
は、exprに対して個別値を含む行の概数に関する情報を計算して、詳細と呼ばれるBLOB値を戻し、ここにはその情報が特殊な形式で含まれます。
expr
では、BFILE
、BLOB
、CLOB
、LONG
、LONG
RAW
またはNCLOB
以外のスカラー・データ型の列を指定できます。このファンクションでは、expr
の値がNULLの行は無視されます。
通常、このファンクションはGROUP
BY
句とともにSELECT
文で使用されます。このように使用すると、行の各グループ内のexpr
に対する個別値の近似カウント情報が計算され、グループごとに単一の詳細が戻されます。
APPROX_COUNT_DISTINCT_DETAIL
によって戻される詳細は、APPROX_COUNT_DISTINCT_AGG
ファンクションへの入力として使用して詳細の集計を実行したり、TO_APPROX_COUNT_DISTINCT
ファンクションへの入力として使用して詳細を判読可能な異なるカウント値に変換できます。これらの3つのファンクションを一緒に使用すると、リソースを大量に使用する近似カウント計算を1回実行し、生成された詳細を格納した後、これらの詳細に対して効率的に集計と問合せを実行できます。たとえば:
-
APPROX_COUNT_DISTINCT_DETAIL
ファンクションを使用して、個別値の近似カウント情報を計算し、生成される詳細を表またはマテリアライズド・ビューに格納します。これらは、市区町村の人口統計カウントや日次販売カウントなど、粒度の高い詳細にできます。 -
APPROX_COUNT_DISTINCT_AGG
ファンクションを使用して、前のステップで取得した詳細を集計し、生成される詳細を表またはマテリアライズド・ビューに格納します。これらは、都道府県の人口統計カウントや月次販売カウントなど、粒度のより低い詳細にできます。 -
TO_APPROX_COUNT_DISTINCT
ファンクションを使用して、格納した詳細値を判読可能なNUMBER
値に変換します。TO_APPROX_COUNT_DISTINCT
ファンクションを使用すると、APPROX_COUNT_DISTINCT_DETAIL
ファンクションまたはAPPROX_COUNT_DISTNCT_AGG
ファンクションによって作成された詳細値を問い合せることができます。
例
この項の例では、APPROX_COUNT_DISTINCT_DETAIL
、APPROX_COUNT_DISTINCT_AGG
およびTO_APPROX_COUNT_DISTINCT
ファンクションを一緒に使用して、リソースを大量に使用する近似カウント計算を1回実行し、生成された詳細を格納した後、これらの詳細に対して効率的に集計と問合せを実行する方法を示します。
APPROX_COUNT_DISTINCT_DETAIL: 例
次の文は、表sh
.times
およびsh
.sales
に対して、各日に販売された異なる製品の概数を問い合せます。APPROX_COUNT_DISTINCT_DETAIL
ファンクションは、該当する製品が販売された各日について、daily_detail
という詳細な情報を戻します。戻された詳細は、daily_prod_count_mv
というマテリアライズド・ビューに格納されます。
CREATE MATERIALIZED VIEW daily_prod_count_mv AS SELECT t.calendar_year year, t.calendar_month_number month, t.day_number_in_month day, APPROX_COUNT_DISTINCT_DETAIL(s.prod_id) daily_detail FROM times t, sales s WHERE t.time_id = s.time_id GROUP BY t.calendar_year, t.calendar_month_number, t.day_number_in_month;
APPROX_COUNT_DISTINCT_AGG: 例
次の文は、APPROX_COUNT_DISTINCT_AGG
ファンクションを使用して、daily_prod_count_mv
に格納されている日次詳細を読み取り、各月に販売された異なる製品の概数を含む集計された詳細を作成します。これらの集計された詳細は、monthly_prod_count_mv
というマテリアライズド・ビューに格納されます。
CREATE MATERIALIZED VIEW monthly_prod_count_mv AS SELECT year, month, APPROX_COUNT_DISTINCT_AGG(daily_detail) monthly_detail FROM daily_prod_count_mv GROUP BY year, month;
次の文は、各年に販売された異なる製品の概数を含む、集計された詳細を作成することを除き、前の文と似ています。これらの集計された詳細は、annual_prod_count_mv
というマテリアライズド・ビューに格納されます。
CREATE MATERIALIZED VIEW annual_prod_count_mv AS SELECT year, APPROX_COUNT_DISTINCT_AGG(daily_detail) annual_detail FROM daily_prod_count_mv GROUP BY year;
TO_APPROX_COUNT_DISTINCT: 例
次の文は、TO_APPROX_COUNT_DISTINCT
ファンクションを使用して、daily_prod_count_mv
に格納されている日次詳細情報を問い合せて、各日に販売された異なる製品の概数を戻します。
SELECT year,
month,
day,
TO_APPROX_COUNT_DISTINCT(daily_detail) "NUM PRODUCTS"
FROM daily_prod_count_mv
ORDER BY year, month, day;
YEAR MONTH DAY NUM PRODUCTS
---------- ---------- ---------- ------------
1998 1 1 24
1998 1 2 25
1998 1 3 11
1998 1 4 34
1998 1 5 10
1998 1 6 8
1998 1 7 37
1998 1 8 26
1998 1 9 25
1998 1 10 38
. . .
次の文は、TO_APPROX_COUNT_DISTINCT
ファンクションを使用して、monthly_prod_count_mv
に格納されている月次詳細情報を問い合せて、各月に販売された異なる製品の概数を戻します。
SELECT year,
month,
TO_APPROX_COUNT_DISTINCT(monthly_detail) "NUM PRODUCTS"
FROM monthly_prod_count_mv
ORDER BY year, month;
YEAR MONTH NUM PRODUCTS
---------- ---------- ------------
1998 1 57
1998 2 56
1998 3 55
1998 4 49
1998 5 49
1998 6 48
1998 7 54
1998 8 56
1998 9 55
1998 10 57
. . .
次の文は、TO_APPROX_COUNT_DISTINCT
ファンクションを使用して、annual_prod_count_mv
に格納されている年次詳細情報を問い合せて、各年に販売された異なる製品の概数を戻します。
SELECT year,
TO_APPROX_COUNT_DISTINCT(annual_detail) "NUM PRODUCTS"
FROM annual_prod_count_mv
ORDER BY year;
YEAR NUM PRODUCTS
---------- ------------
1998 60
1999 72
2000 72
2001 71