Funkcja search

Dotyczy:sprawdzanie oznaczone jako tak Databricks Runtime 19.0 lub nowsze

Important

Ta funkcja jest dostępna w wersji beta. Administratorzy obszaru roboczego mogą kontrolować dostęp do tej funkcji ze strony Podglądy . Zobacz Zarządzanie wersjami zapoznawczami usługi Azure Databricks.

Wykonuje wyszukiwanie tekstu w określonych wyrażeniach docelowych.

search jest wariantem isearch funkcji na wielka czy wielka litera o identycznym zachowaniu.

Składnia

search ( expr [, ...], search_pattern [, mode => mode] )

Arguments

  • expr: Wyrażenia, które warto szukać w środku.
  • search_pattern: Stałe wyrażenie wskazujące, STRING jaki tekst należy szukać.
  • mode:Fakultatywny. Literal nierozróżniający STRING wielkość liter, który kontroluje sposób dopasowywania. Prawidłowe wartości to 'substring' i 'word'. Wartość domyślna to 'substring'.

Zwroty

Wartość BOOLEAN wskazującą, czy wzorzec wyszukiwania odpowiada dowolnemu docelowemu wyrażeniu przeszukiwalnemu za pomocą ciągów znaków.

Notes

W substring trybie wzór wyszukiwania jest dosłownie dopasowany. Znaki takie jak ., *, i % nie mają specjalnego znaczenia jako wyrażenie regularne lub znaki dzikie.

Następujące typy są przeszukiwalne za pomocą ciągów znaków:

Typ Przeszukiwalny za pomocą ciągów znaków, gdy
VOID, , STRINGVARIANT Zawsze.
ARRAY Jego wyrażenie potomne jest przeszukiwane za pomocą ciągów znaków.
MAP Jego wyrażenie wartości jest przeszukiwane za pomocą ciągów znaków.
STRUCT Przynajmniej jedno z jego wyrażeń pól jest przeszukiwane za pomocą ciągów znaków.

Dla STRUCT wyrażeń ignoruje search pola, które nie są przeszukiwalne za pomocą ciągów znaków.

Dla VARIANT wyrażeń skanuje tylko ich węzły liściowe, search które mają typ VOID lub STRING.

Wyrażenie search nie przekłada niewyrażeńSTRING na STRING wyrażenia.

Wartość zwrotu ustalana jest następująco:

  • NULLjeśli wzorzec wyszukiwania wynosi .NULL
  • true jeśli wzór wyszukiwania odpowiada co najmniej jednej wartości przeszukiwalnej przez ciąg znaków.
  • NULL jeśli wzór wyszukiwania nie odpowiada żadnej wartości przeszukiwalnej przez ciąg znaków, a przynajmniej jedna z tych wartości to NULL.
  • falsejeśli wzorzec wyszukiwania nie odpowiada żadnej wartości przeszukiwalnej przez ciąg znaków, a żadna z tych wartości nie jest .NULL

Obsługiwane są następujące wartości dla trybu:

  • 'substring': Pasuje, jeśli wzorzec wyszukiwania pojawia się gdziekolwiek w obrębie wartości docelowej. Jest to opcja domyślna.
  • 'word': Wzór wyszukiwania jest podzielony na słowa przy granicach UAX#29 . Tryb ten dopasowuje poszczególne słowa w wzorcu wyszukiwania niezależnie od ich kolejności. Każde słowo wzorcowe odpowiada wartości przeszukiwalnej przez ciąg znaków, jeśli pojawia się w wartości z granicami słów UAX#29 tuż przed i po nim. Wzór, który nie zawiera słów, takich jak '!!!' lub ' ', podnosi SEARCH_INVALID_WORD_PATTERN.

Wydajność search tabeli może skorzystać z gotowego indeksu wyszukiwania pełnego tekstu. Szczegóły można znaleźć w artykule Full-text search indexes on Unity Catalog managed tables (tabele zarządzane katalogiem Unity Catalog ).

Typowe warunki błędów

Examples

-- Basic examples.

-- Substring mode (default).
> SELECT search(column, 'needle', mode => 'substring') FROM VALUES ('Needle') AS table(column);
 false

> SELECT search(column, 'quick fox', mode => 'substring') FROM VALUES ('quick brown fox') AS table(column);
 false

> SELECT search(column, 'foo.bar', mode => 'substring') FROM VALUES ('prefix foo.bar suffix') AS table(column);
 true -- the period is matched literally.

> SELECT search(column, 'foo.bar', mode => 'substring') FROM VALUES ('prefix fooXbar suffix') AS table(column);
 false -- the period does not match an arbitrary character.

> SELECT search(column, '100%', mode => 'substring') FROM VALUES ('100 percent'), ('100%') AS table(column);
 false
 true -- the percent sign is not a wildcard.

> SELECT search(column, lower('NEEDLE')) FROM VALUES ('needle') AS table(column);
 true

-- Word mode.
> SELECT search(column, 'fox quick', mode => 'word') FROM VALUES ('quick brown fox') AS table(column);
 true

> SELECT search(column, 'slow fox', mode => 'word') FROM VALUES ('quick fox') AS table(column);
 false

> SELECT search(column, 'foo*bar', mode => 'word') FROM VALUES ('bar and foo') AS table(column);
 true -- the asterisk separates the pattern words; it is not a wildcard.

-- Examples on a table with a VARIANT column.
> CREATE TABLE test_table AS
    SELECT parse_json('{
      "role": "user",
      "id": 101,
      "preferences": {"theme": "dark", "language": "en"}
    }') AS column;

> SELECT search(column, 'user', mode => 'substring') FROM test_table;
 true

> SELECT search(column, 'preferences', mode => 'substring') FROM test_table;
 false -- only values are searched.

> SELECT search(column, '101', mode => 'substring') FROM test_table;
 false -- no implicit cast to string.

-- NULL behavior.
> SELECT search(NULL, 'needle', mode => 'substring');
 NULL

> SELECT search(CAST(NULL AS STRING), 'needle', mode => 'substring');
 NULL

> SELECT search(CAST(NULL AS INT), 'needle', mode => 'substring');
 false

> SELECT search('needle in haystack', NULL, mode => 'substring');
 NULL

-- Search across multiple columns.
> SELECT search(column1, column2, '123', mode => 'substring')
    FROM VALUES (123, 'needle in haystack') AS table(column1, column2);
 false -- integer column is skipped, no implicit cast to string.

> SELECT search(column1, column2, 'needle', mode => 'substring')
    FROM VALUES (123, 'needle in haystack') AS table(column1, column2);
 true