适用于:
Databricks Runtime 19.0 及更高版本
重要
此功能在 Beta 版中。 工作区管理员可以从 预览 页控制对此功能的访问。 请参阅 Manage Azure Databricks 预览版。
返回 true 是否 search_pattern 在任何提供的目标列值中找到。
有关使用全文搜索索引加速 search 查询的信息,请参阅 Unity 目录托管表上的全文搜索索引。
Syntax
search ( column [, ...], search_pattern [, mode => mode] )
Arguments
column:一个或多个可搜索的目标表达式。 可搜索表达式具有以下类型之一:-
STRING使用UTF8_BINARY排序规则。 -
VARIANT。 -
STRUCT至少有一个可搜索字段。 结构会自动扩展到任何嵌套深度处的可搜索叶字段。 -
ARRAY任何可搜索类型。
非字符串目标值没有隐式强制转换。
-
search_pattern:具有要搜索的值的可折叠(常量)STRING表达式。mode:一个可选的命名STRING参数,用于控制如何执行匹配。 下列其中一项:-
'substring'(默认值):如果search_pattern出现在目标值中的任何位置,则匹配。 等效于contains函数。 -
'word':根据目标值匹配各个单词search_pattern,而不考虑顺序。
-
Returns
BOOLEAN。
-
true如果在search_pattern任何目标列值中找到。 -
NULL如果在search_pattern任何目标列值中找不到,则至少有一个值是NULL。 - 否则为
false。
Notes
-
isearch函数 是不区分大小写的变体,search具有其他相同行为。 - 对于参数
STRUCT,该函数搜索可从顶层结构访问的每个可搜索叶字段,而不考虑嵌套深度。 相同的扩展以递归方式应用于STRUCT字段VARIANT和ARRAY值。 - 在
'substring'模式下,VARIANT键和非字符串标量值在一个VARIANT内部不匹配。 使用'word'模式或提取单个字段来搜索这些字段。
常见错误条件
示例
-- 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]