全部產品
Search
文件中心

Tablestore:建立表的映射關係

更新時間:May 22, 2025

執行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_name和table_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"}';

常見問題

建立映射關係時出現Table 'instancename.tablename' doesn't exist ?

  • 出現此問題的可能原因如下:

    建立映射關係時,指定的表不存在。

  • 解決方案:

    SQL中的Create Table語句只能為已存在的表或者多元索引建立映射關係。請確保要建立映射關係的表或者多元索引存在。

建立映射關係時出現Table 'instancename.tablename' already exist ?

  • 出現此問題的可能原因如下:

    該表已建立映射關係。

    • 使用者已手動為該表建立映射關係。

    • Table Store後台已自動建立該表的映射關係。在未建立資料表的映射關係的情況下,直接使用SQL語句(例如DESCRIBE、SELECT等)查詢資料,Table Store後台將自動建立該資料表的映射關係。自動建立的映射表僅包含資料表的主鍵列和預定義列,並且不支援更新屬性列。

  • 解決方案:

    您可以通過DESCRIBE語句查看現有映射表的表結構,如果不符合業務查詢要求,您可以更新映射表屬性列。系統自動建立的映射表無法更新屬性列,請在確保不影響業務的情況下刪除並重新建立映射表。

說明

更多關於SQL查詢功能的常見錯誤及其解決方案,請參見SQL查詢常見錯誤排查

相關文檔