创建表的映射关系

执行CREATE TABLE语句为已存在的表或者多元索引创建映射关系。创建映射关系时需要配置表的字段名称、字段类型和主键信息以及根据需要配置查询数据时的执行引擎。本文介绍如何为已存在的表创建映射关系。

说明

关于创建多元索引的映射关系的具体操作,请参见创建多元索引的映射关系

语法

CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type [NOT NULL | NULL],...
| PRIMARY KEY(key_part[,key_part])
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency [,"allow_inaccurate_aggregation": allow_inaccurate_aggregation]}';

当表只有一个主键时,您还可以使用如下语法为已存在的表创建映射关系。

CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type PRIMARY KEY,column_name data_type [NOT NULL | NULL],...
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency [,"allow_inaccurate_aggregation": allow_inaccurate_aggregation]}';

参数

参数

是否必选

说明

IF NOT EXISTS

如果指定IF NOT EXISTS,无论表是否存在,均会返回成功;如果未指定IF NOT EXISTS,则只有当表不存在时,才会返回成功。

table_name

表名,用于唯一标识一张表。

SQL中的表名必须和原始表名相同。

column_name

列名。

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

data_type

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

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

NOT NULL | NULL

列值是否允许为NULL。取值范围如下:

  • NOT NULL:禁止该列的值为NULL,主键列默认不允许为NULL。

  • NULL:允许该列的值为NULL,属性列默认允许为NULL。

    当某属性列值不能为NULL时,请指定该列为NOT NULL。

key_part

主键列名称。支持设置多个主键列,多个主键列之间用半角逗号(,)分隔。

主键列名称必须包含在列名中。

ENGINE

使用映射表查询数据时的执行引擎。取值范围如下:

  • tablestore(默认):SQL引擎将自动选择合适的索引执行查询。

  • searchindex:SQL引擎将通过指定的多元索引执行查询。设置为此项时,您必须在ENGINE_ATTRIBUTE中配置index_nametable_name。

ENGINE_ATTRIBUTE

执行引擎的属性,以JSON格式表示。包括如下选项:

  • index_name:多元索引映射表绑定的多元索引名称。只有创建多元索引的映射关系时才需要配置。

  • table_name:多元索引映射表绑定的多元索引所属的数据表名称。只有创建多元索引的映射表时才需要配置。

  • consistency:执行引擎支持的一致性模式。

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

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

      • strong:执行的查询结果满足强一致性。此时新数据写入后立刻影响到查询结果。

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

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

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

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

示例

  • 示例1

    以下示例用于创建名称为exampletable1的映射表,该表包含主键列id(BIGINT类型)以及属性列colvalue(BIGINT类型)和content(MEDIUMTEXT)。

    CREATE TABLE exampletable1 (id BIGINT(20) PRIMARY KEY, colvalue BIGINT(20), content MEDIUMTEXT);
  • 示例2

    以下示例用于创建名称为exampletable2的映射表,该表包含主键列id(BIGINT类型)、colvalue(VARCHAR类型)以及属性列content(MEDIUMTEXT类型),并且所有对该表的查询必须满足强一致性。

    CREATE TABLE exampletable2 (id BIGINT(20), colvalue VARCHAR(1024), content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE_ATTRIBUTE='{"consistency": "strong"}';

常见问题

SQL查询常见错误排查

相关文档

  • 如果要加速SQL数据查询和计算,您可以通过创建二级索引或者多元索引实现。更多信息,请参见索引选择策略计算下推

  • 创建映射关系后,您可以通过SELECT语句查询与分析表中数据。更多信息,请参见查询数据

  • 如果要通过指定多元索引查询与分析数据,您可以通过CREATE TABLE语句为指定多元索引创建映射关系实现。更多信息,请参见创建多元索引的映射关系

  • 如果数据表的属性列有变化,您可以通过ALTER TABLE语句同步修改映射表。更多信息,请参见更新映射表属性列

  • 如果需要查询表的描述信息,您可以通过DESCRIBE语句实现。更多信息,请参见查询表的描述信息

  • 如果不再需要使用某个映射关系,您可以通过DROP MAPPING TABLE语句删除映射关系。更多信息,请参见删除映射关系

  • 如果需要查看表的索引信息,您可以通过SHOW INDEX语句实现。更多信息,请参见查询索引描述信息

  • 如果需要列出当前数据库中的映射表名称列表,您可以通过SHOW TABLES语句实现。更多信息,请参见列出映射表名称列表