[英]Combining COUNT DISTINCT with FILTER - Spark SQL
鑒於下面的兩個表,對於每個數據點,我想計算我們具有值的不同年份的數量。 但是,Spark SQL 不允許組合 COUNT DISTINCT 和 FILTER。
CREATE TABLE datapoints (name STRING);
INSERT INTO
datapoints
VALUES
('Name'),
('Height'),
('Color');
CREATE TABLE entities (datapoint STRING, year INT, value STRING);
INSERT INTO
entities
VALUES
('Name', 2015, 'John'),
('Name', 2015, 'Suzan'),
('Name', 2017, 'Jim'),
('Color', 2015, 'Blue')
SELECT
dp.name,
COUNT(DISTINCT year) FILTER (
WHERE
value IS NOT NULL
) as DPCount
FROM
datapoints as dp
LEFT JOIN entities on datapoint = dp.name
GROUP BY
dp.name
結果是:
SQL 語句出錯:AnalysisException: DISTINCT 和 FILTER 不能同時用於聚合函數; 第 3 行第 2 行
什么是功能等效的有效 Spark SQL 語句? 預期的 output 是(注意“名稱”的重復年份):
姓名 | DP計數 |
---|---|
顏色 | 1 |
高度 | 0 |
姓名 | 2 |
在以下情況下嘗試對不同的情況進行計數:
SELECT
dp.name,
COUNT(DISTINCT case when value is not null then year end) as DPCount
FROM
datapoints as dp
LEFT JOIN entities on datapoint = dp.name
GROUP BY
dp.name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.