標準 SQL 中的近似 Aggregate 函式

Approximate aggregate 函式在記憶體用量與時間方面具有可調整彈性,但是會產生近似結果,而非確切結果。如需更多背景資訊,請參閱近似匯總

APPROX_COUNT_DISTINCT

APPROX_COUNT_DISTINCT(expression)

說明

傳回 COUNT(DISTINCT expression) 的近似結果。傳回的值是統計估計結果—不一定是實際值。

這個函式的準確度不如 COUNT(DISTINCT expression),但對大量輸入的執行效果較佳。

支援的引數類型

下列項目外的任何資料類型: ARRAY STRUCT

傳回的資料類型

INT64

範例

SELECT APPROX_COUNT_DISTINCT(x) as approx_distinct
FROM UNNEST([0, 1, 1, 2, 3, 5]) as x;

+-----------------+
| approx_distinct |
+-----------------+
| 5               |
+-----------------+

APPROX_QUANTILES

APPROX_QUANTILES([DISTINCT] expression, number [{IGNORE|RESPECT} NULLS])

說明

傳回一組 expression 值的近似邊界,其中 number 代表要建立的分位數數量。這個函式會傳回 number + 1 個元素的陣列,其中第一個元素是近似最小值,最後一個元素是近似最大值。

支援的引數類型

expression 可以是任何支援的資料類型,但下列資料類型除外ARRAY STRUCT

number 必須是 INT64。

選用子句

子句會「以下列順序」套用:

  1. DISTINCTexpression 的每個不同值都只會匯總一次到結果中。

  2. IGNORE NULLSRESPECT NULLS:若指定了 IGNORE NULLS 或任何一項都沒有指定,會從結果中排除 NULL 值。若指定了 RESPECT NULLS,會將 NULL 值包含在結果中 (但是,如果最終查詢結果中包含 NULL 元素,就會產生錯誤)。

傳回的資料類型

expression 參數指定類型的 ARRAY。

如果輸入資料列數為零或 NULL 針對所有資料列評估為 NULL,就會傳回 expression

範例

SELECT APPROX_QUANTILES(x, 2) AS approx_quantiles
FROM UNNEST([NULL, NULL, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10]) AS x;

+------------------+
| approx_quantiles |
+------------------+
| [1, 5, 10]       |
+------------------+

SELECT APPROX_QUANTILES(x, 100)[OFFSET(90)] AS percentile_90
FROM UNNEST([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) AS x;

+---------------+
| percentile_90 |
+---------------+
| 9             |
+---------------+

SELECT APPROX_QUANTILES(DISTINCT x, 2) AS approx_quantiles
FROM UNNEST([NULL, NULL, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10]) AS x;

+------------------+
| approx_quantiles |
+------------------+
| [1, 6, 10]       |
+------------------+

SELECT FORMAT("%T", APPROX_QUANTILES(x, 2 RESPECT NULLS)) AS approx_quantiles
FROM UNNEST([NULL, NULL, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10]) AS x;

+------------------+
| approx_quantiles |
+------------------+
| [NULL, 4, 10]    |
+------------------+

SELECT FORMAT("%T", APPROX_QUANTILES(DISTINCT x, 2 RESPECT NULLS)) AS approx_quantiles
FROM UNNEST([NULL, NULL, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10]) AS x;

+------------------+
| approx_quantiles |
+------------------+
| [NULL, 6, 10]    |
+------------------+

APPROX_TOP_COUNT

APPROX_TOP_COUNT(expression, number)

說明

傳回 expression 的近似最前幾個元素。number 參數指定了傳回的元素數目。

支援的引數類型

expression 可以是 GROUP BY 子句支援的任何資料類型。

number 必須是 INT64。

傳回的資料類型

STRUCT 類型的 ARRAY。STRUCT 包含兩個欄位。第一個欄位 (名為 value) 中包含 input 值。第二個欄位 (名為 count) 中包含指定傳回該值次數的 INT64。

如果輸入資料列數為零,就會傳回 NULL

範例

SELECT APPROX_TOP_COUNT(x, 2) as approx_top_count
FROM UNNEST(["apple", "apple", "pear", "pear", "pear", "banana"]) as x;

+-------------------------+
| approx_top_count        |
+-------------------------+
| [{pear, 3}, {apple, 2}] |
+-------------------------+

NULL 處理

APPROX_TOP_COUNT 不會忽略輸入中的 NULL。例如:

SELECT APPROX_TOP_COUNT(x, 2) as approx_top_count
FROM UNNEST([NULL, "pear", "pear", "pear", "apple", NULL]) as x;

+------------------------+
| approx_top_count       |
+------------------------+
| [{pear, 3}, {NULL, 2}] |
+------------------------+

APPROX_TOP_SUM

APPROX_TOP_SUM(expression, weight, number)

說明

根據指派的 weight 的總和,傳回 expression 的近似最前幾個元素。number 參數指定了傳回的元素數目。

如果 weight 輸入是負數或 NaN,這個函式就會傳回錯誤。

支援的引數類型

expression 可以是 GROUP BY 子句支援的任何資料類型。

weight 必須是下列其中一項:

  • INT64
  • FLOAT64

number 必須是 INT64。

傳回的資料類型

STRUCT 類型的 ARRAY。 STRUCT 包含兩個欄位:valuesumvalue 欄位中包含輸入運算式的值。sum 欄位的類型與 weight 相同,是與 value 欄位相關聯之輸入權重的近似總和。

如果輸入資料列數為零,就會傳回 NULL

範例

SELECT APPROX_TOP_SUM(x, weight, 2) AS approx_top_sum FROM
UNNEST([
  STRUCT("apple" AS x, 3 AS weight),
  ("pear", 2),
  ("apple", 0),
  ("banana", 5),
  ("pear", 4)
]);

+--------------------------+
| approx_top_sum           |
+--------------------------+
| [{pear, 6}, {banana, 5}] |
+--------------------------+

NULL 處理

APPROX_TOP_SUM 不會忽略 expressionweight 參數的 NULL 值。

SELECT APPROX_TOP_SUM(x, weight, 2) AS approx_top_sum FROM
UNNEST([STRUCT("apple" AS x, NULL AS weight), ("pear", 0), ("pear", NULL)]);

+----------------------------+
| approx_top_sum             |
+----------------------------+
| [{pear, 0}, {apple, NULL}] |
+----------------------------+
SELECT APPROX_TOP_SUM(x, weight, 2) AS approx_top_sum FROM
UNNEST([STRUCT("apple" AS x, 0 AS weight), (NULL, 2)]);

+-------------------------+
| approx_top_sum          |
+-------------------------+
| [{NULL, 2}, {apple, 0}] |
+-------------------------+
SELECT APPROX_TOP_SUM(x, weight, 2) AS approx_top_sum FROM
UNNEST([STRUCT("apple" AS x, 0 AS weight), (NULL, NULL)]);

+----------------------------+
| approx_top_sum             |
+----------------------------+
| [{apple, 0}, {NULL, NULL}] |
+----------------------------+
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