使用CreateTable介面建立資料表時,需要指定資料表的結構資訊和配置資訊,高效能執行個體中的資料表還可以根據需要設定預留讀/寫輸送量。建立資料表的同時支援建立一個或者多個索引表。

说明
  • 建立資料表後需要幾秒鐘進行載入,在此期間對該資料表的讀/寫資料操作均會失敗。請等待資料表載入完畢後再進行資料操作。
  • 建立資料表時必須指定資料表的主鍵。主鍵包含1個~4個主鍵列,每一個主鍵列都有名稱和類型。

前提條件

  • 已通過控制台建立執行個體。具體操作,請參見建立執行個體
  • 已初始化Client。具體操作,請參見初始化

介面

  /**
   * 根據指定的表結構資訊建立相應的資料表。
   */
  createTable(params, callback)           

參數

參數 說明
tableMeta 資料表的結構資訊,包括如下內容:
  • tableName:資料表名稱。
  • primaryKey:資料表的主鍵定義。更多資訊,請參見主鍵和屬性
    说明 屬性列不需要定義。Table Store每行的資料列都可以不同,屬性列的列名在寫入時指定。
    • Table Store可包含1個~4個主鍵列。主鍵列是有順序的,與使用者添加的順序相同。例如PRIMARY KEY(A, B, C)與PRIMARY KEY(A, C, B)是不同的兩個主鍵結構。Table Store會按照整個主鍵的大小對行進行排序。
    • 第一列主鍵作為分區鍵。分區鍵相同的資料會存放在同一個分區內,所以相同分區鍵下最好不要超過10 GB以上資料,否則會導致單分區過大,無法分裂。另外,資料的讀/寫訪問最好在不同的分區鍵上均勻分布,有利於負載平衡。
  • definedColumn:預先定義一些非主鍵列以及其類型,可以作為索引表的屬性列或索引列。
tableOptions 資料表的配置資訊。更多資訊,請參見資料版本和生命週期

配置資訊包括如下內容:

  • timeToLive:資料生命週期,即資料的到期時間。當資料的儲存時間超過設定的資料生命週期時,系統會自動清理超過資料生命週期的資料。

    資料生命週期至少為86400秒(一天)或-1(資料永不到期)。

    建立資料表時,如果希望資料永不到期,可以設定資料生命週期為-1;建立資料表後,可以通過UpdateTable介面動態修改資料生命週期。

    單位為秒。

    说明 如果需要使用索引,則資料生命週期必須設定為-1(資料永不到期)。
  • maxVersions:最大版本數,即屬性列能夠保留資料的最大版本個數。當屬性列資料的版本個數超過設定的最大版本數時,系統會自動刪除較早版本的資料。

    建立資料表時,可以自訂屬性列的最大版本數;建立資料表後,可以通過UpdateTable介面動態修改資料表的最大版本數。

    说明 如果需要使用索引,則最大版本數必須設定為1。
  • allowUpdate:是否允許UpdateRow相關更新寫入操作。預設值為true,表示允許UpdateRow相關更新寫入操作;當設定allowUpdate為false時,表示禁止UpdateRow相關更新寫入操作。
reservedThroughput 為資料表配置預留讀輸送量或預留寫輸送量。

容量型執行個體中的資料表的預留讀/寫輸送量只能設定為0,不允許預留。

預設值為0,即完全隨用隨付。

單位為CU。

  • 當預留讀輸送量或預留寫輸送量大於0時,Table Store會根據配置為資料表預留相應資源,且資料表建立成功後,將會立即按照預留輸送量開始計費,超出預留的部分進行隨用隨付。更多資訊,請參見計費概述
  • 當預留讀輸送量或預留寫輸送量設定為0時,Table Store不會為資料表預留相應資源。
indexMetas 索引表的結構資訊,每個indexMeta包括如下內容:
  • name:索引表名稱。
  • primaryKey:索引表的索引列,索引列為資料表主鍵和預定義列的組合。

    使用本地二級索引時,索引表的第一個主鍵列必須與資料表的第一個主鍵列相同。

  • definedColumn:索引表的屬性列,索引表屬性列為資料表的預定義列的組合。
  • includeBaseData:索引表中是否包含資料表中已存在的資料。

    當設定includeBaseData為true時,表示包含存量資料;設定includeBaseData為false時,表示不包含存量資料。

  • indexType:索引類型。可選值包括IT_GLOBAL_INDEX和IT_LOCAL_INDEX。
    • 當不設定indexType或者設定indexType為IT_GLOBAL_INDEX時,表示使用全域二級索引。

      使用全域索引時,Table Store以非同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,正常情況下同步延遲達到毫秒層級。

    • 當設定indexType為IT_LOCAL_INDEX時,表示使用本地二級索引。

      使用本地二級索引時,Table Store以同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,當資料寫入資料表後,即可從索引表中查詢到資料。

  • indexUpdateMode:索引更新模式。可選值包括IUM_ASYNC_INDEX和IUM_SYNC_INDEX。
    • 當不設定indexUpdateMode或者設定indexUpdateMode為IUM_ASYNC_INDEX時,表示非同步更新。

      使用全域二級索引時,索引更新模式必須設定為非同步更新(IUM_ASYNC_INDEX)。

    • 當設定indexUpdateMode為IUM_SYNC_INDEX時,表示同步更新。

      使用本地二級索引時,索引更新模式必須設定為同步更新(IUM_SYNC_INDEX)。

