赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 操作指南
  5. SQL查询
  6. DQL操作
  7. 多元索引数组类型

多元索引数组类型

  • DQL操作
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

多元索引除了提供Long、Double、Boolean、Keyword、Text等基本类型外,还提供了数组类型。数组类型属于附加类型,可以附加在Long、Double、Boolean、Keyword、Text等基本类型之上。使用ARRAY_EXTRACT条件作为SELECT语句中的WHERE子句,您可以使用SELECT语句通过多元索引查询数组类型列的数据。本文介绍如何通过SQL查询功能查询数组类型列的数据。

说明

关于数组类型的更多信息,请参见数组类型。

注意事项

  • SQL查询目前不支持多元索引Geo-point类型列的查询。

  • 要使用数组类型,在数据表中的列数据类型必须为字符串。创建多元索引时,该列的数据类型需要设置为数组元素的实际类型并且开启该列的数组属性。

数据类型映射

数据表中数据类型

多元索引中数据类型

SQL数据类型

字符串

数组元素的实际类型,同时开启该列的数组属性(即在控制台打开对应列的数组选项开关或使用SDK将对应列的IsArray设置为true)

  • VARCHAR(主键)

  • MEDIUMTEXT(预定义列)

前提条件

已创建数据表并写入数据。具体操作,请参见数据表操作和写入数据。

使用流程

如果要使用SQL语句查询数组类型的数据,则需要为数据表创建多元索引并创建多元索引的映射关系,然后使用SQL语句查询数组类型列的数据。

步骤一:创建多元索引

使用数组类型时,您需要在创建多元索引时为所需列开启数组选项。具体操作,请参见创建多元索引。

步骤二:创建多元索引的映射关系

如果要在SQL查询时使用数组类型,则必须创建多元索引的映射关系。关于创建多元索引的映射关系的具体操作,请参见创建多元索引的映射关系。

在CREATE TABLE语句中数组列需要正确设置数组列名和对应的SQL数据类型。在多元索引映射关系时,推荐将数组列定义为MEDIUMTEXT类型。

创建包含数组类型列的多元索引映射关系,SQL示例如下:

CREATE TABLE `test_table__test_table_index`(
    `col_keyword_array` MEDIUMTEXT,   
    `col_long_array` MEDIUMTEXT
) 
ENGINE='searchindex'
ENGINE_ATTRIBUTE='{"index_name":"test_table_index", "table_name":"test_table"}';

步骤三:使用SQL通过多元索引查询数据

通过SQL查询数组类型时需要使用ARRAY_EXTRACT(col_name)函数实现,其中col_name为数组列名。该函数支持与运算符组合使用作为查询条件,例如ARRAY_EXTRACT(col_long_array) = 1。

重要

通过SQL查询数组类型时,不能直接将数组列与运算符组合使用。

假设要使用SQL查询col_long_array数组列的数据,数据表中该列为字符串类型,多元索引中该列类型为Long类型数组,查询条件为数组元素值等于1。SQL示例如下:

SELECT * FROM `test_table__test_table_index` WHERE ARRAY_EXTRACT(col_long_array) = 1; 

使用限制

  • ARRAY_EXTRACT(col_name)函数作为数组查询条件时只能在多元索引映射关系上使用,且只能设置一个数组列参数。该函数只能作为SELECT语句的WHERE子句,不能作为SELECT语句的列表达式,不能用于聚合函数计算,不能进行排序。

  • 数组列可以作为SELECT语句的列名或者列表达式,但不能用于聚合函数计算,不能进行排序。

  • 使用ARRAY_EXTRACT(col_name)函数与运算符组合使用作为查询条件时,不能进行数据类型转换后的计算,请确保数组列对应的数据类型正确。例如长整型数组列col_long_array支持使用array_extract(col_long_array) = 1进行计算,不能使用array_extract(col_long_array) = '1'进行计算。

  • 如果数组元素为Text类型,则需要结合全文检索的text_match()或text_match_phrase()函数使用,例如text_match(array_extract(col_text), "xxx")。关于全文检索的更多信息,请参见全文检索。

使用示例

假设数据表名称为test_table,该表中有col_keyword_array(字符串类型)和col_long_array(字符串类型)两列。

  1. 创建一个多元索引。具体操作,请参见使用控制台创建多元索引或使用SDK创建多元索引。

    多元索引名称为test_table_index,该多元索引包括col_keyword_array(字符串数组类型)和col_long_array(长整型数组类型)两列。

    使用控制台创建多元索引的配置如下图所示。

    image..png

  2. 创建多元索引映射关系。更多信息,请参见创建多元索引的映射关系。

    多元索引映射关系名称为test_table__test_table_index,该映射关系中col_keyword_array和col_long_array列对应的SQL数据类型均为MEDIUMTEXT。

    SQL示例如下:

    CREATE TABLE `test_table__test_table_index`(
        `col_keyword_array` MEDIUMTEXT,   
        `col_long_array` MEDIUMTEXT
    ) 
    ENGINE='searchindex'
    ENGINE_ATTRIBUTE='{"index_name":"test_table_index", "table_name":"test_table"}';

    创建多元索引映射关系后,请执行如下语句获取表中数据。

    SELECT * FROM `test_table__test_table_index`;

    返回结果如下图所示。假设多元索引映射关系test_table__test_table_index有5条数据。

    image..png

  3. 使用SELECT语句查询数据。

    以下示例用于查询col_long_array数组列中有等于1的元素或col_keyword_array数组列中有以"d"开头的元素的数据。

    SELECT * FROM test_table__test_table_index WHERE ARRAY_EXTRACT(col_long_array) = 1 OR ARRAY_EXTRACT(col_keyword_array) like 'd%';

    返回结果如下图所示。

    image..png

相关文章

查询数据 2025-04-22 14:41

执行SELECT语句查询表中数据。 前提条件 如果通过表查询数据,请创建表的映射关系。具体操作,请参见创建表的映射关系。如果通过多元索引查询数据,请创建多元

聚合函数 2025-04-22 14:41

聚合函数一般用于对多行数据的指定字段执行计算并返回统计结果,例如计算总数、平均数、最大值、最小值等。您可以使用SQL语句通过聚合函数统计分析表中的数据。本文介绍使用SQL查询时支持的聚合函数。

全文检索 2025-04-22 14:41

使用匹配查询(TEXT_MATCH)或者短语匹配查询(TEXT_MATCH_PHRASE)条件作为SELECT语句中的WHERE子句,您可以使用SELECT语句通过多元索引查询表中匹配指定字符串的数据,实现全文检索功能。 前提条件</

多元索引数组类型 2025-04-22 14:41

多元索引除了提供Long、Double、Boolean、Keyword、Text等基本类型外,还提供了数组类型。数组类型属于附加类型,可以附加在Long、Double、Boolean、Keyword、Text等基本类型之上。使用ARRAY_EXTRACT条件作为SELECT语句中的WHERE子句,您

多元索引嵌套类型 2025-04-22 14:41

多元索引除了提供Long、Double、Boolean、Keyword、Text等基本类型外,还提供了嵌套类型(Nested)。嵌套类型代表嵌套文档类型。嵌套文档是指对于一行数据(文档)可以包含多个子行(子文档),多个子行保存在一个嵌套类型字段中。本文介绍如何通过SQL查询功能查询嵌套类型的列数据。

多元索引虚拟列 2025-04-22 14:41

使用多元索引虚拟列功能时,您可以通过修改多元索引schema或者新建多元索引来实现新字段新数据类型的查询功能,而无需修改表格存储的存储结构及数据。 说明 关于多元索引虚拟列的更多信息,请参见虚拟列

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号