fungsi search

Berlaku untuk:check ditandai ya Databricks Runtime 19.0 ke atas

Important

Fitur ini ada di Beta. Admin ruang kerja dapat mengontrol akses ke fitur ini dari halaman Pratinjau . Lihat Kelola Pratinjau Azure Databricks.

Mengembalikan true jika search_pattern ditemukan dalam salah satu nilai kolom target yang disediakan.

Untuk informasi tentang mempercepat search kueri dengan indeks pencarian teks lengkap, lihat Indeks pencarian teks lengkap pada tabel terkelola Katalog Unity.

Syntax

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

Arguments

  • column: Satu atau beberapa ekspresi target yang dapat dicari. Ekspresi yang dapat dicari memiliki salah satu jenis ini:

    • STRING dengan UTF8_BINARY kolatasi.
    • VARIANT.
    • STRUCT dengan setidaknya satu bidang yang dapat dicari. Struktur secara otomatis diperluas ke bidang daun yang dapat dicari pada kedalaman berlapis apa pun.
    • ARRAY dari jenis apa pun yang dapat dicari.

    Tidak ada cast implisit untuk nilai target non-string.

  • search_pattern: Ekspresi yang dapat dilipat (konstanta) STRING dengan nilai untuk dicari.

  • mode: Argumen bernama STRING opsional yang mengontrol bagaimana kecocokan dilakukan. Salah satu dari:

    • 'substring' (default): Cocok jika search_pattern muncul di mana saja dalam nilai target. Setara dengan contains fungsi.
    • 'word': Mencocokkan kata-kata individual dalam search_pattern terhadap nilai target, terlepas dari urutannya.

Returns

BOOLEAN.

  • true jika search_pattern ditemukan di salah satu nilai kolom target.
  • NULL jika search_pattern tidak ditemukan dalam nilai kolom target apa pun dan setidaknya salah satu nilai tersebut adalah NULL.
  • false jika tidak.

Notes

  • isearch fungsi adalah varian search yang tidak peka huruf besar/kecil dengan perilaku yang identik.
  • STRUCT Untuk argumen, fungsi mencari setiap bidang daun yang dapat dicari yang dapat dijangkau dari struktur tingkat atas, terlepas dari kedalaman berlapis. Ekspansi yang sama berlaku secara rekursif untuk STRUCT bidang di dalam VARIANT dan ARRAY nilai.
  • Dalam 'substring' mode, VARIANT kunci dan nilai skalar non-string di dalam VARIANT tidak cocok. Gunakan 'word' mode atau ekstrak bidang individual untuk mencari bidang tersebut.

Kondisi kesalahan umum

Contoh

-- 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]