Cree una tabla de modelo Wide Column con el Tablestore SDK for Java y configure su esquema, versiones de datos, índices, Stream y cifrado en la misma solicitud.
Requisitos previos
Instale Tablestore SDK for Java e inicialice el cliente.
Descripción
Llame a createTable para crear una tabla de modelo Wide Column. La solicitud debe contener como mínimo una columna de clave principal y especificar el tiempo de vida (TTL) y el número máximo de versiones.
public CreateTableResponse createTable(CreateTableRequest createTableRequest) throws TableStoreException, ClientException
El siguiente ejemplo crea una tabla llamada example_table. La tabla tiene una columna de clave principal de tipo STRING, los datos nunca caducan y solo se conserva una versión de los datos.
TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
new PrimaryKeySchema("id", PrimaryKeyType.STRING));
TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
client.createTable(request);
Después de crear una tabla, espere a que se cargue antes de realizar operaciones de datos.
Parámetros
CreateTableRequest contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
tableMeta (obligatorio) |
|
El esquema de la tabla. |
|
tableOptions (obligatorio) |
|
La configuración de versiones de datos y actualizaciones de la tabla. |
|
reservedThroughput (opcional) |
|
El reserved read/write throughput, en unidades de capacidad (CU). Los valores predeterminados de CU de lectura y escritura son |
|
indexMeta (opcional) |
|
Los índices secundarios que se crearán junto con la tabla. |
|
streamSpecification (opcional) |
|
La configuración de Stream. |
|
enableLocalTxn (opcional) |
|
Especifica si se habilita local transactions. Valor predeterminado: |
|
sseSpecification (opcional) |
|
La configuración de data encryption. Solo puede habilitar el cifrado de datos al crear la tabla. Una vez creada, no es posible deshabilitar el cifrado ni modificar su configuración. |
Esquema de la tabla
tableMeta es un objeto TableMeta que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
tableName (obligatorio) |
|
El nombre de la tabla. |
|
primaryKey (obligatorio) |
|
Las configuraciones de las columnas de clave principal. Puede configurar entre una y cuatro columnas de clave principal. La primera columna de clave principal es la clave de partición y los datos se ordenan de forma ascendente por clave principal. |
|
definedColumns (opcional) |
|
Las configuraciones de columnas predefinidas. Las columnas predefinidas se pueden utilizar para crear secondary indexes y search indexes. |
Columnas de clave principal
Cada elemento en tableMeta.primaryKey[] es un objeto PrimaryKeySchema que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
name (obligatorio) |
|
El nombre de la columna de clave principal. |
|
type (obligatorio) |
|
El tipo de la columna de clave principal. Valores válidos: |
|
option (opcional) |
|
La opción de la columna de clave principal. Para usar una auto-increment primary key column, establezca una columna de clave principal |
Columnas predefinidas
Cada elemento en tableMeta.definedColumns[] es un objeto DefinedColumnSchema que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
name (obligatorio) |
|
El nombre de la columna predefinida. |
|
type (obligatorio) |
|
El tipo de la columna predefinida. Valores válidos: |
Configuraciones de la tabla
tableOptions es un objeto TableOptions que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
timeToLive (obligatorio) |
|
El tiempo de vida (TTL) de los datos, en segundos. Establezca este parámetro en |
|
maxVersions (obligatorio) |
|
El número máximo de versiones que se conservarán para cada columna de atributo. Para usar un índice de búsqueda o un índice secundario, establezca este parámetro en |
|
maxTimeDeviation (opcional) |
|
La desviación máxima de versión, en segundos. Valor predeterminado: |
|
allowUpdate (opcional) |
|
Especifica si los datos se pueden actualizar mediante la llamada a |
|
updateFullRow (opcional) |
|
Especifica si se habilitan las actualizaciones de fila completa. Valor predeterminado: |
Throughput reservado de lectura y escritura
reservedThroughput es un objeto ReservedThroughput que contiene el siguiente parámetro.
|
Nombre |
Tipo |
Descripción |
|
capacityUnit (obligatorio) |
|
La configuración del throughput reservado de lectura y escritura. |
Unidades de capacidad
reservedThroughput.capacityUnit es un objeto CapacityUnit que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
readCapacityUnit (obligatorio) |
|
El throughput de lectura reservado, en CU. |
|
writeCapacityUnit (obligatorio) |
|
El throughput de escritura reservado, en CU. |
Índices secundarios
Cada elemento en indexMeta[] es un objeto IndexMeta que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
indexName (obligatorio) |
|
El nombre del índice. |
|
primaryKey (obligatorio) |
|
Las columnas de clave principal del índice. Pueden consistir en columnas de clave principal y columnas predefinidas de la tabla. Para un índice secundario local, la primera columna de clave principal debe coincidir con la primera columna de clave principal de la tabla. |
|
definedColumns (opcional) |
|
Las columnas predefinidas incluidas en el índice. Deben ser columnas predefinidas de la tabla. |
|
indexType (opcional) |
|
El tipo de índice. Valores válidos: |
|
indexUpdateMode (opcional) |
|
El modo de actualización del índice. Un índice secundario global debe usar |
Configuración de Stream
streamSpecification es un objeto StreamSpecification que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
enableStream (obligatorio) |
|
Especifica si se habilita Stream. Valor predeterminado: |
|
expirationTime (opcional) |
|
El periodo de retención de los registros incrementales, en horas. Valor máximo: |
Configuración de transacciones locales
enableLocalTxn es un valor Boolean. Tenga en cuenta los siguientes límites al configurar este parámetro.
Las transacciones locales solo son compatibles con Tablestore SDK for Java 5.11.0 y versiones posteriores.
Las transacciones locales y las columnas de clave principal con incremento automático son mutuamente excluyentes. Si se configura una columna de clave principal con incremento automático, las transacciones locales no surtirán efecto aunque estén habilitadas.
Para habilitar transacciones locales en una tabla existente, envíe un ticket .
Configuración de cifrado del lado del servidor
sseSpecification es un objeto SSESpecification que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
enable (obligatorio) |
|
Especifica si se habilita el cifrado de datos. Valor predeterminado: |
|
keyType (opcional) |
|
El tipo de cifrado. Valores válidos: |
|
keyId (opcional) |
|
El ID de la clave maestra del cliente. Este parámetro es obligatorio para el cifrado BYOK. |
|
roleArn (opcional) |
|
El Alibaba Cloud Resource Name (ARN) del rol de Resource Access Management (RAM). Este parámetro es obligatorio para el cifrado BYOK. |
Ejemplos
Configurar el esquema de la tabla y las versiones de datos
El siguiente ejemplo crea una tabla con dos columnas de clave principal y una columna predefinida. También configura la desviación máxima de versión y deshabilita las actualizaciones.
TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
new PrimaryKeySchema("id", PrimaryKeyType.STRING));
tableMeta.addPrimaryKeyColumn(
new PrimaryKeySchema("device_id", PrimaryKeyType.INTEGER));
tableMeta.addDefinedColumn("status", DefinedColumnType.STRING);
TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);
tableOptions.setMaxTimeDeviation(86400L);
tableOptions.setAllowUpdate(false);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
client.createTable(request);
Crear un índice secundario junto con la tabla
El siguiente ejemplo crea un índice secundario global llamado example_table_index junto con la tabla. La columna de clave principal del índice category debe definirse primero como una columna predefinida de la tabla.
TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
new PrimaryKeySchema("id", PrimaryKeyType.STRING));
tableMeta.addDefinedColumn("category", DefinedColumnType.STRING);
TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);
IndexMeta indexMeta = new IndexMeta("example_table_index");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.setIndexType(IndexType.IT_GLOBAL_INDEX);
indexMeta.setIndexUpdateMode(IndexUpdateMode.IUM_ASYNC_INDEX);
List<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
indexMetas.add(indexMeta);
CreateTableRequest request =
new CreateTableRequest(tableMeta, tableOptions, indexMetas);
client.createTable(request);
Habilitar Stream
El siguiente ejemplo habilita Stream al crear la tabla y establece el tiempo de caducidad de los registros incrementales en 24 horas.
TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
new PrimaryKeySchema("id", PrimaryKeyType.STRING));
TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setStreamSpecification(new StreamSpecification(true, 24));
client.createTable(request);
Habilitar transacciones locales
El siguiente ejemplo habilita transacciones locales al crear la tabla mediante la llamada a setLocalTxnEnabled.
TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
new PrimaryKeySchema("id", PrimaryKeyType.STRING));
TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setLocalTxnEnabled(true);
client.createTable(request);
Cifrar una tabla
Los siguientes ejemplos cifran una tabla mediante una clave de servicio KMS o BYOK.
Solo puede configurar el cifrado de datos al crear la tabla. Una vez creada, no es posible deshabilitar el cifrado ni modificar su configuración.
Cifrado con clave de servicio KMS
TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
new PrimaryKeySchema("id", PrimaryKeyType.STRING));
TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setSseSpecification(
new SSESpecification(true, SSEKeyType.SSE_KMS_SERVICE));
client.createTable(request);
Cifrado BYOK
Para usar el cifrado BYOK, primero obtenga el ID de la clave maestra del cliente (CMK) y el ARN del rol de RAM. Para más información, consulte BYOK encryption.
TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
new PrimaryKeySchema("id", PrimaryKeyType.STRING));
TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
String keyId = "key-xxxx****";
String roleArn = "acs:ram::1234****:role/example-role";
request.setSseSpecification(
new SSESpecification(true, SSEKeyType.SSE_BYOK, keyId, roleArn));
client.createTable(request);