This topic describes how to create a data table by calling the CreateTable operation. When you call the CreateTable operation, you must specify the schema information and configuration information of the data table. You can set reserved read throughput and reserved write throughput for data tables in high-performance instances based on your business requirements. You can create one or more index tables when you create a data table.
- After a data table is created, it takes several seconds to load the data table. During this period, read and write operations performed on the table may fail. Perform operations on the data table after the data table is loaded.
- You must specify the primary key when you create a data table. A primary key can contain one to four primary key columns. Each primary key column has a name and a data type.
Prerequisites
- An instance is created in the Tablestore console. For more information, see Create instances.
- A Tablestore client is initialized. For more information, see Initialization.
Operation
// Description: Create a data table based on the specified table schema.
// request is an instance of the CreateTableRequest class and contains TableMeta, TableOption, and ReservedThroughput.
// For more information, see the documentation of the TableMeta class.
// After you create a data table, it takes several seconds to load the partitions in the data table. You can perform operations on the data table only after the partitions are loaded.
// Response: CreateTableResponse
CreateTable(request *CreateTableRequest) (*CreateTableResponse, error)
Parameters
Parameter | Description |
TableMeta | The schema information of the data table. The schema information contains the following items:
|
TableOption | The configuration information about the data table. For more information, see Data versions and TTL. The configuration information contains the following items:
|
ReservedThroughput | The reserved read throughput and reserved write throughput of the data table. For data tables in capacity instances, the reserved read and write throughput can be set only to 0. Reserved throughput does not apply to data tables in these instances. The default value 0 specifies that all throughput is billed on a pay-as-you-go basis. Unit: capacity unit (CU).
|
IndexMeta | The schema information of the index table. The schema information contains the following items:
|
Examples
- Create a data table without creating an index table
The following sample code provides an example on how to create a data table that has two primary key columns and reserved read and write throughput of (0, 0):
func CreateTableSample(client *tablestore.TableStoreClient, tableName string) { createTableRequest := new(tablestore.CreateTableRequest) // Create a schema for primary key columns, which includes the number, names, and types of the primary key columns. // The first primary key column is named pk0 and requires an INTEGER value. The first primary key column is also the partition key. // The second primary key column is named pk1 and requires an INTEGER value. tableMeta := new(tablestore.TableMeta) tableMeta.TableName = tableName tableMeta.AddPrimaryKeyColumn("pk0", tablestore.PrimaryKeyType_INTEGER) tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING) tableOption := new(tablestore.TableOption) tableOption.TimeToAlive = -1 tableOption.MaxVersion = 3 reservedThroughput := new(tablestore.ReservedThroughput) reservedThroughput.Readcap = 0 reservedThroughput.Writecap = 0 createTableRequest.TableMeta = tableMeta createTableRequest.TableOption = tableOption createTableRequest.ReservedThroughput = reservedThroughput response, err := client.CreateTable(createTableRequest) if (err != nil) { fmt.Println("Failed to create table with error:", err) } else { fmt.Println("Create table finished") } }
For the detailed sample code, visit CreateTable@GitHub.
- Create a data table and an index table whose index type is global secondary index
func CreateTableWithGlobalIndexSample(client *tablestore.TableStoreClient, tableName string) { createTableRequest := new(tablestore.CreateTableRequest) tableMeta := new(tablestore.TableMeta) tableMeta.TableName = tableName tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING) tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER) tableMeta.AddDefinedColumn("definedcol1", tablestore.DefinedColumn_STRING) tableMeta.AddDefinedColumn("definedcol2", tablestore.DefinedColumn_INTEGER) indexMeta := new(tablestore.IndexMeta) // Create IndexMeta for the index table. indexMeta.AddPrimaryKeyColumn("definedcol1") // Add a primary key column to the index table. Specify the definedcol1 column of the data table as the primary key column of the index table. indexMeta.AddDefinedColumn("definedcol2") // Add an attribute column to the index table. Specify the definedcol2 column of the data table as the attribute column of the index table. indexMeta.IndexName = "indexSample" tableOption := new(tablestore.TableOption) tableOption.TimeToAlive = -1 // Specify the validity period of data. A value of -1 specifies that the data never expires. Unit: seconds. You must set TimeToAlive to -1 for a data table that has index tables. tableOption.MaxVersion = 1 // Specify the maximum number of versions that can be retained for each column. A value of 1 specifies that only the latest version is retained for each column. You must set MaxVersion to 1 for a data table that has index tables. reservedThroughput := new(tablestore.ReservedThroughput) createTableRequest.TableMeta = tableMeta createTableRequest.TableOption = tableOption createTableRequest.ReservedThroughput = reservedThroughput createTableRequest.AddIndexMeta(indexMeta) _, err := client.CreateTable(createTableRequest) if err != nil { fmt.Println("Failed to create table with error:", err) } else { fmt.Println("Create table finished") } }
- Create a data table and an index table whose index type is local secondary index
func CreateTableWithLocalIndexSample(client *tablestore.TableStoreClient, tableName string) { createTableRequest := new(tablestore.CreateTableRequest) tableMeta := new(tablestore.TableMeta) tableMeta.TableName = tableName tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING) tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER) tableMeta.AddDefinedColumn("definedcol1", tablestore.DefinedColumn_STRING) tableMeta.AddDefinedColumn("definedcol2", tablestore.DefinedColumn_INTEGER) indexMeta := new(tablestore.IndexMeta) // Create IndexMeta for the index table. indexMeta.IndexType = IT_LOCAL_INDEX // Set the index type to IT_LOCAL_INDEX. indexMeta.AddPrimaryKeyColumn("pk1") // Add a primary key column to the index table. The first primary key column of the index table must be the same as the first primary key column of the data table. indexMeta.AddPrimaryKeyColumn("definedcol1") // Add a primary key column to the index table. Specify the definedcol1 column of the data table as the primary key column of the index table. indexMeta.AddDefinedColumn("definedcol2") // Add an attribute column to the index table. Specify the definedcol2 column of the data table as the attribute column of the index table. indexMeta.IndexName = "indexSample" tableOption := new(tablestore.TableOption) tableOption.TimeToAlive = -1 // Specify the validity period of data. A value of -1 specifies that the data never expires. Unit: seconds. You must set TimeToAlive to -1 for a data table that has index tables. tableOption.MaxVersion = 1 // Specify the maximum number of versions that can be retained for each column. A value of 1 specifies that only the latest version is retained for each column. You must set MaxVersion to 1 for a data table that has index tables. reservedThroughput := new(tablestore.ReservedThroughput) createTableRequest.TableMeta = tableMeta createTableRequest.TableOption = tableOption createTableRequest.ReservedThroughput = reservedThroughput createTableRequest.AddIndexMeta(indexMeta) _, err := client.CreateTable(createTableRequest) if err != nil { fmt.Println("Failed to create table with error:", err) } else { fmt.Println("Create table finished") } }