# WARNING ABOUT GENERATED CODE # # This file is generated. See the contributing guide for more information: # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md # # WARNING ABOUT GENERATED CODE module Aws::DynamoDB class Resource # @param options ({}) # @option options [Client] :client def initialize(options = {}) @client = options[:client] || Client.new(options) end # @return [Client] def client @client end # @!group Actions # @example Request syntax with placeholder values # # dynamo_db.batch_get_item({ # request_items: { # required # "TableName" => { # keys: [ # required # { # "AttributeName" => "value", # value # }, # ], # attributes_to_get: ["AttributeName"], # consistent_read: false, # projection_expression: "ProjectionExpression", # expression_attribute_names: { # "ExpressionAttributeNameVariable" => "AttributeName", # }, # }, # }, # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE # }) # @param [Hash] options ({}) # @option options [required, Hash] :request_items # A map of one or more table names and, for each table, a map that # describes one or more items to retrieve from that table. Each table # name can be used only once per `BatchGetItem` request. # # Each element in the map of items to retrieve consists of the # following: # # * `ConsistentRead` - If `true`, a strongly consistent read is used; if # `false` (the default), an eventually consistent read is used. # # * `ExpressionAttributeNames` - One or more substitution tokens for # attribute names in the `ProjectionExpression` parameter. The # following are some use cases for using `ExpressionAttributeNames`\: # # * To access an attribute whose name conflicts with a DynamoDB # reserved word. # # * To create a placeholder for repeating occurrences of an attribute # name in an expression. # # * To prevent special characters in an attribute name from being # misinterpreted in an expression. # # Use the **#** character in an expression to dereference an attribute # name. For example, consider the following attribute name: # # * `Percentile` # # ^ # # The name of this attribute conflicts with a reserved word, so it # cannot be used directly in an expression. (For the complete list of # reserved words, see [Reserved Words][1] in the *Amazon DynamoDB # Developer Guide*). To work around this, you could specify the # following for `ExpressionAttributeNames`\: # # * `\{"#P":"Percentile"\}` # # ^ # # You could then use this substitution in an expression, as in this # example: # # * `#P = :val` # # ^ # # Tokens that begin with the **\:** character are *expression # attribute values*, which are placeholders for the actual value at # runtime. # # # # For more information on expression attribute names, see [Accessing # Item Attributes][2] in the *Amazon DynamoDB Developer Guide*. # # * `Keys` - An array of primary key attribute values that define # specific items in the table. For each primary key, you must provide # *all* of the key attributes. For example, with a simple primary key, # you only need to provide the partition key value. For a composite # key, you must provide *both* the partition key value and the sort # key value. # # * `ProjectionExpression` - A string that identifies one or more # attributes to retrieve from the table. These attributes can include # scalars, sets, or elements of a JSON document. The attributes in the # expression must be separated by commas. # # If no attribute names are specified, then all attributes will be # returned. If any of the requested attributes are not found, they # will not appear in the result. # # For more information, see [Accessing Item Attributes][2] in the # *Amazon DynamoDB Developer Guide*. # # * `AttributesToGet` - This is a legacy parameter. Use # `ProjectionExpression` instead. For more information, see # [AttributesToGet][3] in the *Amazon DynamoDB Developer Guide*. # # # # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html # [3]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.AttributesToGet.html # @option options [String] :return_consumed_capacity # Determines the level of detail about provisioned throughput # consumption that is returned in the response: # # * `INDEXES` - The response includes the aggregate `ConsumedCapacity` # for the operation, together with `ConsumedCapacity` for each table # and secondary index that was accessed. # # Note that some operations, such as `GetItem` and `BatchGetItem`, do # not access any indexes at all. In these cases, specifying `INDEXES` # will only return `ConsumedCapacity` information for table(s). # # * `TOTAL` - The response includes only the aggregate # `ConsumedCapacity` for the operation. # # * `NONE` - No `ConsumedCapacity` details are included in the response. # @return [Types::BatchGetItemOutput] def batch_get_item(options = {}) resp = @client.batch_get_item(options) resp.data end # @example Request syntax with placeholder values # # dynamo_db.batch_write_item({ # request_items: { # required # "TableName" => [ # { # put_request: { # item: { # required # "AttributeName" => "value", # value # }, # }, # delete_request: { # key: { # required # "AttributeName" => "value", # value # }, # }, # }, # ], # }, # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE # return_item_collection_metrics: "SIZE", # accepts SIZE, NONE # }) # @param [Hash] options ({}) # @option options [required, Hash] :request_items # A map of one or more table names and, for each table, a list of # operations to be performed (`DeleteRequest` or `PutRequest`). Each # element in the map consists of the following: # # * `DeleteRequest` - Perform a `DeleteItem` operation on the specified # item. The item to be deleted is identified by a `Key` subelement: # # * `Key` - A map of primary key attribute values that uniquely # identify the ! item. Each entry in this map consists of an # attribute name and an attribute value. For each primary key, you # must provide *all* of the key attributes. For example, with a # simple primary key, you only need to provide a value for the # partition key. For a composite primary key, you must provide # values for *both* the partition key and the sort key. # # ^ # # * `PutRequest` - Perform a `PutItem` operation on the specified item. # The item to be put is identified by an `Item` subelement: # # * `Item` - A map of attributes and their values. Each entry in this # map consists of an attribute name and an attribute value. # Attribute values must not be null; string and binary type # attributes must have lengths greater than zero; and set type # attributes must not be empty. Requests that contain empty values # will be rejected with a `ValidationException` exception. # # If you specify any attributes that are part of an index key, then # the data types for those attributes must match those of the schema # in the table's attribute definition. # @option options [String] :return_consumed_capacity # Determines the level of detail about provisioned throughput # consumption that is returned in the response: # # * `INDEXES` - The response includes the aggregate `ConsumedCapacity` # for the operation, together with `ConsumedCapacity` for each table # and secondary index that was accessed. # # Note that some operations, such as `GetItem` and `BatchGetItem`, do # not access any indexes at all. In these cases, specifying `INDEXES` # will only return `ConsumedCapacity` information for table(s). # # * `TOTAL` - The response includes only the aggregate # `ConsumedCapacity` for the operation. # # * `NONE` - No `ConsumedCapacity` details are included in the response. # @option options [String] :return_item_collection_metrics # Determines whether item collection metrics are returned. If set to # `SIZE`, the response includes statistics about item collections, if # any, that were modified during the operation are returned in the # response. If set to `NONE` (the default), no statistics are returned. # @return [Types::BatchWriteItemOutput] def batch_write_item(options = {}) resp = @client.batch_write_item(options) resp.data end # @example Request syntax with placeholder values # # table = dynamo_db.create_table({ # attribute_definitions: [ # required # { # attribute_name: "KeySchemaAttributeName", # required # attribute_type: "S", # required, accepts S, N, B # }, # ], # table_name: "TableName", # required # key_schema: [ # required # { # attribute_name: "KeySchemaAttributeName", # required # key_type: "HASH", # required, accepts HASH, RANGE # }, # ], # local_secondary_indexes: [ # { # index_name: "IndexName", # required # key_schema: [ # required # { # attribute_name: "KeySchemaAttributeName", # required # key_type: "HASH", # required, accepts HASH, RANGE # }, # ], # projection: { # required # projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE # non_key_attributes: ["NonKeyAttributeName"], # }, # }, # ], # global_secondary_indexes: [ # { # index_name: "IndexName", # required # key_schema: [ # required # { # attribute_name: "KeySchemaAttributeName", # required # key_type: "HASH", # required, accepts HASH, RANGE # }, # ], # projection: { # required # projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE # non_key_attributes: ["NonKeyAttributeName"], # }, # provisioned_throughput: { # required # read_capacity_units: 1, # required # write_capacity_units: 1, # required # }, # }, # ], # provisioned_throughput: { # required # read_capacity_units: 1, # required # write_capacity_units: 1, # required # }, # stream_specification: { # stream_enabled: false, # stream_view_type: "NEW_IMAGE", # accepts NEW_IMAGE, OLD_IMAGE, NEW_AND_OLD_IMAGES, KEYS_ONLY # }, # }) # @param [Hash] options ({}) # @option options [required, Array] :attribute_definitions # An array of attributes that describe the key schema for the table and # indexes. # @option options [required, String] :table_name # The name of the table to create. # @option options [required, Array] :key_schema # Specifies the attributes that make up the primary key for a table or # an index. The attributes in `KeySchema` must also be defined in the # `AttributeDefinitions` array. For more information, see [Data # Model][1] in the *Amazon DynamoDB Developer Guide*. # # Each `KeySchemaElement` in the array is composed of: # # * `AttributeName` - The name of this key attribute. # # * `KeyType` - The role that the key attribute will assume: # # * `HASH` - partition key # # * `RANGE` - sort key # # The partition key of an item is also known as its *hash attribute*. # The term "hash attribute" derives from DynamoDB' usage of an # internal hash function to evenly distribute data items across # partitions, based on their partition key values. # # The sort key of an item is also known as its *range attribute*. The # term "range attribute" derives from the way DynamoDB stores items # with the same partition key physically close together, in sorted order # by the sort key value. # # # # For a simple primary key (partition key), you must provide exactly one # element with a `KeyType` of `HASH`. # # For a composite primary key (partition key and sort key), you must # provide exactly two elements, in this order: The first element must # have a `KeyType` of `HASH`, and the second element must have a # `KeyType` of `RANGE`. # # For more information, see [Specifying the Primary Key][2] in the # *Amazon DynamoDB Developer Guide*. # # # # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key # @option options [Array] :local_secondary_indexes # One or more local secondary indexes (the maximum is five) to be # created on the table. Each index is scoped to a given partition key # value. There is a 10 GB size limit per partition key value; otherwise, # the size of a local secondary index is unconstrained. # # Each local secondary index in the array includes the following: # # * `IndexName` - The name of the local secondary index. Must be unique # only for this table. # # # # * `KeySchema` - Specifies the key schema for the local secondary # index. The key schema must begin with the same partition key as the # table. # # * `Projection` - Specifies attributes that are copied (projected) from # the table into the index. These are in addition to the primary key # attributes and index key attributes, which are automatically # projected. Each attribute specification is composed of: # # * `ProjectionType` - One of the following: # # * `KEYS_ONLY` - Only the index and primary keys are projected into # the index. # # * `INCLUDE` - Only the specified table attributes are projected # into the index. The list of projected attributes are in # `NonKeyAttributes`. # # * `ALL` - All of the table attributes are projected into the # index. # # * `NonKeyAttributes` - A list of one or more non-key attribute names # that are projected into the secondary index. The total count of # attributes provided in `NonKeyAttributes`, summed across all of # the secondary indexes, must not exceed 20. If you project the same # attribute into two different indexes, this counts as two distinct # attributes when determining the total. # @option options [Array] :global_secondary_indexes # One or more global secondary indexes (the maximum is five) to be # created on the table. Each global secondary index in the array # includes the following: # # * `IndexName` - The name of the global secondary index. Must be unique # only for this table. # # # # * `KeySchema` - Specifies the key schema for the global secondary # index. # # * `Projection` - Specifies attributes that are copied (projected) from # the table into the index. These are in addition to the primary key # attributes and index key attributes, which are automatically # projected. Each attribute specification is composed of: # # * `ProjectionType` - One of the following: # # * `KEYS_ONLY` - Only the index and primary keys are projected into # the index. # # * `INCLUDE` - Only the specified table attributes are projected # into the index. The list of projected attributes are in # `NonKeyAttributes`. # # * `ALL` - All of the table attributes are projected into the # index. # # * `NonKeyAttributes` - A list of one or more non-key attribute names # that are projected into the secondary index. The total count of # attributes provided in `NonKeyAttributes`, summed across all of # the secondary indexes, must not exceed 20. If you project the same # attribute into two different indexes, this counts as two distinct # attributes when determining the total. # # * `ProvisionedThroughput` - The provisioned throughput settings for # the global secondary index, consisting of read and write capacity # units. # @option options [required, Types::ProvisionedThroughput] :provisioned_throughput # Represents the provisioned throughput settings for a specified table # or index. The settings can be modified using the `UpdateTable` # operation. # # For current minimum and maximum provisioned throughput values, see # [Limits][1] in the *Amazon DynamoDB Developer Guide*. # # # # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html # @option options [Types::StreamSpecification] :stream_specification # The settings for DynamoDB Streams on the table. These settings consist # of: # # * `StreamEnabled` - Indicates whether Streams is to be enabled (true) # or disabled (false). # # * `StreamViewType` - When an item in the table is modified, # `StreamViewType` determines what information is written to the # table's stream. Valid values for `StreamViewType` are: # # * `KEYS_ONLY` - Only the key attributes of the modified item are # written to the stream. # # * `NEW_IMAGE` - The entire item, as it appears after it was # modified, is written to the stream. # # * `OLD_IMAGE` - The entire item, as it appeared before it was # modified, is written to the stream. # # * `NEW_AND_OLD_IMAGES` - Both the new and the old item images of the # item are written to the stream. # @return [Table] def create_table(options = {}) resp = @client.create_table(options) Table.new( name: resp.data.table_description.table_name, data: resp.data.table_description, client: @client ) end # @!group Associations # @param [String] name # @return [Table] def table(name) Table.new( name: name, client: @client ) end # @example Request syntax with placeholder values # # dynamo_db.tables() # @param [Hash] options ({}) # @return [Table::Collection] def tables(options = {}) batches = Enumerator.new do |y| resp = @client.list_tables(options) resp.each_page do |page| batch = [] page.data.table_names.each do |t| batch << Table.new( name: t, client: @client ) end y.yield(batch) end end Table::Collection.new(batches) end end end