NAME
Net::Amazon::DynamoDB::Table - Higher level interface to Net::Amazon::DyamoDB::Lite
SYNOPSIS
use Net::Amazon::DynamoDB::Table;
my $table = Net::Amazon::DynamoDB::Table->new(
region => 'us-east-1', # required
table => $table, # required
hash_key => 'planet', # required
range_key => 'species', # required if table has a range key
access_key => ..., # default: $ENV{AWS_ACCESS_KEY};
secret_key => ..., # default: $ENV{AWS_SECRET_KEY};
);
# create or update an item
$table->put(Item => { planet => 'Mars', ... });
# get the item with the specified primary key; returns a hashref
my $item = $table->get(planet => 'Mars');
# delete the item with the specified primary key
$table->delete(planet => 'Mars');
# scan the table for items; returns an arrayref of items
my $items_arrayref = $table->scan();
# scan the table for items; returns items as a hash of key value pairs
my $items_hashref = $table->scan_as_hashref();
DESCRIPTION
A Net::Amazon::DynamoDB::Table object represents a single table in DynamoDB. This module provides a simple UI layer on top of Net::Amazon::DynamoDB::Lite.
There are two features which make this class "simpler" than Net::Amazon::DynamoDB::Lite.
The first is that you don't need to specify the TableName in every call.
The second is that you don't need to worry about types.
METHODS
new()
Returns a Net::Amazon::DynamoDB::Table object. Accepts the following attributes:
region => 'us-east-1', # required
table => $table, # required
hash_key => $hash_key, # required
range_key => $range_key, # required if table has a range key
access_key => ..., # default: $ENV{AWS_ACCESS_KEY};
secret_key => ..., # default: $ENV{AWS_SECRET_KEY};
put()
Creates a new item, or replaces an old item with a new item. This method accepts the same parameters as those accepted by the AWS DynamoDB put_item api endpoint. Note however, that you don't need to specify any types. This module does that for you. For example:
$dynamodb->put((
Item => {
a => 1, # a Number
b => "boop", # a String
c => [ "hi mom", 23.5 ], # a List composed of a String and Number
d => { # a Map
chipmunks => [qw/alvin theodore/], # a List of Strings
backstreet_boys => [qw/Nick Kevin/], # a List of Strings
thing => 23, # a Number
},
},
);
get()
Returns a hashref representing the item specified by the given primary key. You can specify the primary key using the HashKey and RangeKey parameters provided for convenience by this module:
my $item = $dynamodb->get(
planet => 'Mars',
species => 'green aliens',
);
Or you can explicitly specify the primary key and types using the Key parameter like this:
my $item = $dynamodb->get(
Key => [
{ planet => { S => 'Mars' } },
{ species => { N => 'green aliens' } },
],
);
This method also accepts the same parameters as those accepted by the AWS DynamoDB get_item api endpoint. For example:
my $item = $dynamodb->get(
planet => 'Mars',
species => 'green aliens',
ConsistentRead => 1,
);
delete()
Deletes a single item from a table using the given primary key. You can specify the primary key using the HashKey and RangeKey parameters provided for convenience by this module:
my $item = $dynamodb->delete(
planet => 'Mars',
species => 'green aliens',
);
Or you can explicitly specify the primary key and types using the Key parameter like this:
my $item = $dynamodb->get(
Key => [
{ planet => { S => 'Mars' } },
{ species => { N => 'green aliens' } },
],
);
This method also accepts the same parameters as those accepted by the AWS DynamoDB get_item api endpoint. For example:
my $item = $dynamodb->get(
planet => 'Mars',
species => 'green aliens',
ConditionExpression => "planet := :p",
ExpressionAttributeValues => { ':p' => { S => 'Mars' } },
);
scan()
This method accepts the same parameters as those accepted by the AWS DynamoDB scan api endpoint. It returns an arrayref of item hashrefs.
scan_as_hashref()
This method accepts the same parameters as those accepted by the AWS DynamoDB scan api endpoint. It returns the results as a hashref that looks like this:
# { $hash_key_value1 => $item1,
# $hash_key_value2 => $item2,
# ...,
# }
ACKNOWLEDGEMENTS
Thanks to DuckDuckGo for making this module possible.
LICENSE
Copyright (C) Eric Johnson.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Eric Johnson <eric.git@iijo.org>