ОБЪЕДИНЕНИЕ ВСЕХ подзапросов с синтаксической ошибкой, генерирующей СОЕДИНЕНИЕ

#sql #hive #hiveql

#sql #улей #hiveql

Вопрос:

Я пытаюсь получить данные из 3 таблиц, затем присоединиться к этому результирующему набору следующим образом:

 SELECT     r.region, 
           r.recordtype,
           i.entity,
           COUNT(i.requestid) AS responses 
FROM       ( 
                  SELECT region, 
                         recordtype,
                         entity, 
                         requestid 
                  FROM   ( 
                                SELECT region, 
                                       'a' AS recordtype,
                                       requestid 
                                FROM   db.table1 
                                UNION ALL 
                                SELECT region, 
                                       'b' AS recordtype,
                                       requestid 
                                FROM   db.table2
                                UNION ALL 
                                SELECT region, 
                                       'c' AS recordtype,
                                       requestid 
                                FROM   db.table3 
                         ) union_results
           ) r 
RIGHT JOIN db.responses i 
ON         r.requestid = i.requestid 
GROUP BY   r.recordtype, 
           r.region,
           i.entity
  

То, что я в конечном итоге ищу, является результатом строк, в которых i.requestid находится в результате объединения трех других таблиц, которые затем сгруппированы, как показано, и хотя я даже не уверен, что я правильно использую RIGHT JOIN, я получаю ошибку в основном запросе.

запрашивает таблицу 1 (a)

 requestid  region
abcdef  us
bcdefg  eu
cdefgh  eu
  

запрашивает таблицу 2 (b)

 requestid  region
fghijk  eu
rstuwx  eu
jklmno  eu
  

запрашивает таблицу 3 (c)

 requestid  region
klmnop  eu
ghijkl  eu
opqrst  eu
  

ответы

 requestid  entity
abcdef  1
rstuwx  3
ghijkl  5
opqrst  5
  

Результат

 region  entity  recordtype  count(responses)
us  1  a  1
eu  3  b  1
eu  5  c  2
  

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

СБОЙ: строка ParseException 4: 6 не может распознать ввод рядом с ‘(‘ ‘ВЫБЕРИТЕ’ ‘регион’ в команде joinSource, завершающейся с ret ’64’

Спасибо!

Комментарии:

1. Почему у вас есть 3 таких похожих таблицы?

2. Если вы удалите db.responses ( i ) из своего запроса и все ссылки на него, это сработает?

3. Я бы попробовал GROUP BY r.region, r.recordtype , когда другая проблема будет исправлена.

4. Создайте представление для части UNION ALL. ОБЪЕДИНИТЕ его и СГРУППИРУЙТЕ ПО.

5. Я провел быстрый тест с объединением, присоединенным к ответам с группировкой и без ошибок. Отредактируйте вопрос, чтобы отобразить образцы данных и желаемый результат в виде текстовых таблиц.

Ответ №1:

Этот запрос сработал для меня:

 SELECT r.region, r.recordtype, entity, Count(responses.requestid) AS responses FROM
(SELECT region, "a" AS recordtype, requestid FROM Table1
 UNION ALL SELECT region, "b", requestid FROM Table2
 UNION ALL SELECT region, "c", requestid FROM Table3) AS r
RIGHT JOIN responses ON r.requestid=responses.requestid
GROUP BY recordtype, region, entity;
  

Комментарии:

1. Спасибо — используя тот же запрос, я по-прежнему получаю ту же ошибку, поэтому, похоже, она не связана с промежуточным запросом: cannot recognize input near '(' 'SELECT' 'region' in joinSource . Я в тупике.

2. Хорошо, я должен упомянуть, что я использую Access, поэтому должно быть что-то о HiveQL. Попробуйте заключить в квадратные скобки все имена объектов: [region] .

3. Та же проблема, извините. Я выбрал * на внешнем и тоже удалил группу by. Я читал о том, что HiveQL не поддерживает связанные подзапросы, но я не думаю, что здесь дело в этом.

4. Я не могу воспроизвести проблему, поэтому не могу предложить решение.