执行CREATE TABLE语句为已存在的表或者多元索引创建映射关系。本文介绍如何为已存在的多元索引创建映射关系。

说明 关于创建表的映射关系的具体操作,请参见创建表的映射关系

背景信息

由于执行CREATE TABLE创建表的映射关系时,数据表可能会包含多种不同的索引类型,当用户使用映射表查询数据时,SQL引擎会自动选择合适的数据表主键查询、二级索引或者多元索引执行查询。为了让用户更清晰地选择指定多元索引执行查询,SQL引擎支持通过CREATE TABLE语句创建指定多元索引的映射关系。

语法

CREATE TABLE [IF NOT EXISTS] user_defined_name(column_name data_type [,column_name data_type])
ENGINE='searchindex',
ENGINE_ATTRIBUTE='{"index_name": index_name, "table_name": table_name}';

参数

参数 是否必选 说明
IF NOT EXISTS 如果指定IF NOT EXISTS,无论表是否存在,均会返回成功;如果未指定IF NOT EXISTS,则只有当表不存在时,才会返回成功。
user_defined_name 多元索引映射表名,用于唯一标识一张SQL绑定表。

后续执行SQL操作时要使用该表名。

column_name 列名。

SQL中的列名必须和原始表中的列名等效,例如原始表中列名为Aa,在SQL中列名必须使用Aa、AA、aA或者aa中的一个。

data_type 列的数据类型,包含BIGINT、DOUBLE、BOOL等多种数据类型。

SQL中列的数据类型必须和原始表中列的数据类型相匹配。关于数据类型映射的更多信息,请参见数据类型映射

ENGINE 使用映射表查询数据时的执行引擎。取值范围如下:
  • tablestore(默认):SQL引擎将自动选择合适的索引执行查询。
  • searchindex:SQL引擎将通过指定的多元索引执行查询。设置为此项时,您必须在ENGINE_ATTRIBUTE中配置index_name和table_name。
ENGINE_ATTRIBUTE 执行引擎的属性,以JSON格式表示。包括如下选项:
  • index_name:多元索引映射表绑定的多元索引名称。只有创建多元索引的映射关系时才需要配置。
  • table_name:多元索引映射表绑定的多元索引所属的数据表名称。只有创建多元索引的映射表时才需要配置。
  • consistency:执行引擎支持的一致性模式。

    创建表的映射关系时,取值范围如下:

    • eventual(默认):执行的查询结果满足最终一致。此时新数据写入后会在几秒后影响到查询结果。
    • strong:执行的查询结果满足强一致性。此时新数据写入后立刻影响到查询结果。

    创建多元索引的映射关系时,consistency取值固定为eventual。

  • allow_inaccurate_aggregation:是否允许通过牺牲聚合操作的精准度提升查询性能。类型为Boolean。

    创建表的映射关系时,默认值为true,表示允许通过牺牲聚合操作的精度提升查询性能。您可以根据需要配置此项为false。

    创建多元索引的映射关系时,allow_inaccurate_aggregation的取值固定为true。

示例

为exampletable1数据表的多元索引exampletable1_index创建多元索引映射表search_exampletable1,多元索引映射表包含id(BIGINT类型)、colvalue(MEDIUMTEXT类型)和content(MEDIUMTEXT类型)。

CREATE TABLE search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';
创建多元索引映射表search_exampletable1后,您可以执行以下操作:
  • 查询search_exampletable1的描述信息。
    SHOW INDEX IN search_exampletable1;

    关于查询索引描述信息的更多信息,请参见查询索引描述信息

  • 查询search_exampletable1中content列值匹配"tablestore cool"字符串至少1个分词的行数据,最多返回10行,并且返回id和content列。
    SELECT id,content FROM search_exampletable1 WHERE TEXT_MATCH(content, "tablestore cool") LIMIT 10;

    关于查询匹配字符串的数据的更多信息,请参见查询数据全文检索