Получайте сообщение об ошибке при создании сводной таблицы в SQL - PullRequest
1 голос
/ 27 октября 2019

У меня возникают трудности при создании сводной таблицы из таблицы данных в SQL, так как я продолжаю получать одно и то же сообщение об ошибке и не понимаю, почему.

Моя исходная таблица имеет следующую форму (япросто отфильтруйте те, которые я буду использовать):

== ID == | == Category == | == Description == | == ...
   ID1   |   Category_A   |   Description_1   |   ...
   ID2   |   Category_B   |   Description_2   |   ...
   ID3   |   Category_C   |   Description_3   |   ...
   ID3   |   Category_A   |   Description_4   |   ...
   ID1   |   Category_B   |   Description_2   |   ...
   ID4   |   Category_C   |   Description_3   |   ...
   ID5   |   Category_A   |   Description_1   |   ...
   ID2   |   Category_A   |   Description_1   |   ...
   ID2   |   Category_A   |   Description_4   |   ...
   ID5   |   Category_B   |   Description_2   |   ...
   ID4   |   Category_B   |   Description_6   |   ...
   ID4   |   Category_C   |   Description_7   |   ...

Это таблица, в которой каждая строка представляет описание события для определенного идентификатора. Существует много описаний событий для данного идентификатора, поэтому идентификатор может появляться в нескольких строках. Столбец Категория - это просто категория описания события.

Из этой таблицы моя конечная цель - получить что-то вроде этого:

== ID == | == Description_1 == | == Description_2 == | == Description_3 == | = ...
   ID1   |         1           |          2          |         2
   ID2   |         0           |          1          |         1
   ID3   |         2           |          0          |         1
   ID4   |         0           |          1          |         2
   ID5   |         0           |          3          |         0

Существуют тысячи различных идентификаторов и сотниразных описаний.

Вот код, который я пробовал:

WITH agg_table AS (
  SELECT ID, Description, COUNT(*) as description_count
  FROM original_table
  WHERE Category IN ('Category_A', 'Category_B', 'Category_D')
  GROUP BY ID, Description
  ORDER BY ID
)
SELECT *
FROM agg_table 
PIVOT (
      SUM(description_count) 
      FOR Description IN (SELECT DISTINCT Description
                          FROM original_table
                          WHERE Category IN ('Category_A', 'Category_B', 'Category_D'))
) AS pivot_table

Из исходной таблицы я группирую по идентификатору и описанию, чтобы получить таблицу из 3 столбцов, где в каждой строке указано количество разописание конкретного события происходит для определенного идентификатора (я также фильтрую, чтобы получить только определенные категории ..). Затем я использую функцию pivot, чтобы повернуть таблицу и получить то, что я хотел бы получить: таблицу, в которой у меня есть одна строка для каждого идентификатора, и каждый столбец представляет событие описания со значением ячейки, указывающей, сколько раз происходит описаниедля данного идентификатора.

Проблема в том, что я получаю следующее сообщение об ошибке:

Error in SQL statement: ParseException: mismatched input 'FROM' expecting <EOF>(line 1, pos 9)

Я действительно не знаю, в чем проблема в коде. Я где-то читал, что это может быть вызвано псевдонимами, но даже без написания псевдонимов у меня все еще есть проблема.

Не знаю, как это повлияет на мой случай, но я использую блоки данных с Spark 2.4.3, Scala 2.11

Заранее спасибо за ваше время. И, пожалуйста, дайте мне знать, если что-то неясно, чтобы я мог привести больше деталей.

Хорошего дня!

...