Разница между% против * в сравнении строк в Hive - PullRequest
1 голос
/ 22 марта 2020

При попытке перечислить все имена таблиц в базе данных с указанным c форматом имени, следующий запрос работает нормально:

show tables like '*case*';

, в то время как следующее не

show tables like '%case%';

С другой стороны, при сравнении фактических данных внутри строковых столбцов встречается обратный случай

Рабочий запрос:

select column from database.table where column like '%ABC%' limit 5;

Не рабочий запрос:

select column from database.table where column like '*ABC*' limit 5;

В чем разница между двумя операторами * и%?

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

В этом разница между регулярными выражениями и аналогичными шаблонами.

LIKE встроен в язык SQL. Он имеет два подстановочных знака:

  • % представляет любое количество символов, включая ноль.
  • _ представляет ровно один символ.

Регулярные выражения гораздо более гибкие для сопоставления практически с любым шаблоном в строке.

Когда был изобретен SQL, я не думаю, что регулярные выражения широко использовались в компьютерных системах - по крайней мере, люди в IBM, работавшая над реляционными базами данных, возможно, не была знакома с людьми из ATT, которые изобретали Unix.

Регулярные выражения, конечно, намного мощнее, чем шаблоны LIKE. И Hive поддерживает их с помощью оператора RLIKE (и некоторых других функций).

Функциональность SHOW не является стандартной SQL. Поэтому разработчики Hive выбрали более гибкий метод сопоставления с образцом.

0 голосов
/ 22 марта 2020

HiveQL пытается имитировать c SQL, но он не строго следует своим стандартам.

Использование подстановочных знаков относится не к предложению LIKE, а к самому утверждению. SHOW операторы проверяют подстановочные знаки на основе регулярного выражения Java, тогда как когда дело доходит до SELECT операторов, Hive пытается придерживаться проверки SQL подстановочными знаками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...