Создание таблицы в AWS SDK
Чтобы создать таблицу с именем Series
, ключом партицирования series_id
и ключом сортировки title
:
-
Создайте проект
SeriesCreateTable
:mvn -B archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=com.mycompany.app \ -DartifactId=SeriesCreateTable
В результате выполнения команды в текущем рабочем каталоге будет создан каталог проекта с именем
SeriesCreateTable
, структурой подкаталогов и файлом описания проектаpom.xml
. -
Перейдите в каталог проекта:
cd SeriesCreateTable
-
Отредактируйте описание проекта в файле
pom.xml
, например с помощью редактора nano:nano pom.xml
Пример файла
pom.xml
:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>SeriesCreateTable</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>SeriesCreateTable</name> <url>http://maven.apache.org</url> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.mycompany.app.SeriesCreateTable</mainClass> </manifest> <manifestEntries> <Class-Path>.</Class-Path> </manifestEntries> </archive> <finalName>release/SeriesCreateTable</finalName> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/release/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.11.1012</version> </dependency> </dependencies> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> </project>
Посмотрите актуальные версии junit
и aws-java-sdk-dynamodb . -
В каталоге
src/main/java/com/mycompany/app/
создайте файлSeriesCreateTable.java
, например с помощью редактора nano:nano src/main/java/com/mycompany/app/SeriesCreateTable.java
Скопируйте в созданный файл следующий код:
Важно
Вместо
<Document_API_эндпоинт>
укажите подготовленное ранее значение.package com.mycompany.app; import java.util.Arrays; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.document.DynamoDB; import com.amazonaws.services.dynamodbv2.document.Table; import com.amazonaws.services.dynamodbv2.model.AttributeDefinition; import com.amazonaws.services.dynamodbv2.model.KeySchemaElement; import com.amazonaws.services.dynamodbv2.model.KeyType; import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType; public class SeriesCreateTable { public static void main(String[] args) throws Exception { AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("<Document_API_эндпоинт>", "ru-central1")) .build(); DynamoDB dynamoDB = new DynamoDB(client); String tableName = "Series"; try { System.out.println("Попытка создания таблицы, подождите..."); CreateTableRequest request = new CreateTableRequest(); request.setTableName(tableName); request.setKeySchema( Arrays.asList(new KeySchemaElement("series_id", KeyType.HASH), // Ключ партицирования new KeySchemaElement("title", KeyType.RANGE))); request.setAttributeDefinitions( Arrays.asList(new AttributeDefinition("series_id", ScalarAttributeType.N), new AttributeDefinition("title", ScalarAttributeType.S))); Table table = dynamoDB.createTable(request); table.waitForActive(); System.out.println("Статус таблицы: " + table.getDescription().getTableStatus()); } catch (Exception e) { System.err.println("Невозможно создать таблицу: "); System.err.println(e.getMessage()); } } }
-
Соберите проект:
mvn package
В результате выполнения команды в каталоге
target/release/
будет сгенерирован файлSeriesCreateTable.jar
. -
Запустите приложение:
java -jar target/release/SeriesCreateTable.jar
Результат:
Попытка создания таблицы, подождите... Статус таблицы: ACTIVE
В коде ниже используется функция print
из Python 3. Для использования этой функции в версиях Python 2.6 и старше добавьте в начало файла строку from __future__ import print_function
.
-
Создайте файл
SeriesCreateTable.py
, например с помощью редактора nano:nano SeriesCreateTable.py
Скопируйте в созданный файл следующий код:
Важно
Вместо
<Document_API_эндпоинт>
укажите подготовленное ранее значение.import boto3 def create_series_table(): ydb_docapi_client = boto3.resource('dynamodb', endpoint_url = "<Document_API_эндпоинт>") table = ydb_docapi_client.create_table( TableName = 'Series', # Series — имя таблицы KeySchema = [ { 'AttributeName': 'series_id', 'KeyType': 'HASH' # Ключ партицирования }, { 'AttributeName': 'title', 'KeyType': 'RANGE' # Ключ сортировки } ], AttributeDefinitions = [ { 'AttributeName': 'series_id', 'AttributeType': 'N' # Целое число }, { 'AttributeName': 'title', 'AttributeType': 'S' # Строка }, ] ) return table if __name__ == '__main__': series_table = create_series_table() print("Статус таблицы:", series_table.table_status)
-
Запустите программу:
python SeriesCreateTable.py
Результат:
Статус таблицы: ACTIVE
-
Создайте файл
SeriesCreateTable.php
, например с помощью редактора nano:nano SeriesCreateTable.php
Скопируйте в созданный файл следующий код:
Важно
Вместо
<Document_API_эндпоинт>
укажите подготовленное ранее значение.<?php require 'vendor/autoload.php'; date_default_timezone_set('UTC'); use Aws\DynamoDb\Exception\DynamoDbException; $sdk = new Aws\Sdk([ 'endpoint' => '<Document_API_эндпоинт>', 'region' => 'ru-central1', 'version' => 'latest' ]); $dynamodb = $sdk->createDynamoDb(); $params = [ 'TableName' => 'Series', 'KeySchema' => [ [ 'AttributeName' => 'series_id', 'KeyType' => 'HASH' ], [ 'AttributeName' => 'title', 'KeyType' => 'RANGE' ] ], 'AttributeDefinitions' => [ [ 'AttributeName' => 'series_id', 'AttributeType' => 'N' ], [ 'AttributeName' => 'title', 'AttributeType' => 'S' ], ] ]; try { $result = $dynamodb->createTable($params); echo 'Статус таблицы: ' . $result['TableDescription']['TableStatus'] ."\n"; } catch (DynamoDbException $e) { echo "Невозможно создать таблицу:\n"; echo $e->getMessage() . "\n"; } ?>
-
Запустите программу:
php SeriesCreateTable.php
Результат:
Статус таблицы: ACTIVE
-
Создайте файл
SeriesCreateTable.js
, например с помощью редактора nano:nano SeriesCreateTable.js
Скопируйте в созданный файл следующий код:
Важно
Вместо
<Document_API_эндпоинт>
укажите подготовленное ранее значение.const AWS = require("@aws-sdk/client-dynamodb"); // Credentials should be defined via environment variables AWS_SECRET_ACCESS_KEY and AWS_ACCESS_KEY_ID const dynamodb = new AWS.DynamoDBClient({ region: "ru-central1", endpoint: "<Document_API_эндпоинт>", }); dynamodb.send(new AWS.CreateTableCommand({ TableName : "Series", KeySchema: [ { AttributeName: "series_id", KeyType: "HASH"}, { AttributeName: "title", KeyType: "RANGE" } ], AttributeDefinitions: [ { AttributeName: "series_id", AttributeType: "N" }, { AttributeName: "title", AttributeType: "S" } ] })) .then(data => { console.log("Таблица создана. Схема таблицы JSON:", JSON.stringify(data, null, 2)); }) .catch(err => { console.error("Не удалось создать таблицу. Ошибка JSON:", JSON.stringify(err, null, 2)); })
-
Запустите программу:
node SeriesCreateTable.js
Результат:
Таблица создана. Схема таблицы JSON: { "TableDescription": { "AttributeDefinitions": [ { "AttributeName": "series_id", "AttributeType": "N" }, { "AttributeName": "title", "AttributeType": "S" } ], "TableName": "Series", "KeySchema": [ { "AttributeName": "series_id", "KeyType": "HASH" }, { "AttributeName": "title", "KeyType": "RANGE" } ], "TableStatus": "ACTIVE", "CreationDateTime": "2021-06-14T19:34:32.000Z", "TableSizeBytes": 0, "ItemCount": 0 } }
-
Создайте файл
SeriesCreateTable.rb
, например с помощью редактора nano:nano SeriesCreateTable.rb
Скопируйте в созданный файл следующий код:
Важно
Вместо
<Document_API_эндпоинт>
укажите подготовленное ранее значение.require 'aws-sdk-dynamodb' def create_table(dynamodb_client, table_definition) response = dynamodb_client.create_table(table_definition) response.table_description.table_status rescue StandardError => e puts "Ошибка создания таблицы: #{e.message}" 'Error' end def run_me region = 'ru-central1' Aws.config.update( endpoint: '<Document_API_эндпоинт>', region: region ) dynamodb_client = Aws::DynamoDB::Client.new table_definition = { table_name: 'Series', key_schema: [ { attribute_name: 'series_id', key_type: 'HASH' # Ключ раздела. }, { attribute_name: 'title', key_type: 'RANGE' # Ключ сортировки. } ], attribute_definitions: [ { attribute_name: 'series_id', attribute_type: 'N' }, { attribute_name: 'title', attribute_type: 'S' } ] } puts "Создание таблицы 'Series'..." create_table_result = create_table(dynamodb_client, table_definition) if create_table_result == 'Ошибка' puts 'Не удалось создать таблицу.' else puts "Таблица создана. Статус: '#{create_table_result}'." end end run_me if $PROGRAM_NAME == __FILE__
-
Запустите программу:
ruby SeriesCreateTable.rb
Результат:
Создание таблицы 'Series'... Таблица создана. Статус: 'ACTIVE'.