Настройка: данные хранятся в hadoop, а запросы - в Impala.
Я пытаюсь создать запрос, который позволяет мне получить информацию о доставке, которую мы видим от наших клиентов (их доставка осуществляетсяколичество всех строк, которые мы видели в нашей базе данных, за данный период. Чтобы сделать это, мне нужно исключить, где мы дважды посчитали строку, поэтому вместо подсчета 2+ строк мы просто считаем1.
Двойной счет в этом случае - это когда 2 столбца имеют одинаковые данные строки.
Пример: в таблице ниже я должен иметь возможность выполнить запрос, поэтому я удаляю строку1 из моего подсчета "C4", так как первые 2 строки имеют совпадающие 2 столбца.
TABLE = table
c1 = string
c2 = bigint
C1 || C2 || C3 || C4
--------------------------
a || 1 || a || 1
a || 1 || a || 1
a || 2 || b || 1
a || 3 || a || 1
a || 4 || b || 1
b || 2 || c || 1
c || 1 || d || 1
c || 2 || d || 1
Текущий запрос, который возвращает все строки:
SELECT c1,
c3,
count(c4) AS 'delivery'
FROM table
WHERE c1 = 'a'
GROUP BY c1, c3
Из того, что я проверил онлайнМне нужно создать подзапрос, чтобы определить эти строки, однако мне не повезло, что я сделал это правильно и вошел в кроличью нору, где я попытался создать новую строку, которая объединяет 2 столбца, как показано ниже:
SELECT
UNIQUE = c2 + cast(c1 as BIGINT)
FROM table
WHERE month = month(now())
Из этой новой строки я собирался просто просмотреть строки, которые были уникальными, но я уверен, что, вероятно, существует аналогичный способ достижения результата, к которому я стремлюсь.
Из приведенного выше примера таблицыЯ бы хотел увидеть следующие результаты:
c1 c3 delivery
a a 2
a b 1
Благодарен за любые рекомендации, которые вы можете предоставить.