簡體   English   中英

將 COUNT DISTINCT 與 FILTER 結合使用 - Spark SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM