Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja
Dotyczy:
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,STRINGjaki tekst należy szukać. -
mode:Fakultatywny. Literal nierozróżniającySTRINGwielkość 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 -
truejeśli wzór wyszukiwania odpowiada co najmniej jednej wartości przeszukiwalnej przez ciąg znaków. -
NULLjeśli wzór wyszukiwania nie odpowiada żadnej wartości przeszukiwalnej przez ciąg znaków, a przynajmniej jedna z tych wartości toNULL. -
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' ', podnosiSEARCH_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
- DATATYPE_MISMATCH. UNEXPECTED_INPUT_TYPE
- ZA MAŁO ARGUMENTÓW
- SEARCH_INVALID_WORD_PATTERN
- SEARCH_STAR_ARGUMENT_NOT_ALLOWED
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