下面列出了com.amazonaws.auth.PropertiesCredentials#com.amazonaws.services.dynamodbv2.model.KeySchemaElement 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public String getPrimaryKey(List<KeySchemaElement> keySchema){
String partitionKey = null;
String clusteringColumn = null;
for (KeySchemaElement keySchemaElement : keySchema) {
String type = keySchemaElement.getKeyType();
String name = keySchemaElement.getAttributeName();
if (type.equals(HASH.toString()))
partitionKey = name;
else if (type.equals(RANGE.toString()))
clusteringColumn = name;
}
String primaryKey;
if(clusteringColumn != null)
primaryKey = String.format("((\"%s\"), \"%s\")", partitionKey, clusteringColumn);
else
primaryKey = String.format("(\"%s\")", partitionKey);
return primaryKey;
}
@Override
public final Response createTable(final Request request) {
final CreateTableRequest createTableRequest = new CreateTableRequest(
Arrays.asList(
new AttributeDefinition(request.getPartitionKey(), ScalarAttributeType.S),
new AttributeDefinition(request.getSortKey(), ScalarAttributeType.N)),
request.getTableName(),
Arrays.asList(
new KeySchemaElement(request.getPartitionKey(), KeyType.HASH),
new KeySchemaElement(request.getSortKey(), KeyType.RANGE)),
new ProvisionedThroughput(request.getReadCapacityUnits(), request.getWriteCapacityUnits()));
TableUtils.createTableIfNotExists(this.dynamoDBClient, createTableRequest);
try {
TableUtils.waitUntilActive(this.dynamoDBClient, request.getTableName());
} catch (final AmazonClientException | InterruptedException e) {
return new Response(null, "Failed in table active check in API version V2: " + e.getMessage());
}
return new Response(request.getTableName() + " created with API version V2.", null);
}
@Override
public final Response createTable(final Request request) {
if (tableExist(request.getTableName())) {
return new Response(null, request.getTableName() + " already exist. Checked with version V1.");
}
Table table = dynamoDB.createTable(request.getTableName(),
Arrays.asList(
new KeySchemaElement(request.getPartitionKey(), KeyType.HASH), //Partition key
new KeySchemaElement(request.getSortKey(), KeyType.RANGE)), //Sort key
Arrays.asList(
new AttributeDefinition(request.getPartitionKey(), ScalarAttributeType.S),
new AttributeDefinition(request.getSortKey(), ScalarAttributeType.N)),
new ProvisionedThroughput(request.getReadCapacityUnits(), request.getWriteCapacityUnits()));
if (request.isWaitForActive()) {
try {
table.waitForActive();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return new Response(request.getTableName() + " created with API version V1.", null);
}
private static Future<CreateTableResult> createTableAsync(final AmazonDynamoDBAsync dbClient, final String tableName) {
final String partitionKeyName = tableName + "Id";
final CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(tableName).withKeySchema(new KeySchemaElement().withAttributeName(partitionKeyName).withKeyType(KeyType.HASH))
.withAttributeDefinitions(new AttributeDefinition().withAttributeName(partitionKeyName).withAttributeType("S"))
.withProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits(10L).withWriteCapacityUnits(5L));
return dbClient.createTableAsync(createTableRequest, new AsyncHandler<CreateTableRequest,CreateTableResult>() {
@Override
public void onError(final Exception exception) {
}
@Override
public void onSuccess(final CreateTableRequest request, final CreateTableResult createTableResult) {
}
});
}
public CreateTableRequest constructCreateTableRequest() {
ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<>();
attributeDefinitions.add(new AttributeDefinition().withAttributeName(partitionKeyName.toString()).withAttributeType("S"));
attributeDefinitions.add(new AttributeDefinition().withAttributeName(sortKeyName.toString()).withAttributeType("N"));
ArrayList<KeySchemaElement> keySchema = new ArrayList<>();
keySchema.add(new KeySchemaElement().withAttributeName(partitionKeyName.toString()).withKeyType(KeyType.HASH));
keySchema.add(new KeySchemaElement().withAttributeName(sortKeyName.toString()).withKeyType(KeyType.RANGE));
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput()
.withReadCapacityUnits(1L)
.withWriteCapacityUnits(1L);
CreateTableRequest request = new CreateTableRequest()
.withTableName(tableName)
.withKeySchema(keySchema)
.withAttributeDefinitions(attributeDefinitions)
.withProvisionedThroughput(provisionedThroughput);
return request;
}
private DynamoDBQueryFilter getQueryFilter(JobConf conf, Map<String, String>
hiveDynamoDBMapping, Map<String, String> hiveTypeMapping) throws IOException {
if (hiveDynamoDBMapping == null) {
/*
* Column mapping may be null when user has mapped a DynamoDB item
* onto a single hive map<string, string> column.
*/
return new DynamoDBQueryFilter();
}
DynamoDBClient client = new DynamoDBClient(conf);
String filterExprSerialized = conf.get(TableScanDesc.FILTER_EXPR_CONF_STR);
if (filterExprSerialized == null) {
return new DynamoDBQueryFilter();
}
ExprNodeDesc filterExpr =
ShimsLoader.getHiveShims().deserializeExpression(filterExprSerialized);
DynamoDBFilterPushdown pushdown = new DynamoDBFilterPushdown();
List<KeySchemaElement> schema =
client.describeTable(conf.get(DynamoDBConstants.TABLE_NAME)).getKeySchema();
DynamoDBQueryFilter queryFilter = pushdown.predicateToDynamoDBFilter(
schema, hiveDynamoDBMapping, hiveTypeMapping, filterExpr);
return queryFilter;
}
private TableDescription getTableDescription(String hashType, String rangeType) {
List<KeySchemaElement> keySchema = new ArrayList<>();
List<AttributeDefinition> definitions = new ArrayList<>();
keySchema.add(new KeySchemaElement().withAttributeName("hashKey").withKeyType(KeyType.HASH));
definitions.add(new AttributeDefinition().withAttributeName("hashKey").withAttributeType
(hashType));
if (rangeType != null) {
keySchema.add(new KeySchemaElement().withAttributeName("rangeKey").withKeyType(KeyType
.RANGE));
definitions.add(new AttributeDefinition().withAttributeName("rangeKey").withAttributeType
(rangeType));
}
TableDescription description = new TableDescription().withKeySchema(keySchema)
.withAttributeDefinitions(definitions).withProvisionedThroughput(new
ProvisionedThroughputDescription().withReadCapacityUnits(1000L)
.withWriteCapacityUnits(1000L));
return description;
}
static void createExampleTable() {
// Provide the initial provisioned throughput values as Java long data
// types
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput().withReadCapacityUnits(5L)
.withWriteCapacityUnits(6L);
CreateTableRequest request = new CreateTableRequest().withTableName(tableName)
.withProvisionedThroughput(provisionedThroughput);
ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();
attributeDefinitions.add(new AttributeDefinition().withAttributeName("Id").withAttributeType("N"));
request.setAttributeDefinitions(attributeDefinitions);
ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>();
tableKeySchema.add(new KeySchemaElement().withAttributeName("Id").withKeyType(KeyType.HASH)); // Partition
// key
request.setKeySchema(tableKeySchema);
client.createTable(request);
waitForTableToBecomeAvailable(tableName);
getTableInformation();
}
private static CreateTableResult createTable(AmazonDynamoDB ddb, String tableName, String hashKeyName) {
List<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();
attributeDefinitions.add(new AttributeDefinition(hashKeyName, ScalarAttributeType.S));
List<KeySchemaElement> ks = new ArrayList<KeySchemaElement>();
ks.add(new KeySchemaElement(hashKeyName, KeyType.HASH));
ProvisionedThroughput provisionedthroughput = new ProvisionedThroughput(1000L, 1000L);
CreateTableRequest request =
new CreateTableRequest()
.withTableName(tableName)
.withAttributeDefinitions(attributeDefinitions)
.withKeySchema(ks)
.withProvisionedThroughput(provisionedthroughput);
return ddb.createTable(request);
}
private static void createTable() {
List<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();
attributeDefinitions.add(new AttributeDefinition().withAttributeName("name").withAttributeType("S"));
List<KeySchemaElement> ks = new ArrayList<KeySchemaElement>();
ks.add(new KeySchemaElement().withAttributeName("name").withKeyType(KeyType.HASH)); // Partition
// key
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput().withReadCapacityUnits(10L)
.withWriteCapacityUnits(10L);
CreateTableRequest request = new CreateTableRequest().withTableName(TABLENAME)
.withAttributeDefinitions(attributeDefinitions).withKeySchema(ks)
.withProvisionedThroughput(provisionedThroughput);
try {
CreateTableResult createdTableDescription = dynamoDBClient.createTable(request);
logger.info("Created Table: " + createdTableDescription);
// Wait for it to become active
waitForTableToBecomeAvailable(TABLENAME);
}
catch (ResourceInUseException e) {
logger.warn("Table already existed", e);
}
}
public void waitForTableActive(String tableName,
List<AttributeDefinition> definitions,
List<KeySchemaElement> keySchema,
List<LocalSecondaryIndex> localIndexes,
long waitTimeSeconds) throws InterruptedException {
if(waitTimeSeconds < 0) {
throw new IllegalArgumentException("Invalid waitTimeSeconds " + waitTimeSeconds);
}
long startTimeMs = System.currentTimeMillis();
long elapsedMs = 0;
do {
String status = verifyTableExists(tableName, definitions, keySchema, localIndexes);
if(TableStatus.ACTIVE.toString().equals(status)) {
return;
}
if(TableStatus.DELETING.toString().equals(status)) {
throw new ResourceInUseException("Table " + tableName + " is " + status + ", and waiting for it to become ACTIVE is not useful.");
}
Thread.sleep(10 * 1000);
elapsedMs = System.currentTimeMillis() - startTimeMs;
} while(elapsedMs / 1000.0 < waitTimeSeconds);
throw new ResourceInUseException("Table " + tableName + " did not become ACTIVE after " + waitTimeSeconds + " seconds.");
}
/**
* Used to create the Identity Table. This function only needs to be called
* once.
*/
protected void createIdentityTable() throws DataAccessException {
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput()
.withReadCapacityUnits(10L)
.withWriteCapacityUnits(5L);
ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();
attributeDefinitions
.add(new AttributeDefinition().withAttributeName(ATTRIBUTE_USERNAME).withAttributeType("S"));
ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>();
tableKeySchema.add(new KeySchemaElement().withAttributeName(ATTRIBUTE_USERNAME).withKeyType(KeyType.HASH));
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(USER_TABLE)
.withProvisionedThroughput(provisionedThroughput)
.withAttributeDefinitions(attributeDefinitions)
.withKeySchema(tableKeySchema);
try {
ddb.createTable(createTableRequest);
} catch (AmazonClientException e) {
throw new DataAccessException("Failed to create table: " + USER_TABLE, e);
}
}
/**
* Used to create the device table. This function only needs to be called
* once.
*/
protected void createDeviceTable() throws DataAccessException {
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput()
.withReadCapacityUnits(10L)
.withWriteCapacityUnits(5L);
ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();
attributeDefinitions.add(new AttributeDefinition().withAttributeName(
ATTRIBUTE_UID).withAttributeType("S"));
ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>();
tableKeySchema.add(new KeySchemaElement().withAttributeName(ATTRIBUTE_UID)
.withKeyType(KeyType.HASH));
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(DEVICE_TABLE)
.withProvisionedThroughput(provisionedThroughput)
.withAttributeDefinitions(attributeDefinitions)
.withKeySchema(tableKeySchema);
try {
ddb.createTable(createTableRequest);
} catch (AmazonClientException e) {
throw new DataAccessException("Failed to create table: " + DEVICE_TABLE, e);
}
}
@BeforeClass
public static void setUpTestData() throws Exception {
String keyName = "id";
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(TABLE_NAME)
.withKeySchema(new KeySchemaElement().withAttributeName(keyName).withKeyType(KeyType.HASH))
.withAttributeDefinitions(
new AttributeDefinition().withAttributeName(keyName).withAttributeType(
ScalarAttributeType.S));
createTableRequest.setProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits(10L)
.withWriteCapacityUnits(5L));
TableUtils.createTableIfNotExists(dynamo, createTableRequest);
TableUtils.waitUntilActive(dynamo, TABLE_NAME);
createTestData();
}
@BeforeClass
public static void setUp() throws Exception {
// Create a table
DynamoDBTestBase.setUpTestBase();
String keyName = KEY_NAME;
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(TABLE_NAME)
.withKeySchema(new KeySchemaElement().withAttributeName(keyName).withKeyType(KeyType.HASH))
.withAttributeDefinitions(
new AttributeDefinition().withAttributeName(keyName).withAttributeType(
ScalarAttributeType.S));
createTableRequest.setProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits(10L)
.withWriteCapacityUnits(5L));
if (TableUtils.createTableIfNotExists(dynamo, createTableRequest)) {
TableUtils.waitUntilActive(dynamo, TABLE_NAME);
}
}
protected static void setUpTableWithRangeAttribute() throws Exception {
setUp();
String keyName = DynamoDBCryptoIntegrationTestBase.KEY_NAME;
String rangeKeyAttributeName = "rangeKey";
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(TABLE_WITH_RANGE_ATTRIBUTE)
.withKeySchema(new KeySchemaElement().withAttributeName(keyName).withKeyType(KeyType.HASH),
new KeySchemaElement().withAttributeName(rangeKeyAttributeName).withKeyType(KeyType.RANGE))
.withAttributeDefinitions(
new AttributeDefinition().withAttributeName(keyName).withAttributeType(
ScalarAttributeType.N),
new AttributeDefinition().withAttributeName(rangeKeyAttributeName).withAttributeType(
ScalarAttributeType.N));
createTableRequest.setProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits(10L)
.withWriteCapacityUnits(5L));
if (TableUtils.createTableIfNotExists(dynamo, createTableRequest)) {
TableUtils.waitUntilActive(dynamo, TABLE_WITH_RANGE_ATTRIBUTE);
}
}
@BeforeClass
public static void setUp() throws Exception {
DynamoDBCryptoIntegrationTestBase.setUp();
dynamoMapper = TestDynamoDBMapperFactory.createDynamoDBMapper(dynamo);
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(tableName)
.withKeySchema(new KeySchemaElement().withAttributeName(hashKeyName).withKeyType(KeyType.HASH))
.withKeySchema(new KeySchemaElement().withAttributeName(rangeKeyName).withKeyType(KeyType.RANGE))
.withAttributeDefinitions(new AttributeDefinition().withAttributeName(hashKeyName)
.withAttributeType(ScalarAttributeType.S))
.withAttributeDefinitions(new AttributeDefinition().withAttributeName(rangeKeyName)
.withAttributeType(ScalarAttributeType.N));
createTableRequest.setProvisionedThroughput(DEFAULT_PROVISIONED_THROUGHPUT);
if (TableUtils.createTableIfNotExists(dynamo, createTableRequest)) {
TableUtils.waitUntilActive(dynamo, tableName);
}
}
@BeforeClass
public static void setUp() throws Exception {
DynamoDBMapperCryptoIntegrationTestBase.setUp();
// Create a table
String keyName = DynamoDBMapperCryptoIntegrationTestBase.KEY_NAME;
String rangeKeyAttributeName = "rangeKey";
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(TABLE_NAME)
.withKeySchema(new KeySchemaElement().withAttributeName(keyName).withKeyType(KeyType.HASH),
new KeySchemaElement().withAttributeName(rangeKeyAttributeName).withKeyType(KeyType.RANGE))
.withAttributeDefinitions(
new AttributeDefinition().withAttributeName(keyName).withAttributeType(
ScalarAttributeType.S),
new AttributeDefinition().withAttributeName(rangeKeyAttributeName).withAttributeType(
ScalarAttributeType.S));
createTableRequest.setProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits(10L)
.withWriteCapacityUnits(5L));
if (TableUtils.createTableIfNotExists(dynamo, createTableRequest)) {
TableUtils.waitUntilActive(dynamo, TABLE_NAME);
}
}
private CreateTableResult createTable() throws Exception {
List<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();
AttributeDefinition attributeDefinition = new AttributeDefinition()
.withAttributeName(TEST_ATTRIBUTE)
.withAttributeType(ScalarAttributeType.S);
attributeDefinitions.add(attributeDefinition);
String tableName = TEST_TABLE_NAME;
List<KeySchemaElement> keySchema = new ArrayList<KeySchemaElement>();
KeySchemaElement keySchemaElement = new KeySchemaElement()
.withAttributeName(TEST_ATTRIBUTE)
.withKeyType(KeyType.HASH);
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput()
.withReadCapacityUnits(UNITS)
.withWriteCapacityUnits(UNITS);
CreateTableResult result = dynamoDb.createTable(attributeDefinitions, tableName, keySchema, provisionedThroughput);
return result;
}
@Override
public void createStoreIfAbsent(String storeName, boolean bBinaryValues) {
String tableName = storeToTableName(storeName);
if (!Tables.doesTableExist(m_ddbClient, tableName)) {
// Create a table with a primary hash key named '_key', which holds a string
m_logger.info("Creating table: {}", tableName);
CreateTableRequest createTableRequest = new CreateTableRequest().withTableName(tableName)
.withKeySchema(new KeySchemaElement()
.withAttributeName(ROW_KEY_ATTR_NAME)
.withKeyType(KeyType.HASH))
.withAttributeDefinitions(new AttributeDefinition()
.withAttributeName(ROW_KEY_ATTR_NAME)
.withAttributeType(ScalarAttributeType.S))
.withProvisionedThroughput(new ProvisionedThroughput()
.withReadCapacityUnits(READ_CAPACITY_UNITS)
.withWriteCapacityUnits(WRITE_CAPACITY_UNITS));
m_ddbClient.createTable(createTableRequest).getTableDescription();
try {
Tables.awaitTableToBecomeActive(m_ddbClient, tableName);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
private boolean createTable(final String qName, final boolean dataIndexTable) {
return createTable(
qName,
dataIndexTable
? () -> new CreateTableRequest().withTableName(qName).withAttributeDefinitions(
new AttributeDefinition(
DynamoDBRow.GW_PARTITION_ID_KEY,
ScalarAttributeType.B)).withKeySchema(
new KeySchemaElement(DynamoDBRow.GW_PARTITION_ID_KEY, KeyType.HASH))
: () -> new CreateTableRequest().withTableName(qName).withAttributeDefinitions(
new AttributeDefinition(DynamoDBRow.GW_PARTITION_ID_KEY, ScalarAttributeType.B),
new AttributeDefinition(
DynamoDBRow.GW_RANGE_KEY,
ScalarAttributeType.B)).withKeySchema(
new KeySchemaElement(DynamoDBRow.GW_PARTITION_ID_KEY, KeyType.HASH),
new KeySchemaElement(DynamoDBRow.GW_RANGE_KEY, KeyType.RANGE)));
}
/**
* Used to create the device table. This function only needs to be called
* once.
*/
protected void createDeviceTable() throws DataAccessException {
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput()
.withReadCapacityUnits(10L)
.withWriteCapacityUnits(5L);
ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();
attributeDefinitions.add(new AttributeDefinition().withAttributeName(
ATTRIBUTE_UID).withAttributeType("S"));
ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>();
tableKeySchema.add(new KeySchemaElement().withAttributeName(ATTRIBUTE_UID)
.withKeyType(KeyType.HASH));
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(DEVICE_TABLE)
.withProvisionedThroughput(provisionedThroughput)
.withAttributeDefinitions(attributeDefinitions)
.withKeySchema(tableKeySchema);
try {
ddb.createTable(createTableRequest);
} catch (AmazonClientException e) {
throw new DataAccessException("Failed to create table: " + DEVICE_TABLE, e);
}
}
/**
* Used to create the device table. This function only needs to be called
* once.
*/
protected void createDeviceTable() throws DataAccessException {
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput()
.withReadCapacityUnits(10L)
.withWriteCapacityUnits(5L);
ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();
attributeDefinitions.add(new AttributeDefinition().withAttributeName(
ATTRIBUTE_UID).withAttributeType("S"));
ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>();
tableKeySchema.add(new KeySchemaElement().withAttributeName(ATTRIBUTE_UID)
.withKeyType(KeyType.HASH));
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName(DEVICE_TABLE)
.withProvisionedThroughput(provisionedThroughput)
.withAttributeDefinitions(attributeDefinitions)
.withKeySchema(tableKeySchema);
try {
ddb.createTable(createTableRequest);
} catch (AmazonClientException e) {
throw new DataAccessException("Failed to create table: " + DEVICE_TABLE, e);
}
}
static void createExampleTable() {
// Provide the initial provisioned throughput values as Java long data types
ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput()
.withReadCapacityUnits(5L)
.withWriteCapacityUnits(6L);
CreateTableRequest request = new CreateTableRequest()
.withTableName(tableName)
.withProvisionedThroughput(provisionedThroughput);
ArrayList<AttributeDefinition> attributeDefinitions= new ArrayList<AttributeDefinition>();
attributeDefinitions.add(new AttributeDefinition().withAttributeName("Id").withAttributeType("N"));
request.setAttributeDefinitions(attributeDefinitions);
ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>();
tableKeySchema.add(new KeySchemaElement().withAttributeName("Id").withKeyType(KeyType.HASH));
request.setKeySchema(tableKeySchema);
client.createTable(request);
waitForTableToBecomeAvailable(tableName);
getTableInformation();
}
public static void main(String[] args) throws Exception {
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
client.setEndpoint("http://localhost:8000");
DynamoDB dynamoDB = new DynamoDB(client);
String tableName = "Movies";
Table table = dynamoDB.createTable(tableName,
Arrays.asList(
new KeySchemaElement("year", KeyType.HASH),
new KeySchemaElement("title", KeyType.RANGE)),
Arrays.asList(
new AttributeDefinition("year", ScalarAttributeType.N),
new AttributeDefinition("title", ScalarAttributeType.S)),
new ProvisionedThroughput(10L, 10L));
try {
TableUtils.waitUntilActive(client, tableName);
System.out.println("Table status: " + table.getDescription().getTableStatus());
} catch (AmazonClientException e) {
e.printStackTrace();
System.exit(1);
}
}
private static KeyNames getKeys(List<KeySchemaElement> keys)
{
String hashKey = null;
String rangeKey = null;
for (KeySchemaElement key : keys) {
if (key.getKeyType().equals(KeyType.HASH.toString())) {
hashKey = key.getAttributeName();
}
else if (key.getKeyType().equals(KeyType.RANGE.toString())) {
rangeKey = key.getAttributeName();
}
}
return new KeyNames(hashKey, rangeKey);
}
private TableDescription getTableDescription(String tableName, Collection<AttributeDefinition> attributeDefinitions, Collection<KeySchemaElement> keySchema) {
TableDescription tableDescription = (new TableDescription())
.withTableName(tableName)
.withAttributeDefinitions(attributeDefinitions)
.withKeySchema(keySchema)
.withTableStatus(TableStatus.ACTIVE)
.withCreationDateTime(new Date())
.withTableArn(tableName);
return tableDescription;
}
protected Map<String, AttributeValue> createKeyMap(final String tableName, final Map<String, AttributeValue> item) {
if (tableName == null) {
throw new IllegalArgumentException("must specify a tableName");
}
if (item == null) {
throw new IllegalArgumentException("must specify an item");
}
List<KeySchemaElement> schema = getTableSchema(tableName);
Map<String, AttributeValue> key = new HashMap<String, AttributeValue>(schema.size());
for (KeySchemaElement element : schema) {
key.put(element.getAttributeName(), item.get(element.getAttributeName()));
}
return key;
}
@PostConstruct
public void init() {
try {
dynamoDB.createTable(tableName, Arrays.asList(new KeySchemaElement("installedAppId", KeyType.HASH)),
Arrays.asList(new AttributeDefinition("installedAppId", "S")), new ProvisionedThroughput(10L, 10L));
} catch (ResourceInUseException e) {
log.info("InstalledAppContext table already exists");
}
}
@Test
public void initCreatesTable() {
when(dynamoDB.createTable(eq("installedAppContext"),
eq(Arrays.asList(new KeySchemaElement("installedAppId", KeyType.HASH))),
eq(Arrays.asList(new AttributeDefinition("installedAppId", "S"))), any())).thenReturn(table);
tester.init();
verify(dynamoDB).createTable(eq("installedAppContext"),
eq(Arrays.asList(new KeySchemaElement("installedAppId", KeyType.HASH))),
eq(Arrays.asList(new AttributeDefinition("installedAppId", "S"))), any());
}