У меня есть одна таблица (A) с фразой, а другая (B) - это фраза, которую я хочу найти фразой WITHIN table A. Поэтому я присоединяюсь к их следующим образом:Оптимизируйте соединение с регулярным выражением
Create table C as
SELECT A.*
FROM A
JOIN B
where (A.phrase LIKE concat("%",B.phrase,"%"));
Это занимает много времени, потому что это только с помощью одного редуктора, и я считаю, что это связано с характером запроса? Есть ли способ ускорить это? Я не думаю, что mapjoin или bucketjoin помогли бы, потому что я не приравниваю два столбца, а скорее ищу в одной таблице слова из другой таблицы ...
Я нашел решение. Проблема заключалась в том, что Hive не делает un equi хорошо соединяется. Таким образом, я сделал equi, чтобы получить подмножество таблицы A, прежде чем я сделал регулярное выражение un equi join. Итак, 3 шага. 1) Перерыв A.phrase и B.phrase в отдельные слова. 2) Обозначьте эти слова, чтобы увидеть, какие ключевые слова из B.phrase равны любым ключевым словам из A.phrase - это дает подмножество таблицы A, где A.phrase содержит по крайней мере одно ключевое слово из B.phrase. 3) Используйте эту таблицу. Подмножество, чтобы найти весь «% B.phrase%». – maia
Спасибо за обновление! Пожалуйста, опубликуйте это как ответ, чтобы облегчить другим пользователям поиск вашего решения. – JDB