search 関数

適用対象:はい Databricks Runtime 19.0 以降とマークされているチェック

重要

この機能は ベータ版です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。

指定されたターゲット列の値のいずれかにsearch_patternが見つかった場合は、trueを返します。

フルテキスト検索インデックスを使用した search クエリの高速化については、 Unity カタログのマネージド テーブルでのフルテキスト検索インデックスを参照してください。

Syntax

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

引数

  • column: 1 つ以上の検索可能なターゲット式。 検索可能な式には、次のいずれかの種類があります。

    • STRING UTF8_BINARY照合順序を使用します。
    • VARIANT
    • STRUCT 少なくとも 1 つの検索可能なフィールドが含まれます。 構造体は、任意の入れ子の深さで、検索可能なリーフ フィールドに自動的に展開されます。
    • ARRAY 任意の検索可能な型。

    文字列以外のターゲット値には暗黙的なキャストはありません。

  • search_pattern: 検索する値を持つ折りたたみ式 (定数) STRING 式。

  • mode: 一致 STRING 実行方法を制御する省略可能な名前付き引数。 つぎのいずれかです。

    • 'substring' (既定値): ターゲット値内の任意の場所 search_pattern 表示される場合に一致します。 contains関数と同等です。
    • 'word': 順序に関係なく、 search_pattern 内の個々の単語をターゲット値と照合します。

返品

BOOLEAN です。

  • ターゲット列の値のいずれかに が見つかった場合は &。
  • NULL ターゲット列の値に search_pattern が見つからず、それらの値の少なくとも 1 つが NULL場合。
  • false それ以外の場合。

Notes

  • isearch 関数 は、大文字と小文字を区別しない search のバリアントで、それ以外の場合は同じ動作です。
  • STRUCT引数の場合、関数は、入れ子の深さに関係なく、最上位の構造体から到達可能なすべての検索可能なリーフ フィールドを検索します。 同じ拡張は、VARIANT値とARRAY値内のSTRUCTフィールドに再帰的に適用されます。
  • 'substring' モードでは、VARIANT内のVARIANT キーと文字列以外のスカラー値は一致しません。 'word'モードを使用するか、個々のフィールドを抽出して検索します。

一般的なエラー状態

Examples

-- Basic examples.
> 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, lower('NEEDLE')) FROM VALUES ('needle') AS table(column);
 true

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

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

-- Automatic expansion of STRUCT columns to their searchable leaf fields.
> CREATE TABLE test_table (
    usage_stats STRUCT<digits: INT>,
    customer_info STRUCT<
      contact: STRUCT<json_field: VARIANT>,
      name: STRING>)
  USING DELTA;

> SELECT * FROM test_table WHERE search(usage_stats.digits, 'needle');
 [DATATYPE_MISMATCH.UNEXPECTED_INPUT_TYPE]

> SELECT * FROM test_table WHERE search(customer_info, 'needle');
-- Equivalent to:
> SELECT * FROM test_table
  WHERE search(customer_info.contact.json_field, customer_info.name, 'needle');

> SELECT * FROM test_table WHERE search(customer_info.contact, 'needle');
-- Equivalent to:
> SELECT * FROM test_table
  WHERE search(customer_info.contact.json_field, 'needle');

-- VARIANT behavior: substring mode does not match keys or non-string scalar values.
> 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

> SELECT search(column, '101', mode => 'substring') FROM test_table;
 false

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

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

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