У меня есть таблица, которая выглядит примерно так (столбец 1 - это URL, столбец 2 - идентификатор действия, а столбец 3 - идентификатор пользователя):
1 2 3
===========
d x a
d q a
e y a
f z a
f z b
d i b
e x b
d i c
g q c
o q c
f q c
Я пытаюсь проверитьи посмотрите, есть ли строки, где col1 = 'f'.
Если col1 = 'f', мне нужно получить userID из col3, а затем проверить все строки, где col3 = userID, чтобы увидеть, есть ли строки, где col2 = 'x'.
Если есть какие-либо userID, у которых есть строка с col1 = 'f' и строка с col2 = 'x', верните все строки с userID в col3
Я улей/ sql noob, но вот некоторый код на python, который, я думаю, достиг бы того, что я пытаюсь сделать ...
df = pd.DataFrame(table)
df2 = df[df['1'].str.contains('f')]
df2['check'] = df2['2'].str.contains('x')
ids = df2[df2['check']]
df = df[df['3'].isin(ids)]
Результат моего желаемого запроса вернет
1 2 3
===========
d x a
d q a
e y a
f z a
f z b
d i b
e x b
На данный момент самое близкое, что я получил, это:
SELECT * FROM log AS a
WHERE a.3 in
(
SELECT DISTINCT 3
FROM log
WHERE ((to_date(log_date)) >= (date_sub(current_date, 1)))
AND 1 = 'f'
)
Это дает мне половину пути, но он не фильтрует по col2 и требует необычайно долгого времени для запуска, что может привести к сбою в работе.мое окружение.
Есть ли способ сделать это, используя только Hive / Spark?Я действительно не хочу загружать этот файл и запускать на нем скрипт Python, так как он занимает несколько ГБ, а мой офисный Wi-Fi работает медленно: (