樣本

  • 建立資料表(不帶索引)

    建立一個有2個主鍵列,預留讀/寫輸送量為(0, 0)的資料表。

    var client = require('./client');
    
    var params = {
      tableMeta: {
        tableName: 'sampleTable',
        primaryKey: [
          {
            name: 'gid',
            type: 'INTEGER'
          },
          {
            name: 'uid',
            type: 'INTEGER'
          }
        ]
      },
      reservedThroughput: {
        capacityUnit: {
          read: 0,
          write: 0
        }
      },
      tableOptions: {
        timeToLive: -1, //資料的到期時間,單位為秒,-1代表永不到期。如果設定到期時間為一年,即為365*24*3600。
        maxVersions: 1  //儲存的最大版本數,設定為1代表每列上最多儲存一個版本(儲存最新的版本)。
      }
    };
    
    client.createTable(params, function (err, data) {
      if (err) {
        console.log('error:', err);
        return;
      }
      console.log('success:', data);
    });
                

    詳細代碼請參見CreateTable@GitHub

  • 建立資料表(帶索引且索引類型為全域二級索引)
    var client = require('./client');
    var TableStore = require('../index.js');
    
    var params = {
      tableMeta: {
        tableName: 'sdkGlobalTest',
        primaryKey: [
          {
            name: 'pk1',
            type: TableStore.PrimaryKeyType.INTEGER
          },
          {
            name: 'pk2',
            type: TableStore.PrimaryKeyType.INTEGER
          }
        ],
        definedColumn: [
          {
            "name": "col1",
            "type": TableStore.DefinedColumnType.DCT_INTEGER
          },
          {
            "name": "col2",
            "type": TableStore.DefinedColumnType.DCT_INTEGER
          }
        ],
      },
      reservedThroughput: {
        capacityUnit: {
          read: 0,
          write: 0
        }
      },
      tableOptions: {
        timeToLive: -1, //資料的到期時間,單位為秒,-1表示永不到期。帶索引的資料表資料生命週期必須設定為-1。
        maxVersions: 1  //儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引的資料表最大版本數必須設定為1。
      },
      streamSpecification: {
        enableStream: false, //二級索引不支援開啟Stream。
      },
      indexMetas: [
        {
          name: "sdkGlobalIndex1",
          primaryKey: ["pk2"],
          definedColumn: ["col1", "col2"]
        },
        {
          name: "sdkGlobalIndex2",
          primaryKey: ["col1"],
          definedColumn: ["col2"]
        }
      ]
    };
    
    client.createTable(params, function (err, data) {
      if (err) {
        console.log('error:', err);
        return;
      }
      console.log('success:', data);
    });
  • 建立資料表(帶索引且索引類型為本地二級索引)
    var client = require('./client');
    var TableStore = require('../index.js');
    
    var params = {
      tableMeta: {
        tableName: 'sdkLocalTest',
        primaryKey: [
          {
            name: 'pk1',
            type: TableStore.PrimaryKeyType.INTEGER
          },
          {
            name: 'pk2',
            type: TableStore.PrimaryKeyType.INTEGER
          }
        ],
        definedColumn: [
          {
            "name": "col1",
            "type": TableStore.DefinedColumnType.DCT_INTEGER
          },
          {
            "name": "col2",
            "type": TableStore.DefinedColumnType.DCT_INTEGER
          }
        ],
      },
      reservedThroughput: {
        capacityUnit: {
          read: 0,
          write: 0
        }
      },
      tableOptions: {
        timeToLive: -1, //資料的到期時間,單位為秒,-1表示永不到期。帶索引的資料表資料生命週期必須設定為-1。
        maxVersions: 1  //儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引的資料表最大版本數必須設定為1。
      },
      streamSpecification: {
        enableStream: false, //二級索引不支援開啟Stream。
      },
      indexMetas: [
        {
          name: "sdklocalIndex1",
          primaryKey: ["pk1","col1"],//為索引表添加主鍵列。索引表的第一列主鍵必須與資料表的第一列主鍵相同。
          definedColumn: ["col2"],
          indexUpdateMode: TableStore.IndexUpdateMode.IUM_SYNC_INDEX,//設定索引更新模式為同步更新(IUM_SYNC_INDEX)。當索引類型為本地二級索引時,索引更新模式必須為同步更新。
          indexType: TableStore.IndexType.IT_LOCAL_INDEX,//設定索引類型為本地二級索引(IT_LOCAL_INDEX)。
        },
    
        {
          name: "sdklocalIndex2",
          primaryKey: ["pk1","col2"],
          definedColumn: ["col1"],
          indexUpdateMode: TableStore.IndexUpdateMode.IUM_SYNC_INDEX,//設定索引更新模式為同步更新(IUM_SYNC_INDEX)。當索引類型為本地二級索引時,索引更新模式必須為同步更新。
          indexType: TableStore.IndexType.IT_LOCAL_INDEX,//設定索引類型為本地二級索引(IT_LOCAL_INDEX)。
        }
      ]
    };
    
    client.createTable(params, function (err, data) {
      if (err) {
        console.log('error:', err);
        return;
      }
      console.log('success:', data);
    });