SQL LIKE
Оператор LIKE помогает легко сопоставлять, находить и фильтровать строковые значения по заданному шаблону с использованием SQL-символов подстановки. Важно отметить, что шаблон, передаваемый в оператор LIKE, чувствителен к регистру, в отличие от его нечувствительного к регистру аналога, ILIKE.
Как использовать оператор SQL LIKE
Оператор LIKE имеет простой синтаксис и может использоваться в WHERE-условиях или в case-выражениях:
where <field_name> like '<pattern>' или case when <field_name> like '<pattern>'
Некоторые заметки о синтаксисе и функциональности этого оператора:
<pattern>может использовать два SQL-символа подстановки (%и_); подчеркивание соответствует любому одному символу, а % соответствует нулю или более символам- Пример: '%J' = любая строка, заканчивающаяся на заглавную J
- Пример: 'J%' = любая строка, начинающаяся с заглавной J
- Пример: 'J%L' = любая строка, начинающаяся с заглавной J и заканчивающаяся заглавной L
- Пример: '_J%' = любая строка, в которой заглавная J находится на второй позиции
- В большинстве случаев использования оператора LIKE, вероятно, будет задействован символ подстановки
% - Оператор LIKE чувствителен к регистру, что означает, что регистр в
<pattern>, который вы хотите отфильтровать, должен совпадать с регистром в значениях вашего столбца; для столбцов с различным регистром используйте нечувствительный к регистру оператор ILIKE - Оператор LIKE может быть использован с оператором NOT, чтобы фильтровать строки, которые не соответствуют заданному шаблону
Давайте теперь рассмотрим практический пример использования оператора LIKE.
Пример SQL LIKE
select
user_id,
first_name
from {{ ref('customers') }}
where first_name like 'J%'
order by 1
Этот простой запрос, использующий таблицу customers из Jaffle Shop, вернет всех клиентов, чье имя начинается с заглавной буквы J:
| customer_id | first_name |
|---|---|
| 1 | Julia |
| 4 | Jeremy |
Поскольку LIKE чувствителен к регистру, он не вернет результаты в этом запросе для клиентов с именами, начинающимися с маленькой буквы j. Если в ваших данных есть смесь строк с заглавными и строчными буквами, рассмотрите возможность стандартизации регистра строк с помощью функций UPPER и LOWER или используйте более гибкий оператор ILIKE.
Синтаксис LIKE в Snowflake, Databricks, BigQuery и Redshift
Большинство современных хранилищ данных поддерживают оператор LIKE, и синтаксис также одинаков для них. Некоторые хранилища данных, такие как Snowflake и Databricks, дополнительно поддерживают аналогичные или более гибкие операторы, такие как ILIKE, нечувствительная к регистру версия LIKE, или LIKE ANY, который позволяет передавать несколько вариантов шаблона для поиска.
Используйте таблицу ниже, чтобы узнать больше о документации по оператору LIKE в вашем хранилище данных.
| Хранилище данных | Поддержка LIKE? |
|---|---|
| Snowflake | ✅ |
| Databricks | ✅ |
| Amazon Redshift | ✅ |
| Google BigQuery | ✅ |
Примеры использования оператора LIKE
Вы можете увидеть использование оператора LIKE в аналитической инженерии для:
- Группировки значений столбцов на основе общих требований с использованием case-вы ражений и оператора LIKE (например,
case when page_path like '/product%' then 'product_page' else 'non_product_page') - Фильтрации записей электронной почты сотрудников на основе схожего шаблона адреса электронной почты (например,
where email_address not like '%@dbtlabs.com')
Это не исчерпывающий список того, где ваша команда может использовать оператор LIKE в ваших dbt-моделях, но он содержит некоторые общие сценарии, с которыми аналитические инженеры сталкиваются ежедневно.