search Fonction

S’applique à :check marqué oui Databricks Runtime 19.0 et versions ultérieures

Important

Cette fonctionnalité est en version bêta. Les administrateurs d’espace de travail peuvent contrôler l’accès à cette fonctionnalité à partir de la page Aperçus . Consultez Gérer les préversions d’Azure Databricks.

Effectue une recherche de texte dans des expressions cibles spécifiées.

searchest la variante sensible à la casse deisearch fonction avec un comportement par ailleurs identique.

Syntax

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

Arguments

  • expr: Les expressions à chercher à l’intérieur.
  • search_pattern: Une expression constante STRING indiquant le texte à rechercher.
  • mode: facultatif. Un littéral insensible STRING à la majuscule qui contrôle la manière dont le jumelage est effectué. Les valeurs valides sont 'substring' et 'word'. La valeur par défaut est 'substring'.

Returns

Une valeur qui indique si le motif de recherche correspond BOOLEAN à une expression cible recherchante par une chaîne de chaînes.

Notes

En substring mode, le motif de recherche est littéralement correspondu. Les caractères tels que ., *, et % n’ont pas de signification particulière en tant qu’expressions régulières ou caractères jokers.

Les types suivants sont consultables par chaîne de chaînes :

Catégorie Recherche par chaîne lorsque
VOID, STRING, VARIANT Toujours.
ARRAY Son expression enfant est consultable par chaîne de caractères.
MAP Son expression de valeur est consultable par chaîne de caractères.
STRUCT Au moins une de ses expressions de champs est consultable par chaîne de caractères.

Pour les STRUCT expressions, search ignore les champs qui ne sont pas recherchables par chaîne de chaînes.

Pour les VARIANT expressions, search ne scanne que les nœuds feuilles qui sont de type VOID ou STRING.

L’expression search ne jette pas implicitement des non-expressionsSTRING en STRING expressions.

La valeur de retour est déterminée comme suit :

  • NULL si le motif de recherche est NULL.
  • true si le motif de recherche correspond à au moins une valeur cherchable par chaîne.
  • NULL si le motif de recherche ne correspond à aucune valeur cherchable par chaîne, et qu’au moins une de ces valeurs est NULL.
  • false si le motif de recherche ne correspond à aucune valeur cherchable par chaîne, et qu’aucune de ces valeurs n’est NULL.

Les valeurs suivantes sont prises en charge pour ce mode :

  • 'substring': Correspond si le motif de recherche apparaît n’importe où dans la valeur cible. C’est l’option par défaut.
  • 'word': Le schéma de recherche est divisé en mots aux limites de mots UAX#29 . Le mode correspond aux mots individuels du schéma de recherche, quel que soit leur ordre. Chaque mot de type correspond à une valeur cherchable par chaîne si elle apparaît dans la valeur avec les limites UAX#29 juste avant et après. Un motif qui ne contient aucun mot, tel que '!!!' ou ' ', élève SEARCH_INVALID_WORD_PATTERN.

Les search performances sur la table peuvent bénéficier d’un index de recherche en texte intégral préconstruit. Voir les index de recherche en texte intégral sur les tables gérées du catalogue Unity pour plus de détails.

Conditions d’erreur courantes

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