aws-sdk-dynamodb 1.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f95265c3a54cc59778e34414c01a8fb401cbd1ad
4
+ data.tar.gz: 3a14b56b0e7f2e4d552b5378f0a1d2a1c77107f0
5
+ SHA512:
6
+ metadata.gz: 31b3209fe57a6e852e0a1cf109093cb88aff9c169a6d8eae6cc6aa76802a43bfb6339a833c1363d8c7c755c86ece23412390ee9158653eccc9376f0b0a9e0445
7
+ data.tar.gz: 5d5fd93e5967bd355568ba79f7e83068dee217a6931a3a73450ae073ae82369ecb0e8ee38c9922ea9a340c27bbf752a4bf88c51f1333631577678af626504726
@@ -0,0 +1,49 @@
1
+ # WARNING ABOUT GENERATED CODE
2
+ #
3
+ # This file is generated. See the contributing for info on making contributions:
4
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
5
+ #
6
+ # WARNING ABOUT GENERATED CODE
7
+
8
+ require 'aws-sdk-core'
9
+ require 'aws-sigv4'
10
+
11
+ require_relative 'aws-sdk-dynamodb/types'
12
+ require_relative 'aws-sdk-dynamodb/client_api'
13
+ require_relative 'aws-sdk-dynamodb/client'
14
+ require_relative 'aws-sdk-dynamodb/errors'
15
+ require_relative 'aws-sdk-dynamodb/waiters'
16
+ require_relative 'aws-sdk-dynamodb/resource'
17
+ require_relative 'aws-sdk-dynamodb/table'
18
+ require_relative 'aws-sdk-dynamodb/customizations'
19
+
20
+ # This module provides support for Amazon DynamoDB. This module is available in the
21
+ # `aws-sdk-dynamodb` gem.
22
+ #
23
+ # # Client
24
+ #
25
+ # The {Client} class provides one method for each API operation. Operation
26
+ # methods each accept a hash of request parameters and return a response
27
+ # structure.
28
+ #
29
+ # See {Client} for more information.
30
+ #
31
+ # # Errors
32
+ #
33
+ # Errors returned from Amazon DynamoDB all
34
+ # extend {Errors::ServiceError}.
35
+ #
36
+ # begin
37
+ # # do stuff
38
+ # rescue Aws::DynamoDB::Errors::ServiceError
39
+ # # rescues all service API errors
40
+ # end
41
+ #
42
+ # See {Errors} for more information.
43
+ #
44
+ # @service
45
+ module Aws::DynamoDB
46
+
47
+ GEM_VERSION = '1.0.0.rc1'
48
+
49
+ end
@@ -0,0 +1,108 @@
1
+ require 'bigdecimal'
2
+ require 'stringio'
3
+ require 'set'
4
+
5
+ module Aws
6
+ module DynamoDB
7
+ # @api private
8
+ class AttributeValue
9
+
10
+ def initialize
11
+ @marshaler = Marshaler.new
12
+ @unmarshaler = Unmarshaler.new
13
+ end
14
+
15
+ def marshal(value)
16
+ @marshaler.format(value)
17
+ end
18
+
19
+ def unmarshal(value)
20
+ @unmarshaler.format(value)
21
+ end
22
+
23
+ class Marshaler
24
+ STRINGY_TEST = lambda { |val| val.respond_to?(:to_str) }
25
+
26
+ def format(obj)
27
+ case obj
28
+ when Hash
29
+ obj.each.with_object(m:{}) do |(key, value), map|
30
+ map[:m][key.to_s] = format(value)
31
+ end
32
+ when Array
33
+ obj.each.with_object(l:[]) do |value, list|
34
+ list[:l] << format(value)
35
+ end
36
+ when String then { s: obj }
37
+ when Symbol then { s: obj.to_s }
38
+ when STRINGY_TEST then { s: obj.to_str }
39
+ when Numeric then { n: obj.to_s }
40
+ when StringIO, IO then { b: obj }
41
+ when Set then format_set(obj)
42
+ when true, false then { bool: obj }
43
+ when nil then { null: true }
44
+ else
45
+ msg = "unsupported type, expected Hash, Array, Set, String, Numeric, "
46
+ msg << "IO, true, false, or nil, got #{obj.class.name}"
47
+ raise ArgumentError, msg
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def format_set(set)
54
+ case set.first
55
+ when String, Symbol then { ss: set.map(&:to_s) }
56
+ when STRINGY_TEST then { ss: set.map(&:to_str) }
57
+ when Numeric then { ns: set.map(&:to_s) }
58
+ when StringIO, IO then { bs: set.to_a }
59
+ else
60
+ msg = "set types only support String, Numeric, or IO objects"
61
+ raise ArgumentError, msg
62
+ end
63
+ end
64
+
65
+ end
66
+
67
+ class Unmarshaler
68
+
69
+ def format(obj)
70
+ type, value = extract_type_and_value(obj)
71
+ case type
72
+ when :m
73
+ value.each.with_object({}) do |(k, v), map|
74
+ map[k] = format(v)
75
+ end
76
+ when :l then value.map { |v| format(v) }
77
+ when :s then value
78
+ when :n then BigDecimal.new(value)
79
+ when :b then StringIO.new(value)
80
+ when :null then nil
81
+ when :bool then value
82
+ when :ss then Set.new(value)
83
+ when :ns then Set.new(value.map { |n| BigDecimal.new(n) })
84
+ when :bs then Set.new(value.map { |b| StringIO.new(b) })
85
+ else
86
+ raise ArgumentError, "unhandled type #{type.inspect}"
87
+ end
88
+ end
89
+
90
+ private
91
+
92
+ def extract_type_and_value(obj)
93
+ case obj
94
+ when Hash then obj.to_a.first
95
+ when Struct
96
+ obj.members.each do |key|
97
+ value = obj[key]
98
+ return [key, value] unless value.nil?
99
+ end
100
+ else
101
+ raise ArgumentError, "unhandled type #{obj.inspect}"
102
+ end
103
+ end
104
+
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,4467 @@
1
+ # WARNING ABOUT GENERATED CODE
2
+ #
3
+ # This file is generated. See the contributing for info on making contributions:
4
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
5
+ #
6
+ # WARNING ABOUT GENERATED CODE
7
+
8
+ require 'seahorse/client/plugins/content_length.rb'
9
+ require 'aws-sdk-core/plugins/credentials_configuration.rb'
10
+ require 'aws-sdk-core/plugins/logging.rb'
11
+ require 'aws-sdk-core/plugins/param_converter.rb'
12
+ require 'aws-sdk-core/plugins/param_validator.rb'
13
+ require 'aws-sdk-core/plugins/user_agent.rb'
14
+ require 'aws-sdk-core/plugins/helpful_socket_errors.rb'
15
+ require 'aws-sdk-core/plugins/retry_errors.rb'
16
+ require 'aws-sdk-core/plugins/global_configuration.rb'
17
+ require 'aws-sdk-core/plugins/regional_endpoint.rb'
18
+ require 'aws-sdk-core/plugins/response_paging.rb'
19
+ require 'aws-sdk-core/plugins/stub_responses.rb'
20
+ require 'aws-sdk-core/plugins/idempotency_token.rb'
21
+ require 'aws-sdk-core/plugins/signature_v4.rb'
22
+ require 'aws-sdk-core/plugins/protocols/json_rpc.rb'
23
+ require 'aws-sdk-dynamodb/plugins/extended_retries.rb'
24
+ require 'aws-sdk-dynamodb/plugins/simple_attributes.rb'
25
+ require 'aws-sdk-dynamodb/plugins/crc32_validation.rb'
26
+
27
+ Aws::Plugins::GlobalConfiguration.add_identifier(:dynamodb)
28
+
29
+ module Aws
30
+ module DynamoDB
31
+ class Client < Seahorse::Client::Base
32
+
33
+ include Aws::ClientStubs
34
+
35
+ @identifier = :dynamodb
36
+
37
+ set_api(ClientApi::API)
38
+
39
+ add_plugin(Seahorse::Client::Plugins::ContentLength)
40
+ add_plugin(Aws::Plugins::CredentialsConfiguration)
41
+ add_plugin(Aws::Plugins::Logging)
42
+ add_plugin(Aws::Plugins::ParamConverter)
43
+ add_plugin(Aws::Plugins::ParamValidator)
44
+ add_plugin(Aws::Plugins::UserAgent)
45
+ add_plugin(Aws::Plugins::HelpfulSocketErrors)
46
+ add_plugin(Aws::Plugins::RetryErrors)
47
+ add_plugin(Aws::Plugins::GlobalConfiguration)
48
+ add_plugin(Aws::Plugins::RegionalEndpoint)
49
+ add_plugin(Aws::Plugins::ResponsePaging)
50
+ add_plugin(Aws::Plugins::StubResponses)
51
+ add_plugin(Aws::Plugins::IdempotencyToken)
52
+ add_plugin(Aws::Plugins::SignatureV4)
53
+ add_plugin(Aws::Plugins::Protocols::JsonRpc)
54
+ add_plugin(Aws::DynamoDB::Plugins::ExtendedRetries)
55
+ add_plugin(Aws::DynamoDB::Plugins::SimpleAttributes)
56
+ add_plugin(Aws::DynamoDB::Plugins::CRC32Validation)
57
+
58
+ # @option options [required, Aws::CredentialProvider] :credentials
59
+ # Your AWS credentials. This can be an instance of any one of the
60
+ # following classes:
61
+ #
62
+ # * `Aws::Credentials` - Used for configuring static, non-refreshing
63
+ # credentials.
64
+ #
65
+ # * `Aws::InstanceProfileCredentials` - Used for loading credentials
66
+ # from an EC2 IMDS on an EC2 instance.
67
+ #
68
+ # * `Aws::SharedCredentials` - Used for loading credentials from a
69
+ # shared file, such as `~/.aws/config`.
70
+ #
71
+ # * `Aws::AssumeRoleCredentials` - Used when you need to assume a role.
72
+ #
73
+ # When `:credentials` are not configured directly, the following
74
+ # locations will be searched for credentials:
75
+ #
76
+ # * `Aws.config[:credentials]`
77
+ # * The `:access_key_id`, `:secret_access_key`, and `:session_token` options.
78
+ # * ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']
79
+ # * `~/.aws/credentials`
80
+ # * `~/.aws/config`
81
+ # * EC2 IMDS instance profile - When used by default, the timeouts are
82
+ # very aggressive. Construct and pass an instance of
83
+ # `Aws::InstanceProfileCredentails` to enable retries and extended
84
+ # timeouts.
85
+ # @option options [required, String] :region
86
+ # The AWS region to connect to. The configured `:region` is
87
+ # used to determine the service `:endpoint`. When not passed,
88
+ # a default `:region` is search for in the following locations:
89
+ #
90
+ # * `Aws.config[:region]`
91
+ # * `ENV['AWS_REGION']`
92
+ # * `ENV['AMAZON_REGION']`
93
+ # * `ENV['AWS_DEFAULT_REGION']`
94
+ # * `~/.aws/credentials`
95
+ # * `~/.aws/config`
96
+ # @option options [String] :access_key_id
97
+ # @option options [Boolean] :compute_checksums (true)
98
+ # When `true`, a CRC32 checksum is computed of every HTTP
99
+ # response body and compared against the `X-Amz-Crc32` header.
100
+ # If the checksums do not match, the request is re-sent.
101
+ # Failures can be retried up to `:retry_limit` times.
102
+ # @option options [Boolean] :convert_params (true)
103
+ # When `true`, an attempt is made to coerce request parameters into
104
+ # the required types.
105
+ # @option options [String] :endpoint
106
+ # The client endpoint is normally constructed from the `:region`
107
+ # option. You should only configure an `:endpoint` when connecting
108
+ # to test endpoints. This should be avalid HTTP(S) URI.
109
+ # @option options [Aws::Log::Formatter] :log_formatter (Aws::Log::Formatter.default)
110
+ # The log formatter.
111
+ # @option options [Symbol] :log_level (:info)
112
+ # The log level to send messages to the `:logger` at.
113
+ # @option options [Logger] :logger
114
+ # The Logger instance to send log messages to. If this option
115
+ # is not set, logging will be disabled.
116
+ # @option options [String] :profile ("default")
117
+ # Used when loading credentials from the shared credentials file
118
+ # at HOME/.aws/credentials. When not specified, 'default' is used.
119
+ # @option options [Integer] :retry_limit (3)
120
+ # The maximum number of times to retry failed requests. Only
121
+ # ~ 500 level server errors and certain ~ 400 level client errors
122
+ # are retried. Generally, these are throttling errors, data
123
+ # checksum errors, networking errors, timeout errors and auth
124
+ # errors from expired credentials.
125
+ # @option options [Integer] :retry_limit (10)
126
+ # The maximum number of times to retry failed requests. Only
127
+ # ~ 500 level server errors and certain ~ 400 level client errors
128
+ # are retried. Generally, these are throttling errors, data
129
+ # checksum errors, networking errors, timeout errors and auth
130
+ # errors from expired credentials.
131
+ # @option options [String] :secret_access_key
132
+ # @option options [String] :session_token
133
+ # @option options [Boolean] :simple_attributes (true)
134
+ # Enables working with DynamoDB attribute values using
135
+ # hashes, arrays, sets, integers, floats, booleans, and nil.
136
+ #
137
+ # Disabling this option requires that all attribute values have
138
+ # their types specified, e.g. `{ s: 'abc' }` instead of simply
139
+ # `'abc'`.
140
+ # @option options [Boolean] :simple_json (false)
141
+ # Disables request parameter conversion, validation, and formatting.
142
+ # Also disable response data type conversions. This option is useful
143
+ # when you want to ensure the highest level of performance by
144
+ # avoiding overhead of walking request parameters and response data
145
+ # structures.
146
+ #
147
+ # When `:simple_json` is enabled, the request parameters hash must
148
+ # be formatted exactly as the DynamoDB API expects.
149
+ # @option options [Boolean] :stub_responses (false)
150
+ # Causes the client to return stubbed responses. By default
151
+ # fake responses are generated and returned. You can specify
152
+ # the response data to return or errors to raise by calling
153
+ # {ClientStubs#stub_responses}. See {ClientStubs} for more information.
154
+ #
155
+ # ** Please note ** When response stubbing is enabled, no HTTP
156
+ # requests are made, and retries are disabled.
157
+ # @option options [Boolean] :validate_params (true)
158
+ # When `true`, request parameters are validated before
159
+ # sending the request.
160
+ def initialize(*args)
161
+ super
162
+ end
163
+
164
+ # @!group API Operations
165
+
166
+ # The *BatchGetItem* operation returns the attributes of one or more
167
+ # items from one or more tables. You identify requested items by primary
168
+ # key.
169
+ #
170
+ # A single operation can retrieve up to 16 MB of data, which can contain
171
+ # as many as 100 items. *BatchGetItem* will return a partial result if
172
+ # the response size limit is exceeded, the table's provisioned
173
+ # throughput is exceeded, or an internal processing failure occurs. If a
174
+ # partial result is returned, the operation returns a value for
175
+ # *UnprocessedKeys*. You can use this value to retry the operation
176
+ # starting with the next item to get.
177
+ #
178
+ # If you request more than 100 items *BatchGetItem* will return a
179
+ # *ValidationException* with the message "Too many items requested for
180
+ # the BatchGetItem call".
181
+ #
182
+ # For example, if you ask to retrieve 100 items, but each individual
183
+ # item is 300 KB in size, the system returns 52 items (so as not to
184
+ # exceed the 16 MB limit). It also returns an appropriate
185
+ # *UnprocessedKeys* value so you can get the next page of results. If
186
+ # desired, your application can include its own logic to assemble the
187
+ # pages of results into one data set.
188
+ #
189
+ # If *none* of the items can be processed due to insufficient
190
+ # provisioned throughput on all of the tables in the request, then
191
+ # *BatchGetItem* will return a *ProvisionedThroughputExceededException*.
192
+ # If *at least one* of the items is successfully processed, then
193
+ # *BatchGetItem* completes successfully, while returning the keys of the
194
+ # unread items in *UnprocessedKeys*.
195
+ #
196
+ # If DynamoDB returns any unprocessed items, you should retry the batch
197
+ # operation on those items. However, *we strongly recommend that you use
198
+ # an exponential backoff algorithm*. If you retry the batch operation
199
+ # immediately, the underlying read or write requests can still fail due
200
+ # to throttling on the individual tables. If you delay the batch
201
+ # operation using exponential backoff, the individual requests in the
202
+ # batch are much more likely to succeed.
203
+ #
204
+ # For more information, see [Batch Operations and Error Handling][1] in
205
+ # the *Amazon DynamoDB Developer Guide*.
206
+ #
207
+ # By default, *BatchGetItem* performs eventually consistent reads on
208
+ # every table in the request. If you want strongly consistent reads
209
+ # instead, you can set *ConsistentRead* to `true` for any or all tables.
210
+ #
211
+ # In order to minimize response latency, *BatchGetItem* retrieves items
212
+ # in parallel.
213
+ #
214
+ # When designing your application, keep in mind that DynamoDB does not
215
+ # return items in any particular order. To help parse the response by
216
+ # item, include the primary key values for the items in your request in
217
+ # the *AttributesToGet* parameter.
218
+ #
219
+ # If a requested item does not exist, it is not returned in the result.
220
+ # Requests for nonexistent items consume the minimum read capacity units
221
+ # according to the type of read. For more information, see [Capacity
222
+ # Units Calculations][2] in the *Amazon DynamoDB Developer Guide*.
223
+ #
224
+ #
225
+ #
226
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations
227
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations
228
+ # @option params [required, Hash<String,Types::KeysAndAttributes>] :request_items
229
+ # A map of one or more table names and, for each table, a map that
230
+ # describes one or more items to retrieve from that table. Each table
231
+ # name can be used only once per *BatchGetItem* request.
232
+ #
233
+ # Each element in the map of items to retrieve consists of the
234
+ # following:
235
+ #
236
+ # * *ConsistentRead* - If `true`, a strongly consistent read is used; if
237
+ # `false` (the default), an eventually consistent read is used.
238
+ #
239
+ # * *ExpressionAttributeNames* - One or more substitution tokens for
240
+ # attribute names in the *ProjectionExpression* parameter. The
241
+ # following are some use cases for using *ExpressionAttributeNames*\:
242
+ #
243
+ # * To access an attribute whose name conflicts with a DynamoDB
244
+ # reserved word.
245
+ #
246
+ # * To create a placeholder for repeating occurrences of an attribute
247
+ # name in an expression.
248
+ #
249
+ # * To prevent special characters in an attribute name from being
250
+ # misinterpreted in an expression.
251
+ #
252
+ # Use the **#** character in an expression to dereference an attribute
253
+ # name. For example, consider the following attribute name:
254
+ #
255
+ # * `Percentile`
256
+ #
257
+ # ^
258
+ #
259
+ # The name of this attribute conflicts with a reserved word, so it
260
+ # cannot be used directly in an expression. (For the complete list of
261
+ # reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
262
+ # Developer Guide*). To work around this, you could specify the
263
+ # following for *ExpressionAttributeNames*\:
264
+ #
265
+ # * `\{"#P":"Percentile"\}`
266
+ #
267
+ # ^
268
+ #
269
+ # You could then use this substitution in an expression, as in this
270
+ # example:
271
+ #
272
+ # * `#P = :val`
273
+ #
274
+ # ^
275
+ #
276
+ # <note markdown="1"> Tokens that begin with the **\:** character are *expression
277
+ # attribute values*, which are placeholders for the actual value at
278
+ # runtime.
279
+ #
280
+ # </note>
281
+ #
282
+ # For more information on expression attribute names, see [Accessing
283
+ # Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
284
+ #
285
+ # * *Keys* - An array of primary key attribute values that define
286
+ # specific items in the table. For each primary key, you must provide
287
+ # *all* of the key attributes. For example, with a simple primary key,
288
+ # you only need to provide the partition key value. For a composite
289
+ # key, you must provide *both* the partition key value and the sort
290
+ # key value.
291
+ #
292
+ # * *ProjectionExpression* - A string that identifies one or more
293
+ # attributes to retrieve from the table. These attributes can include
294
+ # scalars, sets, or elements of a JSON document. The attributes in the
295
+ # expression must be separated by commas.
296
+ #
297
+ # If no attribute names are specified, then all attributes will be
298
+ # returned. If any of the requested attributes are not found, they
299
+ # will not appear in the result.
300
+ #
301
+ # For more information, see [Accessing Item Attributes][2] in the
302
+ # *Amazon DynamoDB Developer Guide*.
303
+ #
304
+ # * *AttributesToGet* -
305
+ #
306
+ # This is a legacy parameter, for backward compatibility. New
307
+ # applications should use *ProjectionExpression* instead. Do not
308
+ # combine legacy parameters and expression parameters in a single API
309
+ # call; otherwise, DynamoDB will return a *ValidationException*
310
+ # exception.
311
+ #
312
+ # This parameter allows you to retrieve attributes of type List or
313
+ # Map; however, it cannot retrieve individual elements within a List
314
+ # or a Map.
315
+ #
316
+ # The names of one or more attributes to retrieve. If no attribute
317
+ # names are provided, then all attributes will be returned. If any of
318
+ # the requested attributes are not found, they will not appear in the
319
+ # result.
320
+ #
321
+ # Note that *AttributesToGet* has no effect on provisioned throughput
322
+ # consumption. DynamoDB determines capacity units consumed based on
323
+ # item size, not on the amount of data that is returned to an
324
+ # application.
325
+ #
326
+ #
327
+ #
328
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
329
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
330
+ # @option params [String] :return_consumed_capacity
331
+ # Determines the level of detail about provisioned throughput
332
+ # consumption that is returned in the response:
333
+ #
334
+ # * *INDEXES* - The response includes the aggregate *ConsumedCapacity*
335
+ # for the operation, together with *ConsumedCapacity* for each table
336
+ # and secondary index that was accessed.
337
+ #
338
+ # Note that some operations, such as *GetItem* and *BatchGetItem*, do
339
+ # not access any indexes at all. In these cases, specifying *INDEXES*
340
+ # will only return *ConsumedCapacity* information for table(s).
341
+ #
342
+ # * *TOTAL* - The response includes only the aggregate
343
+ # *ConsumedCapacity* for the operation.
344
+ #
345
+ # * *NONE* - No *ConsumedCapacity* details are included in the response.
346
+ # @return [Types::BatchGetItemOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
347
+ #
348
+ # * {Types::BatchGetItemOutput#responses #Responses} => Hash&lt;String,Array&lt;Hash&lt;String,Types::AttributeValue&gt;&gt;&gt;
349
+ # * {Types::BatchGetItemOutput#unprocessed_keys #UnprocessedKeys} => Hash&lt;String,Types::KeysAndAttributes&gt;
350
+ # * {Types::BatchGetItemOutput#consumed_capacity #ConsumedCapacity} => Array&lt;Types::ConsumedCapacity&gt;
351
+ #
352
+ # @example Request syntax with placeholder values
353
+ # resp = client.batch_get_item({
354
+ # request_items: { # required
355
+ # "TableName" => {
356
+ # keys: [ # required
357
+ # {
358
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
359
+ # },
360
+ # ],
361
+ # attributes_to_get: ["AttributeName"],
362
+ # consistent_read: false,
363
+ # projection_expression: "ProjectionExpression",
364
+ # expression_attribute_names: {
365
+ # "ExpressionAttributeNameVariable" => "AttributeName",
366
+ # },
367
+ # },
368
+ # },
369
+ # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
370
+ # })
371
+ #
372
+ # @example Response structure
373
+ # resp.responses #=> Hash
374
+ # resp.responses["TableName"] #=> Array
375
+ # resp.responses["TableName"][0] #=> Hash
376
+ # resp.responses["TableName"][0]["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
377
+ # resp.unprocessed_keys #=> Hash
378
+ # resp.unprocessed_keys["TableName"].keys #=> Array
379
+ # resp.unprocessed_keys["TableName"].keys[0] #=> Hash
380
+ # resp.unprocessed_keys["TableName"].keys[0]["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
381
+ # resp.unprocessed_keys["TableName"].attributes_to_get #=> Array
382
+ # resp.unprocessed_keys["TableName"].attributes_to_get[0] #=> String
383
+ # resp.unprocessed_keys["TableName"].consistent_read #=> Boolean
384
+ # resp.unprocessed_keys["TableName"].projection_expression #=> String
385
+ # resp.unprocessed_keys["TableName"].expression_attribute_names #=> Hash
386
+ # resp.unprocessed_keys["TableName"].expression_attribute_names["ExpressionAttributeNameVariable"] #=> String
387
+ # resp.consumed_capacity #=> Array
388
+ # resp.consumed_capacity[0].table_name #=> String
389
+ # resp.consumed_capacity[0].capacity_units #=> Float
390
+ # resp.consumed_capacity[0].table.capacity_units #=> Float
391
+ # resp.consumed_capacity[0].local_secondary_indexes #=> Hash
392
+ # resp.consumed_capacity[0].local_secondary_indexes["IndexName"].capacity_units #=> Float
393
+ # resp.consumed_capacity[0].global_secondary_indexes #=> Hash
394
+ # resp.consumed_capacity[0].global_secondary_indexes["IndexName"].capacity_units #=> Float
395
+ # @overload batch_get_item(params = {})
396
+ # @param [Hash] params ({})
397
+ def batch_get_item(params = {}, options = {})
398
+ req = build_request(:batch_get_item, params)
399
+ req.send_request(options)
400
+ end
401
+
402
+ # The *BatchWriteItem* operation puts or deletes multiple items in one
403
+ # or more tables. A single call to *BatchWriteItem* can write up to 16
404
+ # MB of data, which can comprise as many as 25 put or delete requests.
405
+ # Individual items to be written can be as large as 400 KB.
406
+ #
407
+ # <note markdown="1"> *BatchWriteItem* cannot update items. To update items, use the
408
+ # *UpdateItem* API.
409
+ #
410
+ # </note>
411
+ #
412
+ # The individual *PutItem* and *DeleteItem* operations specified in
413
+ # *BatchWriteItem* are atomic; however *BatchWriteItem* as a whole is
414
+ # not. If any requested operations fail because the table's provisioned
415
+ # throughput is exceeded or an internal processing failure occurs, the
416
+ # failed operations are returned in the *UnprocessedItems* response
417
+ # parameter. You can investigate and optionally resend the requests.
418
+ # Typically, you would call *BatchWriteItem* in a loop. Each iteration
419
+ # would check for unprocessed items and submit a new *BatchWriteItem*
420
+ # request with those unprocessed items until all items have been
421
+ # processed.
422
+ #
423
+ # Note that if *none* of the items can be processed due to insufficient
424
+ # provisioned throughput on all of the tables in the request, then
425
+ # *BatchWriteItem* will return a
426
+ # *ProvisionedThroughputExceededException*.
427
+ #
428
+ # If DynamoDB returns any unprocessed items, you should retry the batch
429
+ # operation on those items. However, *we strongly recommend that you use
430
+ # an exponential backoff algorithm*. If you retry the batch operation
431
+ # immediately, the underlying read or write requests can still fail due
432
+ # to throttling on the individual tables. If you delay the batch
433
+ # operation using exponential backoff, the individual requests in the
434
+ # batch are much more likely to succeed.
435
+ #
436
+ # For more information, see [Batch Operations and Error Handling][1] in
437
+ # the *Amazon DynamoDB Developer Guide*.
438
+ #
439
+ # With *BatchWriteItem*, you can efficiently write or delete large
440
+ # amounts of data, such as from Amazon Elastic MapReduce (EMR), or copy
441
+ # data from another database into DynamoDB. In order to improve
442
+ # performance with these large-scale operations, *BatchWriteItem* does
443
+ # not behave in the same way as individual *PutItem* and *DeleteItem*
444
+ # calls would. For example, you cannot specify conditions on individual
445
+ # put and delete requests, and *BatchWriteItem* does not return deleted
446
+ # items in the response.
447
+ #
448
+ # If you use a programming language that supports concurrency, you can
449
+ # use threads to write items in parallel. Your application must include
450
+ # the necessary logic to manage the threads. With languages that don't
451
+ # support threading, you must update or delete the specified items one
452
+ # at a time. In both situations, *BatchWriteItem* provides an
453
+ # alternative where the API performs the specified put and delete
454
+ # operations in parallel, giving you the power of the thread pool
455
+ # approach without having to introduce complexity into your application.
456
+ #
457
+ # Parallel processing reduces latency, but each specified put and delete
458
+ # request consumes the same number of write capacity units whether it is
459
+ # processed in parallel or not. Delete operations on nonexistent items
460
+ # consume one write capacity unit.
461
+ #
462
+ # If one or more of the following is true, DynamoDB rejects the entire
463
+ # batch write operation:
464
+ #
465
+ # * One or more tables specified in the *BatchWriteItem* request does
466
+ # not exist.
467
+ #
468
+ # * Primary key attributes specified on an item in the request do not
469
+ # match those in the corresponding table's primary key schema.
470
+ #
471
+ # * You try to perform multiple operations on the same item in the same
472
+ # *BatchWriteItem* request. For example, you cannot put and delete the
473
+ # same item in the same *BatchWriteItem* request.
474
+ #
475
+ # * There are more than 25 requests in the batch.
476
+ #
477
+ # * Any individual item in a batch exceeds 400 KB.
478
+ #
479
+ # * The total request size exceeds 16 MB.
480
+ #
481
+ #
482
+ #
483
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations
484
+ # @option params [required, Hash<String,Array>] :request_items
485
+ # A map of one or more table names and, for each table, a list of
486
+ # operations to be performed (*DeleteRequest* or *PutRequest*). Each
487
+ # element in the map consists of the following:
488
+ #
489
+ # * *DeleteRequest* - Perform a *DeleteItem* operation on the specified
490
+ # item. The item to be deleted is identified by a *Key* subelement:
491
+ #
492
+ # * *Key* - A map of primary key attribute values that uniquely
493
+ # identify the ! item. Each entry in this map consists of an
494
+ # attribute name and an attribute value. For each primary key, you
495
+ # must provide *all* of the key attributes. For example, with a
496
+ # simple primary key, you only need to provide a value for the
497
+ # partition key. For a composite primary key, you must provide
498
+ # values for *both* the partition key and the sort key.
499
+ #
500
+ # ^
501
+ #
502
+ # * *PutRequest* - Perform a *PutItem* operation on the specified item.
503
+ # The item to be put is identified by an *Item* subelement:
504
+ #
505
+ # * *Item* - A map of attributes and their values. Each entry in this
506
+ # map consists of an attribute name and an attribute value.
507
+ # Attribute values must not be null; string and binary type
508
+ # attributes must have lengths greater than zero; and set type
509
+ # attributes must not be empty. Requests that contain empty values
510
+ # will be rejected with a *ValidationException* exception.
511
+ #
512
+ # If you specify any attributes that are part of an index key, then
513
+ # the data types for those attributes must match those of the schema
514
+ # in the table's attribute definition.
515
+ # @option params [String] :return_consumed_capacity
516
+ # Determines the level of detail about provisioned throughput
517
+ # consumption that is returned in the response:
518
+ #
519
+ # * *INDEXES* - The response includes the aggregate *ConsumedCapacity*
520
+ # for the operation, together with *ConsumedCapacity* for each table
521
+ # and secondary index that was accessed.
522
+ #
523
+ # Note that some operations, such as *GetItem* and *BatchGetItem*, do
524
+ # not access any indexes at all. In these cases, specifying *INDEXES*
525
+ # will only return *ConsumedCapacity* information for table(s).
526
+ #
527
+ # * *TOTAL* - The response includes only the aggregate
528
+ # *ConsumedCapacity* for the operation.
529
+ #
530
+ # * *NONE* - No *ConsumedCapacity* details are included in the response.
531
+ # @option params [String] :return_item_collection_metrics
532
+ # Determines whether item collection metrics are returned. If set to
533
+ # `SIZE`, the response includes statistics about item collections, if
534
+ # any, that were modified during the operation are returned in the
535
+ # response. If set to `NONE` (the default), no statistics are returned.
536
+ # @return [Types::BatchWriteItemOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
537
+ #
538
+ # * {Types::BatchWriteItemOutput#unprocessed_items #UnprocessedItems} => Hash&lt;String,Array&lt;Types::WriteRequest&gt;&gt;
539
+ # * {Types::BatchWriteItemOutput#item_collection_metrics #ItemCollectionMetrics} => Hash&lt;String,Array&lt;Types::ItemCollectionMetrics&gt;&gt;
540
+ # * {Types::BatchWriteItemOutput#consumed_capacity #ConsumedCapacity} => Array&lt;Types::ConsumedCapacity&gt;
541
+ #
542
+ # @example Request syntax with placeholder values
543
+ # resp = client.batch_write_item({
544
+ # request_items: { # required
545
+ # "TableName" => [
546
+ # {
547
+ # put_request: {
548
+ # item: { # required
549
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
550
+ # },
551
+ # },
552
+ # delete_request: {
553
+ # key: { # required
554
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
555
+ # },
556
+ # },
557
+ # },
558
+ # ],
559
+ # },
560
+ # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
561
+ # return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
562
+ # })
563
+ #
564
+ # @example Response structure
565
+ # resp.unprocessed_items #=> Hash
566
+ # resp.unprocessed_items["TableName"] #=> Array
567
+ # resp.unprocessed_items["TableName"][0].put_request.item #=> Hash
568
+ # resp.unprocessed_items["TableName"][0].put_request.item["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
569
+ # resp.unprocessed_items["TableName"][0].delete_request.key #=> Hash
570
+ # resp.unprocessed_items["TableName"][0].delete_request.key["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
571
+ # resp.item_collection_metrics #=> Hash
572
+ # resp.item_collection_metrics["TableName"] #=> Array
573
+ # resp.item_collection_metrics["TableName"][0].item_collection_key #=> Hash
574
+ # resp.item_collection_metrics["TableName"][0].item_collection_key["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
575
+ # resp.item_collection_metrics["TableName"][0].size_estimate_range_gb #=> Array
576
+ # resp.item_collection_metrics["TableName"][0].size_estimate_range_gb[0] #=> Float
577
+ # resp.consumed_capacity #=> Array
578
+ # resp.consumed_capacity[0].table_name #=> String
579
+ # resp.consumed_capacity[0].capacity_units #=> Float
580
+ # resp.consumed_capacity[0].table.capacity_units #=> Float
581
+ # resp.consumed_capacity[0].local_secondary_indexes #=> Hash
582
+ # resp.consumed_capacity[0].local_secondary_indexes["IndexName"].capacity_units #=> Float
583
+ # resp.consumed_capacity[0].global_secondary_indexes #=> Hash
584
+ # resp.consumed_capacity[0].global_secondary_indexes["IndexName"].capacity_units #=> Float
585
+ # @overload batch_write_item(params = {})
586
+ # @param [Hash] params ({})
587
+ def batch_write_item(params = {}, options = {})
588
+ req = build_request(:batch_write_item, params)
589
+ req.send_request(options)
590
+ end
591
+
592
+ # The *CreateTable* operation adds a new table to your account. In an
593
+ # AWS account, table names must be unique within each region. That is,
594
+ # you can have two tables with same name if you create the tables in
595
+ # different regions.
596
+ #
597
+ # *CreateTable* is an asynchronous operation. Upon receiving a
598
+ # *CreateTable* request, DynamoDB immediately returns a response with a
599
+ # *TableStatus* of `CREATING`. After the table is created, DynamoDB sets
600
+ # the *TableStatus* to `ACTIVE`. You can perform read and write
601
+ # operations only on an `ACTIVE` table.
602
+ #
603
+ # You can optionally define secondary indexes on the new table, as part
604
+ # of the *CreateTable* operation. If you want to create multiple tables
605
+ # with secondary indexes on them, you must create the tables
606
+ # sequentially. Only one table with secondary indexes can be in the
607
+ # `CREATING` state at any given time.
608
+ #
609
+ # You can use the *DescribeTable* API to check the table status.
610
+ # @option params [required, Array<Types::AttributeDefinition>] :attribute_definitions
611
+ # An array of attributes that describe the key schema for the table and
612
+ # indexes.
613
+ # @option params [required, String] :table_name
614
+ # The name of the table to create.
615
+ # @option params [required, Array<Types::KeySchemaElement>] :key_schema
616
+ # Specifies the attributes that make up the primary key for a table or
617
+ # an index. The attributes in *KeySchema* must also be defined in the
618
+ # *AttributeDefinitions* array. For more information, see [Data
619
+ # Model][1] in the *Amazon DynamoDB Developer Guide*.
620
+ #
621
+ # Each *KeySchemaElement* in the array is composed of:
622
+ #
623
+ # * *AttributeName* - The name of this key attribute.
624
+ #
625
+ # * *KeyType* - The role that the key attribute will assume:
626
+ #
627
+ # * `HASH` - partition key
628
+ #
629
+ # * `RANGE` - sort key
630
+ #
631
+ # <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
632
+ # The term "hash attribute" derives from DynamoDB' usage of an
633
+ # internal hash function to evenly distribute data items across
634
+ # partitions, based on their partition key values.
635
+ #
636
+ # The sort key of an item is also known as its *range attribute*. The
637
+ # term "range attribute" derives from the way DynamoDB stores items
638
+ # with the same partition key physically close together, in sorted order
639
+ # by the sort key value.
640
+ #
641
+ # </note>
642
+ #
643
+ # For a simple primary key (partition key), you must provide exactly one
644
+ # element with a *KeyType* of `HASH`.
645
+ #
646
+ # For a composite primary key (partition key and sort key), you must
647
+ # provide exactly two elements, in this order: The first element must
648
+ # have a *KeyType* of `HASH`, and the second element must have a
649
+ # *KeyType* of `RANGE`.
650
+ #
651
+ # For more information, see [Specifying the Primary Key][2] in the
652
+ # *Amazon DynamoDB Developer Guide*.
653
+ #
654
+ #
655
+ #
656
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html
657
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key
658
+ # @option params [Array<Types::LocalSecondaryIndex>] :local_secondary_indexes
659
+ # One or more local secondary indexes (the maximum is five) to be
660
+ # created on the table. Each index is scoped to a given partition key
661
+ # value. There is a 10 GB size limit per partition key value; otherwise,
662
+ # the size of a local secondary index is unconstrained.
663
+ #
664
+ # Each local secondary index in the array includes the following:
665
+ #
666
+ # * *IndexName* - The name of the local secondary index. Must be unique
667
+ # only for this table.
668
+ #
669
+ #
670
+ #
671
+ # * *KeySchema* - Specifies the key schema for the local secondary
672
+ # index. The key schema must begin with the same partition key as the
673
+ # table.
674
+ #
675
+ # * *Projection* - Specifies attributes that are copied (projected) from
676
+ # the table into the index. These are in addition to the primary key
677
+ # attributes and index key attributes, which are automatically
678
+ # projected. Each attribute specification is composed of:
679
+ #
680
+ # * *ProjectionType* - One of the following:
681
+ #
682
+ # * `KEYS_ONLY` - Only the index and primary keys are projected into
683
+ # the index.
684
+ #
685
+ # * `INCLUDE` - Only the specified table attributes are projected
686
+ # into the index. The list of projected attributes are in
687
+ # *NonKeyAttributes*.
688
+ #
689
+ # * `ALL` - All of the table attributes are projected into the
690
+ # index.
691
+ #
692
+ # * *NonKeyAttributes* - A list of one or more non-key attribute names
693
+ # that are projected into the secondary index. The total count of
694
+ # attributes provided in *NonKeyAttributes*, summed across all of
695
+ # the secondary indexes, must not exceed 20. If you project the same
696
+ # attribute into two different indexes, this counts as two distinct
697
+ # attributes when determining the total.
698
+ # @option params [Array<Types::GlobalSecondaryIndex>] :global_secondary_indexes
699
+ # One or more global secondary indexes (the maximum is five) to be
700
+ # created on the table. Each global secondary index in the array
701
+ # includes the following:
702
+ #
703
+ # * *IndexName* - The name of the global secondary index. Must be unique
704
+ # only for this table.
705
+ #
706
+ #
707
+ #
708
+ # * *KeySchema* - Specifies the key schema for the global secondary
709
+ # index.
710
+ #
711
+ # * *Projection* - Specifies attributes that are copied (projected) from
712
+ # the table into the index. These are in addition to the primary key
713
+ # attributes and index key attributes, which are automatically
714
+ # projected. Each attribute specification is composed of:
715
+ #
716
+ # * *ProjectionType* - One of the following:
717
+ #
718
+ # * `KEYS_ONLY` - Only the index and primary keys are projected into
719
+ # the index.
720
+ #
721
+ # * `INCLUDE` - Only the specified table attributes are projected
722
+ # into the index. The list of projected attributes are in
723
+ # *NonKeyAttributes*.
724
+ #
725
+ # * `ALL` - All of the table attributes are projected into the
726
+ # index.
727
+ #
728
+ # * *NonKeyAttributes* - A list of one or more non-key attribute names
729
+ # that are projected into the secondary index. The total count of
730
+ # attributes provided in *NonKeyAttributes*, summed across all of
731
+ # the secondary indexes, must not exceed 20. If you project the same
732
+ # attribute into two different indexes, this counts as two distinct
733
+ # attributes when determining the total.
734
+ #
735
+ # * *ProvisionedThroughput* - The provisioned throughput settings for
736
+ # the global secondary index, consisting of read and write capacity
737
+ # units.
738
+ # @option params [required, Types::ProvisionedThroughput] :provisioned_throughput
739
+ # Represents the provisioned throughput settings for a specified table
740
+ # or index. The settings can be modified using the *UpdateTable*
741
+ # operation.
742
+ #
743
+ # For current minimum and maximum provisioned throughput values, see
744
+ # [Limits][1] in the *Amazon DynamoDB Developer Guide*.
745
+ #
746
+ #
747
+ #
748
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
749
+ # @option params [Types::StreamSpecification] :stream_specification
750
+ # The settings for DynamoDB Streams on the table. These settings consist
751
+ # of:
752
+ #
753
+ # * *StreamEnabled* - Indicates whether Streams is to be enabled (true)
754
+ # or disabled (false).
755
+ #
756
+ # * *StreamViewType* - When an item in the table is modified,
757
+ # *StreamViewType* determines what information is written to the
758
+ # table's stream. Valid values for *StreamViewType* are:
759
+ #
760
+ # * *KEYS\_ONLY* - Only the key attributes of the modified item are
761
+ # written to the stream.
762
+ #
763
+ # * *NEW\_IMAGE* - The entire item, as it appears after it was
764
+ # modified, is written to the stream.
765
+ #
766
+ # * *OLD\_IMAGE* - The entire item, as it appeared before it was
767
+ # modified, is written to the stream.
768
+ #
769
+ # * *NEW\_AND\_OLD\_IMAGES* - Both the new and the old item images of
770
+ # the item are written to the stream.
771
+ # @return [Types::CreateTableOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
772
+ #
773
+ # * {Types::CreateTableOutput#table_description #TableDescription} => Types::TableDescription
774
+ #
775
+ # @example Request syntax with placeholder values
776
+ # resp = client.create_table({
777
+ # attribute_definitions: [ # required
778
+ # {
779
+ # attribute_name: "KeySchemaAttributeName", # required
780
+ # attribute_type: "S", # required, accepts S, N, B
781
+ # },
782
+ # ],
783
+ # table_name: "TableName", # required
784
+ # key_schema: [ # required
785
+ # {
786
+ # attribute_name: "KeySchemaAttributeName", # required
787
+ # key_type: "HASH", # required, accepts HASH, RANGE
788
+ # },
789
+ # ],
790
+ # local_secondary_indexes: [
791
+ # {
792
+ # index_name: "IndexName", # required
793
+ # key_schema: [ # required
794
+ # {
795
+ # attribute_name: "KeySchemaAttributeName", # required
796
+ # key_type: "HASH", # required, accepts HASH, RANGE
797
+ # },
798
+ # ],
799
+ # projection: { # required
800
+ # projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
801
+ # non_key_attributes: ["NonKeyAttributeName"],
802
+ # },
803
+ # },
804
+ # ],
805
+ # global_secondary_indexes: [
806
+ # {
807
+ # index_name: "IndexName", # required
808
+ # key_schema: [ # required
809
+ # {
810
+ # attribute_name: "KeySchemaAttributeName", # required
811
+ # key_type: "HASH", # required, accepts HASH, RANGE
812
+ # },
813
+ # ],
814
+ # projection: { # required
815
+ # projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
816
+ # non_key_attributes: ["NonKeyAttributeName"],
817
+ # },
818
+ # provisioned_throughput: { # required
819
+ # read_capacity_units: 1, # required
820
+ # write_capacity_units: 1, # required
821
+ # },
822
+ # },
823
+ # ],
824
+ # provisioned_throughput: { # required
825
+ # read_capacity_units: 1, # required
826
+ # write_capacity_units: 1, # required
827
+ # },
828
+ # stream_specification: {
829
+ # stream_enabled: false,
830
+ # stream_view_type: "NEW_IMAGE", # accepts NEW_IMAGE, OLD_IMAGE, NEW_AND_OLD_IMAGES, KEYS_ONLY
831
+ # },
832
+ # })
833
+ #
834
+ # @example Response structure
835
+ # resp.table_description.attribute_definitions #=> Array
836
+ # resp.table_description.attribute_definitions[0].attribute_name #=> String
837
+ # resp.table_description.attribute_definitions[0].attribute_type #=> String, one of "S", "N", "B"
838
+ # resp.table_description.table_name #=> String
839
+ # resp.table_description.key_schema #=> Array
840
+ # resp.table_description.key_schema[0].attribute_name #=> String
841
+ # resp.table_description.key_schema[0].key_type #=> String, one of "HASH", "RANGE"
842
+ # resp.table_description.table_status #=> String, one of "CREATING", "UPDATING", "DELETING", "ACTIVE"
843
+ # resp.table_description.creation_date_time #=> Time
844
+ # resp.table_description.provisioned_throughput.last_increase_date_time #=> Time
845
+ # resp.table_description.provisioned_throughput.last_decrease_date_time #=> Time
846
+ # resp.table_description.provisioned_throughput.number_of_decreases_today #=> Integer
847
+ # resp.table_description.provisioned_throughput.read_capacity_units #=> Integer
848
+ # resp.table_description.provisioned_throughput.write_capacity_units #=> Integer
849
+ # resp.table_description.table_size_bytes #=> Integer
850
+ # resp.table_description.item_count #=> Integer
851
+ # resp.table_description.table_arn #=> String
852
+ # resp.table_description.local_secondary_indexes #=> Array
853
+ # resp.table_description.local_secondary_indexes[0].index_name #=> String
854
+ # resp.table_description.local_secondary_indexes[0].key_schema #=> Array
855
+ # resp.table_description.local_secondary_indexes[0].key_schema[0].attribute_name #=> String
856
+ # resp.table_description.local_secondary_indexes[0].key_schema[0].key_type #=> String, one of "HASH", "RANGE"
857
+ # resp.table_description.local_secondary_indexes[0].projection.projection_type #=> String, one of "ALL", "KEYS_ONLY", "INCLUDE"
858
+ # resp.table_description.local_secondary_indexes[0].projection.non_key_attributes #=> Array
859
+ # resp.table_description.local_secondary_indexes[0].projection.non_key_attributes[0] #=> String
860
+ # resp.table_description.local_secondary_indexes[0].index_size_bytes #=> Integer
861
+ # resp.table_description.local_secondary_indexes[0].item_count #=> Integer
862
+ # resp.table_description.local_secondary_indexes[0].index_arn #=> String
863
+ # resp.table_description.global_secondary_indexes #=> Array
864
+ # resp.table_description.global_secondary_indexes[0].index_name #=> String
865
+ # resp.table_description.global_secondary_indexes[0].key_schema #=> Array
866
+ # resp.table_description.global_secondary_indexes[0].key_schema[0].attribute_name #=> String
867
+ # resp.table_description.global_secondary_indexes[0].key_schema[0].key_type #=> String, one of "HASH", "RANGE"
868
+ # resp.table_description.global_secondary_indexes[0].projection.projection_type #=> String, one of "ALL", "KEYS_ONLY", "INCLUDE"
869
+ # resp.table_description.global_secondary_indexes[0].projection.non_key_attributes #=> Array
870
+ # resp.table_description.global_secondary_indexes[0].projection.non_key_attributes[0] #=> String
871
+ # resp.table_description.global_secondary_indexes[0].index_status #=> String, one of "CREATING", "UPDATING", "DELETING", "ACTIVE"
872
+ # resp.table_description.global_secondary_indexes[0].backfilling #=> Boolean
873
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.last_increase_date_time #=> Time
874
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.last_decrease_date_time #=> Time
875
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.number_of_decreases_today #=> Integer
876
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.read_capacity_units #=> Integer
877
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.write_capacity_units #=> Integer
878
+ # resp.table_description.global_secondary_indexes[0].index_size_bytes #=> Integer
879
+ # resp.table_description.global_secondary_indexes[0].item_count #=> Integer
880
+ # resp.table_description.global_secondary_indexes[0].index_arn #=> String
881
+ # resp.table_description.stream_specification.stream_enabled #=> Boolean
882
+ # resp.table_description.stream_specification.stream_view_type #=> String, one of "NEW_IMAGE", "OLD_IMAGE", "NEW_AND_OLD_IMAGES", "KEYS_ONLY"
883
+ # resp.table_description.latest_stream_label #=> String
884
+ # resp.table_description.latest_stream_arn #=> String
885
+ # @overload create_table(params = {})
886
+ # @param [Hash] params ({})
887
+ def create_table(params = {}, options = {})
888
+ req = build_request(:create_table, params)
889
+ req.send_request(options)
890
+ end
891
+
892
+ # Deletes a single item in a table by primary key. You can perform a
893
+ # conditional delete operation that deletes the item if it exists, or if
894
+ # it has an expected attribute value.
895
+ #
896
+ # In addition to deleting an item, you can also return the item's
897
+ # attribute values in the same operation, using the *ReturnValues*
898
+ # parameter.
899
+ #
900
+ # Unless you specify conditions, the *DeleteItem* is an idempotent
901
+ # operation; running it multiple times on the same item or attribute
902
+ # does *not* result in an error response.
903
+ #
904
+ # Conditional deletes are useful for deleting items only if specific
905
+ # conditions are met. If those conditions are met, DynamoDB performs the
906
+ # delete. Otherwise, the item is not deleted.
907
+ # @option params [required, String] :table_name
908
+ # The name of the table from which to delete the item.
909
+ # @option params [required, Hash<String,Types::AttributeValue>] :key
910
+ # A map of attribute names to *AttributeValue* objects, representing the
911
+ # primary key of the item to delete.
912
+ #
913
+ # For the primary key, you must provide all of the attributes. For
914
+ # example, with a simple primary key, you only need to provide a value
915
+ # for the partition key. For a composite primary key, you must provide
916
+ # values for both the partition key and the sort key.
917
+ # @option params [Hash<String,Types::ExpectedAttributeValue>] :expected
918
+ # This is a legacy parameter, for backward compatibility. New
919
+ # applications should use *ConditionExpression* instead. Do not combine
920
+ # legacy parameters and expression parameters in a single API call;
921
+ # otherwise, DynamoDB will return a *ValidationException* exception.
922
+ #
923
+ # A map of attribute/condition pairs. *Expected* provides a conditional
924
+ # block for the *DeleteItem* operation.
925
+ #
926
+ # Each element of *Expected* consists of an attribute name, a comparison
927
+ # operator, and one or more values. DynamoDB compares the attribute with
928
+ # the value(s) you supplied, using the comparison operator. For each
929
+ # *Expected* element, the result of the evaluation is either true or
930
+ # false.
931
+ #
932
+ # If you specify more than one element in the *Expected* map, then by
933
+ # default all of the conditions must evaluate to true. In other words,
934
+ # the conditions are ANDed together. (You can use the
935
+ # *ConditionalOperator* parameter to OR the conditions instead. If you
936
+ # do this, then at least one of the conditions must evaluate to true,
937
+ # rather than all of them.)
938
+ #
939
+ # If the *Expected* map evaluates to true, then the conditional
940
+ # operation succeeds; otherwise, it fails.
941
+ #
942
+ # *Expected* contains the following:
943
+ #
944
+ # * *AttributeValueList* - One or more values to evaluate against the
945
+ # supplied attribute. The number of values in the list depends on the
946
+ # *ComparisonOperator* being used.
947
+ #
948
+ # For type Number, value comparisons are numeric.
949
+ #
950
+ # String value comparisons for greater than, equals, or less than are
951
+ # based on ASCII character code values. For example, `a` is greater
952
+ # than `A`, and `a` is greater than `B`. For a list of code values,
953
+ # see
954
+ # [http://en.wikipedia.org/wiki/ASCII#ASCII\_printable\_characters][1].
955
+ #
956
+ # For type Binary, DynamoDB treats each byte of the binary data as
957
+ # unsigned when it compares binary values.
958
+ #
959
+ # * *ComparisonOperator* - A comparator for evaluating attributes in the
960
+ # *AttributeValueList*. When performing the comparison, DynamoDB uses
961
+ # strongly consistent reads.
962
+ #
963
+ # The following comparison operators are available:
964
+ #
965
+ # `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS |
966
+ # NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN`
967
+ #
968
+ # The following are descriptions of each comparison operator.
969
+ #
970
+ # * `EQ`\: Equal. `EQ` is supported for all datatypes, including lists
971
+ # and maps.
972
+ #
973
+ # *AttributeValueList* can contain only one *AttributeValue* element
974
+ # of type String, Number, Binary, String Set, Number Set, or Binary
975
+ # Set. If an item contains an *AttributeValue* element of a
976
+ # different type than the one provided in the request, the value
977
+ # does not match. For example, `\{"S":"6"\}` does not equal
978
+ # `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not equal `\{"NS":["6",
979
+ # "2", "1"]\}`.
980
+ #
981
+ #
982
+ #
983
+ # * `NE`\: Not equal. `NE` is supported for all datatypes, including
984
+ # lists and maps.
985
+ #
986
+ # *AttributeValueList* can contain only one *AttributeValue* of type
987
+ # String, Number, Binary, String Set, Number Set, or Binary Set. If
988
+ # an item contains an *AttributeValue* of a different type than the
989
+ # one provided in the request, the value does not match. For
990
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
991
+ # `\{"N":"6"\}` does not equal `\{"NS":["6", "2", "1"]\}`.
992
+ #
993
+ #
994
+ #
995
+ # * `LE`\: Less than or equal.
996
+ #
997
+ # *AttributeValueList* can contain only one *AttributeValue* element
998
+ # of type String, Number, or Binary (not a set type). If an item
999
+ # contains an *AttributeValue* element of a different type than the
1000
+ # one provided in the request, the value does not match. For
1001
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
1002
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
1003
+ #
1004
+ #
1005
+ #
1006
+ # * `LT`\: Less than.
1007
+ #
1008
+ # *AttributeValueList* can contain only one *AttributeValue* of type
1009
+ # String, Number, or Binary (not a set type). If an item contains an
1010
+ # *AttributeValue* element of a different type than the one provided
1011
+ # in the request, the value does not match. For example,
1012
+ # `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also, `\{"N":"6"\}`
1013
+ # does not compare to `\{"NS":["6", "2", "1"]\}`.
1014
+ #
1015
+ #
1016
+ #
1017
+ # * `GE`\: Greater than or equal.
1018
+ #
1019
+ # *AttributeValueList* can contain only one *AttributeValue* element
1020
+ # of type String, Number, or Binary (not a set type). If an item
1021
+ # contains an *AttributeValue* element of a different type than the
1022
+ # one provided in the request, the value does not match. For
1023
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
1024
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
1025
+ #
1026
+ #
1027
+ #
1028
+ # * `GT`\: Greater than.
1029
+ #
1030
+ # *AttributeValueList* can contain only one *AttributeValue* element
1031
+ # of type String, Number, or Binary (not a set type). If an item
1032
+ # contains an *AttributeValue* element of a different type than the
1033
+ # one provided in the request, the value does not match. For
1034
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
1035
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
1036
+ #
1037
+ #
1038
+ #
1039
+ # * `NOT_NULL`\: The attribute exists. `NOT_NULL` is supported for all
1040
+ # datatypes, including lists and maps.
1041
+ #
1042
+ # <note markdown="1"> This operator tests for the existence of an attribute, not its
1043
+ # data type. If the data type of attribute "`a`" is null, and you
1044
+ # evaluate it using `NOT_NULL`, the result is a Boolean *true*. This
1045
+ # result is because the attribute "`a`" exists; its data type is
1046
+ # not relevant to the `NOT_NULL` comparison operator.
1047
+ #
1048
+ # </note>
1049
+ #
1050
+ # * `NULL`\: The attribute does not exist. `NULL` is supported for all
1051
+ # datatypes, including lists and maps.
1052
+ #
1053
+ # <note markdown="1"> This operator tests for the nonexistence of an attribute, not its
1054
+ # data type. If the data type of attribute "`a`" is null, and you
1055
+ # evaluate it using `NULL`, the result is a Boolean *false*. This is
1056
+ # because the attribute "`a`" exists; its data type is not
1057
+ # relevant to the `NULL` comparison operator.
1058
+ #
1059
+ # </note>
1060
+ #
1061
+ # * `CONTAINS`\: Checks for a subsequence, or value in a set.
1062
+ #
1063
+ # *AttributeValueList* can contain only one *AttributeValue* element
1064
+ # of type String, Number, or Binary (not a set type). If the target
1065
+ # attribute of the comparison is of type String, then the operator
1066
+ # checks for a substring match. If the target attribute of the
1067
+ # comparison is of type Binary, then the operator looks for a
1068
+ # subsequence of the target that matches the input. If the target
1069
+ # attribute of the comparison is a set ("`SS`", "`NS`", or
1070
+ # "`BS`"), then the operator evaluates to true if it finds an
1071
+ # exact match with any member of the set.
1072
+ #
1073
+ # CONTAINS is supported for lists: When evaluating "`a CONTAINS
1074
+ # b`", "`a`" can be a list; however, "`b`" cannot be a set, a
1075
+ # map, or a list.
1076
+ #
1077
+ # * `NOT_CONTAINS`\: Checks for absence of a subsequence, or absence
1078
+ # of a value in a set.
1079
+ #
1080
+ # *AttributeValueList* can contain only one *AttributeValue* element
1081
+ # of type String, Number, or Binary (not a set type). If the target
1082
+ # attribute of the comparison is a String, then the operator checks
1083
+ # for the absence of a substring match. If the target attribute of
1084
+ # the comparison is Binary, then the operator checks for the absence
1085
+ # of a subsequence of the target that matches the input. If the
1086
+ # target attribute of the comparison is a set ("`SS`", "`NS`",
1087
+ # or "`BS`"), then the operator evaluates to true if it *does not*
1088
+ # find an exact match with any member of the set.
1089
+ #
1090
+ # NOT\_CONTAINS is supported for lists: When evaluating "`a NOT
1091
+ # CONTAINS b`", "`a`" can be a list; however, "`b`" cannot be a
1092
+ # set, a map, or a list.
1093
+ #
1094
+ # * `BEGINS_WITH`\: Checks for a prefix.
1095
+ #
1096
+ # *AttributeValueList* can contain only one *AttributeValue* of type
1097
+ # String or Binary (not a Number or a set type). The target
1098
+ # attribute of the comparison must be of type String or Binary (not
1099
+ # a Number or a set type).
1100
+ #
1101
+ #
1102
+ #
1103
+ # * `IN`\: Checks for matching elements within two sets.
1104
+ #
1105
+ # *AttributeValueList* can contain one or more *AttributeValue*
1106
+ # elements of type String, Number, or Binary (not a set type). These
1107
+ # attributes are compared against an existing set type attribute of
1108
+ # an item. If any elements of the input set are present in the item
1109
+ # attribute, the expression evaluates to true.
1110
+ #
1111
+ # * `BETWEEN`\: Greater than or equal to the first value, and less
1112
+ # than or equal to the second value.
1113
+ #
1114
+ # *AttributeValueList* must contain two *AttributeValue* elements of
1115
+ # the same type, either String, Number, or Binary (not a set type).
1116
+ # A target attribute matches if the target value is greater than, or
1117
+ # equal to, the first element and less than, or equal to, the second
1118
+ # element. If an item contains an *AttributeValue* element of a
1119
+ # different type than the one provided in the request, the value
1120
+ # does not match. For example, `\{"S":"6"\}` does not compare to
1121
+ # `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not compare to
1122
+ # `\{"NS":["6", "2", "1"]\}`
1123
+ #
1124
+ # For usage examples of *AttributeValueList* and *ComparisonOperator*,
1125
+ # see [Legacy Conditional Parameters][2] in the *Amazon DynamoDB
1126
+ # Developer Guide*.
1127
+ #
1128
+ # For backward compatibility with previous DynamoDB releases, the
1129
+ # following parameters can be used instead of *AttributeValueList* and
1130
+ # *ComparisonOperator*\:
1131
+ #
1132
+ # * *Value* - A value for DynamoDB to compare with an attribute.
1133
+ #
1134
+ # * *Exists* - A Boolean value that causes DynamoDB to evaluate the
1135
+ # value before attempting the conditional operation:
1136
+ #
1137
+ # * If *Exists* is `true`, DynamoDB will check to see if that
1138
+ # attribute value already exists in the table. If it is found, then
1139
+ # the condition evaluates to true; otherwise the condition evaluate
1140
+ # to false.
1141
+ #
1142
+ # * If *Exists* is `false`, DynamoDB assumes that the attribute value
1143
+ # does *not* exist in the table. If in fact the value does not
1144
+ # exist, then the assumption is valid and the condition evaluates to
1145
+ # true. If the value is found, despite the assumption that it does
1146
+ # not exist, the condition evaluates to false.
1147
+ #
1148
+ # Note that the default value for *Exists* is `true`.
1149
+ #
1150
+ # The *Value* and *Exists* parameters are incompatible with
1151
+ # *AttributeValueList* and *ComparisonOperator*. Note that if you use
1152
+ # both sets of parameters at once, DynamoDB will return a
1153
+ # *ValidationException* exception.
1154
+ #
1155
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
1156
+ #
1157
+ # </note>
1158
+ #
1159
+ #
1160
+ #
1161
+ # [1]: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
1162
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.html
1163
+ # @option params [String] :conditional_operator
1164
+ # This is a legacy parameter, for backward compatibility. New
1165
+ # applications should use *ConditionExpression* instead. Do not combine
1166
+ # legacy parameters and expression parameters in a single API call;
1167
+ # otherwise, DynamoDB will return a *ValidationException* exception.
1168
+ #
1169
+ # A logical operator to apply to the conditions in the *Expected* map:
1170
+ #
1171
+ # * `AND` - If all of the conditions evaluate to true, then the entire
1172
+ # map evaluates to true.
1173
+ #
1174
+ # * `OR` - If at least one of the conditions evaluate to true, then the
1175
+ # entire map evaluates to true.
1176
+ #
1177
+ # If you omit *ConditionalOperator*, then `AND` is the default.
1178
+ #
1179
+ # The operation will succeed only if the entire map evaluates to true.
1180
+ #
1181
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
1182
+ #
1183
+ # </note>
1184
+ # @option params [String] :return_values
1185
+ # Use *ReturnValues* if you want to get the item attributes as they
1186
+ # appeared before they were deleted. For *DeleteItem*, the valid values
1187
+ # are:
1188
+ #
1189
+ # * `NONE` - If *ReturnValues* is not specified, or if its value is
1190
+ # `NONE`, then nothing is returned. (This setting is the default for
1191
+ # *ReturnValues*.)
1192
+ #
1193
+ # * `ALL_OLD` - The content of the old item is returned.
1194
+ #
1195
+ # <note markdown="1"> The *ReturnValues* parameter is used by several DynamoDB operations;
1196
+ # however, *DeleteItem* does not recognize any values other than `NONE`
1197
+ # or `ALL_OLD`.
1198
+ #
1199
+ # </note>
1200
+ # @option params [String] :return_consumed_capacity
1201
+ # Determines the level of detail about provisioned throughput
1202
+ # consumption that is returned in the response:
1203
+ #
1204
+ # * *INDEXES* - The response includes the aggregate *ConsumedCapacity*
1205
+ # for the operation, together with *ConsumedCapacity* for each table
1206
+ # and secondary index that was accessed.
1207
+ #
1208
+ # Note that some operations, such as *GetItem* and *BatchGetItem*, do
1209
+ # not access any indexes at all. In these cases, specifying *INDEXES*
1210
+ # will only return *ConsumedCapacity* information for table(s).
1211
+ #
1212
+ # * *TOTAL* - The response includes only the aggregate
1213
+ # *ConsumedCapacity* for the operation.
1214
+ #
1215
+ # * *NONE* - No *ConsumedCapacity* details are included in the response.
1216
+ # @option params [String] :return_item_collection_metrics
1217
+ # Determines whether item collection metrics are returned. If set to
1218
+ # `SIZE`, the response includes statistics about item collections, if
1219
+ # any, that were modified during the operation are returned in the
1220
+ # response. If set to `NONE` (the default), no statistics are returned.
1221
+ # @option params [String] :condition_expression
1222
+ # A condition that must be satisfied in order for a conditional
1223
+ # *DeleteItem* to succeed.
1224
+ #
1225
+ # An expression can contain any of the following:
1226
+ #
1227
+ # * Functions: `attribute_exists | attribute_not_exists | attribute_type
1228
+ # | contains | begins_with | size`
1229
+ #
1230
+ # These function names are case-sensitive.
1231
+ #
1232
+ # * Comparison operators: ` = | &#x3C;&#x3E; | &#x3C; | &#x3E; | &#x3C;=
1233
+ # | &#x3E;= | BETWEEN | IN`
1234
+ #
1235
+ # * Logical operators: `AND | OR | NOT`
1236
+ #
1237
+ # For more information on condition expressions, see [Specifying
1238
+ # Conditions][1] in the *Amazon DynamoDB Developer Guide*.
1239
+ #
1240
+ # <note markdown="1"> *ConditionExpression* replaces the legacy *ConditionalOperator* and
1241
+ # *Expected* parameters.
1242
+ #
1243
+ # </note>
1244
+ #
1245
+ #
1246
+ #
1247
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
1248
+ # @option params [Hash<String,String>] :expression_attribute_names
1249
+ # One or more substitution tokens for attribute names in an expression.
1250
+ # The following are some use cases for using
1251
+ # *ExpressionAttributeNames*\:
1252
+ #
1253
+ # * To access an attribute whose name conflicts with a DynamoDB reserved
1254
+ # word.
1255
+ #
1256
+ # * To create a placeholder for repeating occurrences of an attribute
1257
+ # name in an expression.
1258
+ #
1259
+ # * To prevent special characters in an attribute name from being
1260
+ # misinterpreted in an expression.
1261
+ #
1262
+ # Use the **#** character in an expression to dereference an attribute
1263
+ # name. For example, consider the following attribute name:
1264
+ #
1265
+ # * `Percentile`
1266
+ #
1267
+ # ^
1268
+ #
1269
+ # The name of this attribute conflicts with a reserved word, so it
1270
+ # cannot be used directly in an expression. (For the complete list of
1271
+ # reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
1272
+ # Developer Guide*). To work around this, you could specify the
1273
+ # following for *ExpressionAttributeNames*\:
1274
+ #
1275
+ # * `\{"#P":"Percentile"\}`
1276
+ #
1277
+ # ^
1278
+ #
1279
+ # You could then use this substitution in an expression, as in this
1280
+ # example:
1281
+ #
1282
+ # * `#P = :val`
1283
+ #
1284
+ # ^
1285
+ #
1286
+ # <note markdown="1"> Tokens that begin with the **\:** character are *expression attribute
1287
+ # values*, which are placeholders for the actual value at runtime.
1288
+ #
1289
+ # </note>
1290
+ #
1291
+ # For more information on expression attribute names, see [Accessing
1292
+ # Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
1293
+ #
1294
+ #
1295
+ #
1296
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
1297
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
1298
+ # @option params [Hash<String,Types::AttributeValue>] :expression_attribute_values
1299
+ # One or more values that can be substituted in an expression.
1300
+ #
1301
+ # Use the **\:** (colon) character in an expression to dereference an
1302
+ # attribute value. For example, suppose that you wanted to check whether
1303
+ # the value of the *ProductStatus* attribute was one of the following:
1304
+ #
1305
+ # `Available | Backordered | Discontinued`
1306
+ #
1307
+ # You would first need to specify *ExpressionAttributeValues* as
1308
+ # follows:
1309
+ #
1310
+ # `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
1311
+ # ":disc":\{"S":"Discontinued"\} \}`
1312
+ #
1313
+ # You could then use these values in an expression, such as this:
1314
+ #
1315
+ # `ProductStatus IN (:avail, :back, :disc)`
1316
+ #
1317
+ # For more information on expression attribute values, see [Specifying
1318
+ # Conditions][1] in the *Amazon DynamoDB Developer Guide*.
1319
+ #
1320
+ #
1321
+ #
1322
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
1323
+ # @return [Types::DeleteItemOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
1324
+ #
1325
+ # * {Types::DeleteItemOutput#attributes #Attributes} => Hash&lt;String,Types::AttributeValue&gt;
1326
+ # * {Types::DeleteItemOutput#consumed_capacity #ConsumedCapacity} => Types::ConsumedCapacity
1327
+ # * {Types::DeleteItemOutput#item_collection_metrics #ItemCollectionMetrics} => Types::ItemCollectionMetrics
1328
+ #
1329
+ # @example Request syntax with placeholder values
1330
+ # resp = client.delete_item({
1331
+ # table_name: "TableName", # required
1332
+ # key: { # required
1333
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
1334
+ # },
1335
+ # expected: {
1336
+ # "AttributeName" => {
1337
+ # value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
1338
+ # exists: false,
1339
+ # comparison_operator: "EQ", # accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
1340
+ # attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
1341
+ # },
1342
+ # },
1343
+ # conditional_operator: "AND", # accepts AND, OR
1344
+ # return_values: "NONE", # accepts NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW
1345
+ # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
1346
+ # return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
1347
+ # condition_expression: "ConditionExpression",
1348
+ # expression_attribute_names: {
1349
+ # "ExpressionAttributeNameVariable" => "AttributeName",
1350
+ # },
1351
+ # expression_attribute_values: {
1352
+ # "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
1353
+ # },
1354
+ # })
1355
+ #
1356
+ # @example Response structure
1357
+ # resp.attributes #=> Hash
1358
+ # resp.attributes["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
1359
+ # resp.consumed_capacity.table_name #=> String
1360
+ # resp.consumed_capacity.capacity_units #=> Float
1361
+ # resp.consumed_capacity.table.capacity_units #=> Float
1362
+ # resp.consumed_capacity.local_secondary_indexes #=> Hash
1363
+ # resp.consumed_capacity.local_secondary_indexes["IndexName"].capacity_units #=> Float
1364
+ # resp.consumed_capacity.global_secondary_indexes #=> Hash
1365
+ # resp.consumed_capacity.global_secondary_indexes["IndexName"].capacity_units #=> Float
1366
+ # resp.item_collection_metrics.item_collection_key #=> Hash
1367
+ # resp.item_collection_metrics.item_collection_key["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
1368
+ # resp.item_collection_metrics.size_estimate_range_gb #=> Array
1369
+ # resp.item_collection_metrics.size_estimate_range_gb[0] #=> Float
1370
+ # @overload delete_item(params = {})
1371
+ # @param [Hash] params ({})
1372
+ def delete_item(params = {}, options = {})
1373
+ req = build_request(:delete_item, params)
1374
+ req.send_request(options)
1375
+ end
1376
+
1377
+ # The *DeleteTable* operation deletes a table and all of its items.
1378
+ # After a *DeleteTable* request, the specified table is in the
1379
+ # `DELETING` state until DynamoDB completes the deletion. If the table
1380
+ # is in the `ACTIVE` state, you can delete it. If a table is in
1381
+ # `CREATING` or `UPDATING` states, then DynamoDB returns a
1382
+ # *ResourceInUseException*. If the specified table does not exist,
1383
+ # DynamoDB returns a *ResourceNotFoundException*. If table is already in
1384
+ # the `DELETING` state, no error is returned.
1385
+ #
1386
+ # <note markdown="1"> DynamoDB might continue to accept data read and write operations, such
1387
+ # as *GetItem* and *PutItem*, on a table in the `DELETING` state until
1388
+ # the table deletion is complete.
1389
+ #
1390
+ # </note>
1391
+ #
1392
+ # When you delete a table, any indexes on that table are also deleted.
1393
+ #
1394
+ # If you have DynamoDB Streams enabled on the table, then the
1395
+ # corresponding stream on that table goes into the `DISABLED` state, and
1396
+ # the stream is automatically deleted after 24 hours.
1397
+ #
1398
+ # Use the *DescribeTable* API to check the status of the table.
1399
+ # @option params [required, String] :table_name
1400
+ # The name of the table to delete.
1401
+ # @return [Types::DeleteTableOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
1402
+ #
1403
+ # * {Types::DeleteTableOutput#table_description #TableDescription} => Types::TableDescription
1404
+ #
1405
+ # @example Request syntax with placeholder values
1406
+ # resp = client.delete_table({
1407
+ # table_name: "TableName", # required
1408
+ # })
1409
+ #
1410
+ # @example Response structure
1411
+ # resp.table_description.attribute_definitions #=> Array
1412
+ # resp.table_description.attribute_definitions[0].attribute_name #=> String
1413
+ # resp.table_description.attribute_definitions[0].attribute_type #=> String, one of "S", "N", "B"
1414
+ # resp.table_description.table_name #=> String
1415
+ # resp.table_description.key_schema #=> Array
1416
+ # resp.table_description.key_schema[0].attribute_name #=> String
1417
+ # resp.table_description.key_schema[0].key_type #=> String, one of "HASH", "RANGE"
1418
+ # resp.table_description.table_status #=> String, one of "CREATING", "UPDATING", "DELETING", "ACTIVE"
1419
+ # resp.table_description.creation_date_time #=> Time
1420
+ # resp.table_description.provisioned_throughput.last_increase_date_time #=> Time
1421
+ # resp.table_description.provisioned_throughput.last_decrease_date_time #=> Time
1422
+ # resp.table_description.provisioned_throughput.number_of_decreases_today #=> Integer
1423
+ # resp.table_description.provisioned_throughput.read_capacity_units #=> Integer
1424
+ # resp.table_description.provisioned_throughput.write_capacity_units #=> Integer
1425
+ # resp.table_description.table_size_bytes #=> Integer
1426
+ # resp.table_description.item_count #=> Integer
1427
+ # resp.table_description.table_arn #=> String
1428
+ # resp.table_description.local_secondary_indexes #=> Array
1429
+ # resp.table_description.local_secondary_indexes[0].index_name #=> String
1430
+ # resp.table_description.local_secondary_indexes[0].key_schema #=> Array
1431
+ # resp.table_description.local_secondary_indexes[0].key_schema[0].attribute_name #=> String
1432
+ # resp.table_description.local_secondary_indexes[0].key_schema[0].key_type #=> String, one of "HASH", "RANGE"
1433
+ # resp.table_description.local_secondary_indexes[0].projection.projection_type #=> String, one of "ALL", "KEYS_ONLY", "INCLUDE"
1434
+ # resp.table_description.local_secondary_indexes[0].projection.non_key_attributes #=> Array
1435
+ # resp.table_description.local_secondary_indexes[0].projection.non_key_attributes[0] #=> String
1436
+ # resp.table_description.local_secondary_indexes[0].index_size_bytes #=> Integer
1437
+ # resp.table_description.local_secondary_indexes[0].item_count #=> Integer
1438
+ # resp.table_description.local_secondary_indexes[0].index_arn #=> String
1439
+ # resp.table_description.global_secondary_indexes #=> Array
1440
+ # resp.table_description.global_secondary_indexes[0].index_name #=> String
1441
+ # resp.table_description.global_secondary_indexes[0].key_schema #=> Array
1442
+ # resp.table_description.global_secondary_indexes[0].key_schema[0].attribute_name #=> String
1443
+ # resp.table_description.global_secondary_indexes[0].key_schema[0].key_type #=> String, one of "HASH", "RANGE"
1444
+ # resp.table_description.global_secondary_indexes[0].projection.projection_type #=> String, one of "ALL", "KEYS_ONLY", "INCLUDE"
1445
+ # resp.table_description.global_secondary_indexes[0].projection.non_key_attributes #=> Array
1446
+ # resp.table_description.global_secondary_indexes[0].projection.non_key_attributes[0] #=> String
1447
+ # resp.table_description.global_secondary_indexes[0].index_status #=> String, one of "CREATING", "UPDATING", "DELETING", "ACTIVE"
1448
+ # resp.table_description.global_secondary_indexes[0].backfilling #=> Boolean
1449
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.last_increase_date_time #=> Time
1450
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.last_decrease_date_time #=> Time
1451
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.number_of_decreases_today #=> Integer
1452
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.read_capacity_units #=> Integer
1453
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.write_capacity_units #=> Integer
1454
+ # resp.table_description.global_secondary_indexes[0].index_size_bytes #=> Integer
1455
+ # resp.table_description.global_secondary_indexes[0].item_count #=> Integer
1456
+ # resp.table_description.global_secondary_indexes[0].index_arn #=> String
1457
+ # resp.table_description.stream_specification.stream_enabled #=> Boolean
1458
+ # resp.table_description.stream_specification.stream_view_type #=> String, one of "NEW_IMAGE", "OLD_IMAGE", "NEW_AND_OLD_IMAGES", "KEYS_ONLY"
1459
+ # resp.table_description.latest_stream_label #=> String
1460
+ # resp.table_description.latest_stream_arn #=> String
1461
+ # @overload delete_table(params = {})
1462
+ # @param [Hash] params ({})
1463
+ def delete_table(params = {}, options = {})
1464
+ req = build_request(:delete_table, params)
1465
+ req.send_request(options)
1466
+ end
1467
+
1468
+ # Returns the current provisioned-capacity limits for your AWS account
1469
+ # in a region, both for the region as a whole and for any one DynamoDB
1470
+ # table that you create there.
1471
+ #
1472
+ # When you establish an AWS account, the account has initial limits on
1473
+ # the maximum read capacity units and write capacity units that you can
1474
+ # provision across all of your DynamoDB tables in a given region. Also,
1475
+ # there are per-table limits that apply when you create a table there.
1476
+ # For more information, see [Limits][1] page in the *Amazon DynamoDB
1477
+ # Developer Guide*.
1478
+ #
1479
+ # Although you can increase these limits by filing a case at [AWS
1480
+ # Support Center][2], obtaining the increase is not instantaneous. The
1481
+ # *DescribeLimits* API lets you write code to compare the capacity you
1482
+ # are currently using to those limits imposed by your account so that
1483
+ # you have enough time to apply for an increase before you hit a limit.
1484
+ #
1485
+ # For example, you could use one of the AWS SDKs to do the following:
1486
+ #
1487
+ # 1. Call *DescribeLimits* for a particular region to obtain your
1488
+ # current account limits on provisioned capacity there.
1489
+ #
1490
+ # 2. Create a variable to hold the aggregate read capacity units
1491
+ # provisioned for all your tables in that region, and one to hold
1492
+ # the aggregate write capacity units. Zero them both.
1493
+ #
1494
+ # 3. Call *ListTables* to obtain a list of all your DynamoDB tables.
1495
+ #
1496
+ # 4. For each table name listed by *ListTables*, do the following:
1497
+ #
1498
+ # * Call *DescribeTable* with the table name.
1499
+ #
1500
+ # * Use the data returned by *DescribeTable* to add the read
1501
+ # capacity units and write capacity units provisioned for the
1502
+ # table itself to your variables.
1503
+ #
1504
+ # * If the table has one or more global secondary indexes (GSIs),
1505
+ # loop over these GSIs and add their provisioned capacity values
1506
+ # to your variables as well.
1507
+ #
1508
+ # 5. Report the account limits for that region returned by
1509
+ # *DescribeLimits*, along with the total current provisioned
1510
+ # capacity levels you have calculated.
1511
+ #
1512
+ # This will let you see whether you are getting close to your
1513
+ # account-level limits.
1514
+ #
1515
+ # The per-table limits apply only when you are creating a new table.
1516
+ # They restrict the sum of the provisioned capacity of the new table
1517
+ # itself and all its global secondary indexes.
1518
+ #
1519
+ # For existing tables and their GSIs, DynamoDB will not let you increase
1520
+ # provisioned capacity extremely rapidly, but the only upper limit that
1521
+ # applies is that the aggregate provisioned capacity over all your
1522
+ # tables and GSIs cannot exceed either of the per-account limits.
1523
+ #
1524
+ # <note markdown="1"> *DescribeLimits* should only be called periodically. You can expect
1525
+ # throttling errors if you call it more than once in a minute.
1526
+ #
1527
+ # </note>
1528
+ #
1529
+ # The *DescribeLimits* Request element has no content.
1530
+ #
1531
+ #
1532
+ #
1533
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
1534
+ # [2]: https://console.aws.amazon.com/support/home#/
1535
+ # @return [Types::DescribeLimitsOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
1536
+ #
1537
+ # * {Types::DescribeLimitsOutput#account_max_read_capacity_units #AccountMaxReadCapacityUnits} => Integer
1538
+ # * {Types::DescribeLimitsOutput#account_max_write_capacity_units #AccountMaxWriteCapacityUnits} => Integer
1539
+ # * {Types::DescribeLimitsOutput#table_max_read_capacity_units #TableMaxReadCapacityUnits} => Integer
1540
+ # * {Types::DescribeLimitsOutput#table_max_write_capacity_units #TableMaxWriteCapacityUnits} => Integer
1541
+ #
1542
+ # @example Request syntax with placeholder values
1543
+ # resp = client.describe_limits()
1544
+ #
1545
+ # @example Response structure
1546
+ # resp.account_max_read_capacity_units #=> Integer
1547
+ # resp.account_max_write_capacity_units #=> Integer
1548
+ # resp.table_max_read_capacity_units #=> Integer
1549
+ # resp.table_max_write_capacity_units #=> Integer
1550
+ # @overload describe_limits(params = {})
1551
+ # @param [Hash] params ({})
1552
+ def describe_limits(params = {}, options = {})
1553
+ req = build_request(:describe_limits, params)
1554
+ req.send_request(options)
1555
+ end
1556
+
1557
+ # Returns information about the table, including the current status of
1558
+ # the table, when it was created, the primary key schema, and any
1559
+ # indexes on the table.
1560
+ #
1561
+ # <note markdown="1"> If you issue a *DescribeTable* request immediately after a
1562
+ # *CreateTable* request, DynamoDB might return a
1563
+ # *ResourceNotFoundException*. This is because *DescribeTable* uses an
1564
+ # eventually consistent query, and the metadata for your table might not
1565
+ # be available at that moment. Wait for a few seconds, and then try the
1566
+ # *DescribeTable* request again.
1567
+ #
1568
+ # </note>
1569
+ # @option params [required, String] :table_name
1570
+ # The name of the table to describe.
1571
+ # @return [Types::DescribeTableOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
1572
+ #
1573
+ # * {Types::DescribeTableOutput#table #Table} => Types::TableDescription
1574
+ #
1575
+ # @example Request syntax with placeholder values
1576
+ # resp = client.describe_table({
1577
+ # table_name: "TableName", # required
1578
+ # })
1579
+ #
1580
+ # @example Response structure
1581
+ # resp.table.attribute_definitions #=> Array
1582
+ # resp.table.attribute_definitions[0].attribute_name #=> String
1583
+ # resp.table.attribute_definitions[0].attribute_type #=> String, one of "S", "N", "B"
1584
+ # resp.table.table_name #=> String
1585
+ # resp.table.key_schema #=> Array
1586
+ # resp.table.key_schema[0].attribute_name #=> String
1587
+ # resp.table.key_schema[0].key_type #=> String, one of "HASH", "RANGE"
1588
+ # resp.table.table_status #=> String, one of "CREATING", "UPDATING", "DELETING", "ACTIVE"
1589
+ # resp.table.creation_date_time #=> Time
1590
+ # resp.table.provisioned_throughput.last_increase_date_time #=> Time
1591
+ # resp.table.provisioned_throughput.last_decrease_date_time #=> Time
1592
+ # resp.table.provisioned_throughput.number_of_decreases_today #=> Integer
1593
+ # resp.table.provisioned_throughput.read_capacity_units #=> Integer
1594
+ # resp.table.provisioned_throughput.write_capacity_units #=> Integer
1595
+ # resp.table.table_size_bytes #=> Integer
1596
+ # resp.table.item_count #=> Integer
1597
+ # resp.table.table_arn #=> String
1598
+ # resp.table.local_secondary_indexes #=> Array
1599
+ # resp.table.local_secondary_indexes[0].index_name #=> String
1600
+ # resp.table.local_secondary_indexes[0].key_schema #=> Array
1601
+ # resp.table.local_secondary_indexes[0].key_schema[0].attribute_name #=> String
1602
+ # resp.table.local_secondary_indexes[0].key_schema[0].key_type #=> String, one of "HASH", "RANGE"
1603
+ # resp.table.local_secondary_indexes[0].projection.projection_type #=> String, one of "ALL", "KEYS_ONLY", "INCLUDE"
1604
+ # resp.table.local_secondary_indexes[0].projection.non_key_attributes #=> Array
1605
+ # resp.table.local_secondary_indexes[0].projection.non_key_attributes[0] #=> String
1606
+ # resp.table.local_secondary_indexes[0].index_size_bytes #=> Integer
1607
+ # resp.table.local_secondary_indexes[0].item_count #=> Integer
1608
+ # resp.table.local_secondary_indexes[0].index_arn #=> String
1609
+ # resp.table.global_secondary_indexes #=> Array
1610
+ # resp.table.global_secondary_indexes[0].index_name #=> String
1611
+ # resp.table.global_secondary_indexes[0].key_schema #=> Array
1612
+ # resp.table.global_secondary_indexes[0].key_schema[0].attribute_name #=> String
1613
+ # resp.table.global_secondary_indexes[0].key_schema[0].key_type #=> String, one of "HASH", "RANGE"
1614
+ # resp.table.global_secondary_indexes[0].projection.projection_type #=> String, one of "ALL", "KEYS_ONLY", "INCLUDE"
1615
+ # resp.table.global_secondary_indexes[0].projection.non_key_attributes #=> Array
1616
+ # resp.table.global_secondary_indexes[0].projection.non_key_attributes[0] #=> String
1617
+ # resp.table.global_secondary_indexes[0].index_status #=> String, one of "CREATING", "UPDATING", "DELETING", "ACTIVE"
1618
+ # resp.table.global_secondary_indexes[0].backfilling #=> Boolean
1619
+ # resp.table.global_secondary_indexes[0].provisioned_throughput.last_increase_date_time #=> Time
1620
+ # resp.table.global_secondary_indexes[0].provisioned_throughput.last_decrease_date_time #=> Time
1621
+ # resp.table.global_secondary_indexes[0].provisioned_throughput.number_of_decreases_today #=> Integer
1622
+ # resp.table.global_secondary_indexes[0].provisioned_throughput.read_capacity_units #=> Integer
1623
+ # resp.table.global_secondary_indexes[0].provisioned_throughput.write_capacity_units #=> Integer
1624
+ # resp.table.global_secondary_indexes[0].index_size_bytes #=> Integer
1625
+ # resp.table.global_secondary_indexes[0].item_count #=> Integer
1626
+ # resp.table.global_secondary_indexes[0].index_arn #=> String
1627
+ # resp.table.stream_specification.stream_enabled #=> Boolean
1628
+ # resp.table.stream_specification.stream_view_type #=> String, one of "NEW_IMAGE", "OLD_IMAGE", "NEW_AND_OLD_IMAGES", "KEYS_ONLY"
1629
+ # resp.table.latest_stream_label #=> String
1630
+ # resp.table.latest_stream_arn #=> String
1631
+ # @overload describe_table(params = {})
1632
+ # @param [Hash] params ({})
1633
+ def describe_table(params = {}, options = {})
1634
+ req = build_request(:describe_table, params)
1635
+ req.send_request(options)
1636
+ end
1637
+
1638
+ # The *GetItem* operation returns a set of attributes for the item with
1639
+ # the given primary key. If there is no matching item, *GetItem* does
1640
+ # not return any data.
1641
+ #
1642
+ # *GetItem* provides an eventually consistent read by default. If your
1643
+ # application requires a strongly consistent read, set *ConsistentRead*
1644
+ # to `true`. Although a strongly consistent read might take more time
1645
+ # than an eventually consistent read, it always returns the last updated
1646
+ # value.
1647
+ # @option params [required, String] :table_name
1648
+ # The name of the table containing the requested item.
1649
+ # @option params [required, Hash<String,Types::AttributeValue>] :key
1650
+ # A map of attribute names to *AttributeValue* objects, representing the
1651
+ # primary key of the item to retrieve.
1652
+ #
1653
+ # For the primary key, you must provide all of the attributes. For
1654
+ # example, with a simple primary key, you only need to provide a value
1655
+ # for the partition key. For a composite primary key, you must provide
1656
+ # values for both the partition key and the sort key.
1657
+ # @option params [Array<String>] :attributes_to_get
1658
+ # This is a legacy parameter, for backward compatibility. New
1659
+ # applications should use *ProjectionExpression* instead. Do not combine
1660
+ # legacy parameters and expression parameters in a single API call;
1661
+ # otherwise, DynamoDB will return a *ValidationException* exception.
1662
+ #
1663
+ # This parameter allows you to retrieve attributes of type List or Map;
1664
+ # however, it cannot retrieve individual elements within a List or a
1665
+ # Map.
1666
+ #
1667
+ # The names of one or more attributes to retrieve. If no attribute names
1668
+ # are provided, then all attributes will be returned. If any of the
1669
+ # requested attributes are not found, they will not appear in the
1670
+ # result.
1671
+ #
1672
+ # Note that *AttributesToGet* has no effect on provisioned throughput
1673
+ # consumption. DynamoDB determines capacity units consumed based on item
1674
+ # size, not on the amount of data that is returned to an application.
1675
+ # @option params [Boolean] :consistent_read
1676
+ # Determines the read consistency model: If set to `true`, then the
1677
+ # operation uses strongly consistent reads; otherwise, the operation
1678
+ # uses eventually consistent reads.
1679
+ # @option params [String] :return_consumed_capacity
1680
+ # Determines the level of detail about provisioned throughput
1681
+ # consumption that is returned in the response:
1682
+ #
1683
+ # * *INDEXES* - The response includes the aggregate *ConsumedCapacity*
1684
+ # for the operation, together with *ConsumedCapacity* for each table
1685
+ # and secondary index that was accessed.
1686
+ #
1687
+ # Note that some operations, such as *GetItem* and *BatchGetItem*, do
1688
+ # not access any indexes at all. In these cases, specifying *INDEXES*
1689
+ # will only return *ConsumedCapacity* information for table(s).
1690
+ #
1691
+ # * *TOTAL* - The response includes only the aggregate
1692
+ # *ConsumedCapacity* for the operation.
1693
+ #
1694
+ # * *NONE* - No *ConsumedCapacity* details are included in the response.
1695
+ # @option params [String] :projection_expression
1696
+ # A string that identifies one or more attributes to retrieve from the
1697
+ # table. These attributes can include scalars, sets, or elements of a
1698
+ # JSON document. The attributes in the expression must be separated by
1699
+ # commas.
1700
+ #
1701
+ # If no attribute names are specified, then all attributes will be
1702
+ # returned. If any of the requested attributes are not found, they will
1703
+ # not appear in the result.
1704
+ #
1705
+ # For more information, see [Accessing Item Attributes][1] in the
1706
+ # *Amazon DynamoDB Developer Guide*.
1707
+ #
1708
+ # <note markdown="1"> *ProjectionExpression* replaces the legacy *AttributesToGet*
1709
+ # parameter.
1710
+ #
1711
+ # </note>
1712
+ #
1713
+ #
1714
+ #
1715
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
1716
+ # @option params [Hash<String,String>] :expression_attribute_names
1717
+ # One or more substitution tokens for attribute names in an expression.
1718
+ # The following are some use cases for using
1719
+ # *ExpressionAttributeNames*\:
1720
+ #
1721
+ # * To access an attribute whose name conflicts with a DynamoDB reserved
1722
+ # word.
1723
+ #
1724
+ # * To create a placeholder for repeating occurrences of an attribute
1725
+ # name in an expression.
1726
+ #
1727
+ # * To prevent special characters in an attribute name from being
1728
+ # misinterpreted in an expression.
1729
+ #
1730
+ # Use the **#** character in an expression to dereference an attribute
1731
+ # name. For example, consider the following attribute name:
1732
+ #
1733
+ # * `Percentile`
1734
+ #
1735
+ # ^
1736
+ #
1737
+ # The name of this attribute conflicts with a reserved word, so it
1738
+ # cannot be used directly in an expression. (For the complete list of
1739
+ # reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
1740
+ # Developer Guide*). To work around this, you could specify the
1741
+ # following for *ExpressionAttributeNames*\:
1742
+ #
1743
+ # * `\{"#P":"Percentile"\}`
1744
+ #
1745
+ # ^
1746
+ #
1747
+ # You could then use this substitution in an expression, as in this
1748
+ # example:
1749
+ #
1750
+ # * `#P = :val`
1751
+ #
1752
+ # ^
1753
+ #
1754
+ # <note markdown="1"> Tokens that begin with the **\:** character are *expression attribute
1755
+ # values*, which are placeholders for the actual value at runtime.
1756
+ #
1757
+ # </note>
1758
+ #
1759
+ # For more information on expression attribute names, see [Accessing
1760
+ # Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
1761
+ #
1762
+ #
1763
+ #
1764
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
1765
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
1766
+ # @return [Types::GetItemOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
1767
+ #
1768
+ # * {Types::GetItemOutput#item #Item} => Hash&lt;String,Types::AttributeValue&gt;
1769
+ # * {Types::GetItemOutput#consumed_capacity #ConsumedCapacity} => Types::ConsumedCapacity
1770
+ #
1771
+ # @example Request syntax with placeholder values
1772
+ # resp = client.get_item({
1773
+ # table_name: "TableName", # required
1774
+ # key: { # required
1775
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
1776
+ # },
1777
+ # attributes_to_get: ["AttributeName"],
1778
+ # consistent_read: false,
1779
+ # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
1780
+ # projection_expression: "ProjectionExpression",
1781
+ # expression_attribute_names: {
1782
+ # "ExpressionAttributeNameVariable" => "AttributeName",
1783
+ # },
1784
+ # })
1785
+ #
1786
+ # @example Response structure
1787
+ # resp.item #=> Hash
1788
+ # resp.item["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
1789
+ # resp.consumed_capacity.table_name #=> String
1790
+ # resp.consumed_capacity.capacity_units #=> Float
1791
+ # resp.consumed_capacity.table.capacity_units #=> Float
1792
+ # resp.consumed_capacity.local_secondary_indexes #=> Hash
1793
+ # resp.consumed_capacity.local_secondary_indexes["IndexName"].capacity_units #=> Float
1794
+ # resp.consumed_capacity.global_secondary_indexes #=> Hash
1795
+ # resp.consumed_capacity.global_secondary_indexes["IndexName"].capacity_units #=> Float
1796
+ # @overload get_item(params = {})
1797
+ # @param [Hash] params ({})
1798
+ def get_item(params = {}, options = {})
1799
+ req = build_request(:get_item, params)
1800
+ req.send_request(options)
1801
+ end
1802
+
1803
+ # Returns an array of table names associated with the current account
1804
+ # and endpoint. The output from *ListTables* is paginated, with each
1805
+ # page returning a maximum of 100 table names.
1806
+ # @option params [String] :exclusive_start_table_name
1807
+ # The first table name that this operation will evaluate. Use the value
1808
+ # that was returned for *LastEvaluatedTableName* in a previous
1809
+ # operation, so that you can obtain the next page of results.
1810
+ # @option params [Integer] :limit
1811
+ # A maximum number of table names to return. If this parameter is not
1812
+ # specified, the limit is 100.
1813
+ # @return [Types::ListTablesOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
1814
+ #
1815
+ # * {Types::ListTablesOutput#table_names #TableNames} => Array&lt;String&gt;
1816
+ # * {Types::ListTablesOutput#last_evaluated_table_name #LastEvaluatedTableName} => String
1817
+ #
1818
+ # @example Request syntax with placeholder values
1819
+ # resp = client.list_tables({
1820
+ # exclusive_start_table_name: "TableName",
1821
+ # limit: 1,
1822
+ # })
1823
+ #
1824
+ # @example Response structure
1825
+ # resp.table_names #=> Array
1826
+ # resp.table_names[0] #=> String
1827
+ # resp.last_evaluated_table_name #=> String
1828
+ # @overload list_tables(params = {})
1829
+ # @param [Hash] params ({})
1830
+ def list_tables(params = {}, options = {})
1831
+ req = build_request(:list_tables, params)
1832
+ req.send_request(options)
1833
+ end
1834
+
1835
+ # Creates a new item, or replaces an old item with a new item. If an
1836
+ # item that has the same primary key as the new item already exists in
1837
+ # the specified table, the new item completely replaces the existing
1838
+ # item. You can perform a conditional put operation (add a new item if
1839
+ # one with the specified primary key doesn't exist), or replace an
1840
+ # existing item if it has certain attribute values.
1841
+ #
1842
+ # In addition to putting an item, you can also return the item's
1843
+ # attribute values in the same operation, using the *ReturnValues*
1844
+ # parameter.
1845
+ #
1846
+ # When you add an item, the primary key attribute(s) are the only
1847
+ # required attributes. Attribute values cannot be null. String and
1848
+ # Binary type attributes must have lengths greater than zero. Set type
1849
+ # attributes cannot be empty. Requests with empty values will be
1850
+ # rejected with a *ValidationException* exception.
1851
+ #
1852
+ # You can request that *PutItem* return either a copy of the original
1853
+ # item (before the update) or a copy of the updated item (after the
1854
+ # update). For more information, see the *ReturnValues* description
1855
+ # below.
1856
+ #
1857
+ # <note markdown="1"> To prevent a new item from replacing an existing item, use a
1858
+ # conditional expression that contains the `attribute_not_exists`
1859
+ # function with the name of the attribute being used as the partition
1860
+ # key for the table. Since every record must contain that attribute, the
1861
+ # `attribute_not_exists` function will only succeed if no matching item
1862
+ # exists.
1863
+ #
1864
+ # </note>
1865
+ #
1866
+ # For more information about using this API, see [Working with Items][1]
1867
+ # in the *Amazon DynamoDB Developer Guide*.
1868
+ #
1869
+ #
1870
+ #
1871
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html
1872
+ # @option params [required, String] :table_name
1873
+ # The name of the table to contain the item.
1874
+ # @option params [required, Hash<String,Types::AttributeValue>] :item
1875
+ # A map of attribute name/value pairs, one for each attribute. Only the
1876
+ # primary key attributes are required; you can optionally provide other
1877
+ # attribute name-value pairs for the item.
1878
+ #
1879
+ # You must provide all of the attributes for the primary key. For
1880
+ # example, with a simple primary key, you only need to provide a value
1881
+ # for the partition key. For a composite primary key, you must provide
1882
+ # both values for both the partition key and the sort key.
1883
+ #
1884
+ # If you specify any attributes that are part of an index key, then the
1885
+ # data types for those attributes must match those of the schema in the
1886
+ # table's attribute definition.
1887
+ #
1888
+ # For more information about primary keys, see [Primary Key][1] in the
1889
+ # *Amazon DynamoDB Developer Guide*.
1890
+ #
1891
+ # Each element in the *Item* map is an *AttributeValue* object.
1892
+ #
1893
+ #
1894
+ #
1895
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModelPrimaryKey
1896
+ # @option params [Hash<String,Types::ExpectedAttributeValue>] :expected
1897
+ # This is a legacy parameter, for backward compatibility. New
1898
+ # applications should use *ConditionExpression* instead. Do not combine
1899
+ # legacy parameters and expression parameters in a single API call;
1900
+ # otherwise, DynamoDB will return a *ValidationException* exception.
1901
+ #
1902
+ # A map of attribute/condition pairs. *Expected* provides a conditional
1903
+ # block for the *PutItem* operation.
1904
+ #
1905
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
1906
+ #
1907
+ # </note>
1908
+ #
1909
+ # Each element of *Expected* consists of an attribute name, a comparison
1910
+ # operator, and one or more values. DynamoDB compares the attribute with
1911
+ # the value(s) you supplied, using the comparison operator. For each
1912
+ # *Expected* element, the result of the evaluation is either true or
1913
+ # false.
1914
+ #
1915
+ # If you specify more than one element in the *Expected* map, then by
1916
+ # default all of the conditions must evaluate to true. In other words,
1917
+ # the conditions are ANDed together. (You can use the
1918
+ # *ConditionalOperator* parameter to OR the conditions instead. If you
1919
+ # do this, then at least one of the conditions must evaluate to true,
1920
+ # rather than all of them.)
1921
+ #
1922
+ # If the *Expected* map evaluates to true, then the conditional
1923
+ # operation succeeds; otherwise, it fails.
1924
+ #
1925
+ # *Expected* contains the following:
1926
+ #
1927
+ # * *AttributeValueList* - One or more values to evaluate against the
1928
+ # supplied attribute. The number of values in the list depends on the
1929
+ # *ComparisonOperator* being used.
1930
+ #
1931
+ # For type Number, value comparisons are numeric.
1932
+ #
1933
+ # String value comparisons for greater than, equals, or less than are
1934
+ # based on ASCII character code values. For example, `a` is greater
1935
+ # than `A`, and `a` is greater than `B`. For a list of code values,
1936
+ # see
1937
+ # [http://en.wikipedia.org/wiki/ASCII#ASCII\_printable\_characters][1].
1938
+ #
1939
+ # For type Binary, DynamoDB treats each byte of the binary data as
1940
+ # unsigned when it compares binary values.
1941
+ #
1942
+ # * *ComparisonOperator* - A comparator for evaluating attributes in the
1943
+ # *AttributeValueList*. When performing the comparison, DynamoDB uses
1944
+ # strongly consistent reads.
1945
+ #
1946
+ # The following comparison operators are available:
1947
+ #
1948
+ # `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS |
1949
+ # NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN`
1950
+ #
1951
+ # The following are descriptions of each comparison operator.
1952
+ #
1953
+ # * `EQ`\: Equal. `EQ` is supported for all datatypes, including lists
1954
+ # and maps.
1955
+ #
1956
+ # *AttributeValueList* can contain only one *AttributeValue* element
1957
+ # of type String, Number, Binary, String Set, Number Set, or Binary
1958
+ # Set. If an item contains an *AttributeValue* element of a
1959
+ # different type than the one provided in the request, the value
1960
+ # does not match. For example, `\{"S":"6"\}` does not equal
1961
+ # `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not equal `\{"NS":["6",
1962
+ # "2", "1"]\}`.
1963
+ #
1964
+ #
1965
+ #
1966
+ # * `NE`\: Not equal. `NE` is supported for all datatypes, including
1967
+ # lists and maps.
1968
+ #
1969
+ # *AttributeValueList* can contain only one *AttributeValue* of type
1970
+ # String, Number, Binary, String Set, Number Set, or Binary Set. If
1971
+ # an item contains an *AttributeValue* of a different type than the
1972
+ # one provided in the request, the value does not match. For
1973
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
1974
+ # `\{"N":"6"\}` does not equal `\{"NS":["6", "2", "1"]\}`.
1975
+ #
1976
+ #
1977
+ #
1978
+ # * `LE`\: Less than or equal.
1979
+ #
1980
+ # *AttributeValueList* can contain only one *AttributeValue* element
1981
+ # of type String, Number, or Binary (not a set type). If an item
1982
+ # contains an *AttributeValue* element of a different type than the
1983
+ # one provided in the request, the value does not match. For
1984
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
1985
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
1986
+ #
1987
+ #
1988
+ #
1989
+ # * `LT`\: Less than.
1990
+ #
1991
+ # *AttributeValueList* can contain only one *AttributeValue* of type
1992
+ # String, Number, or Binary (not a set type). If an item contains an
1993
+ # *AttributeValue* element of a different type than the one provided
1994
+ # in the request, the value does not match. For example,
1995
+ # `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also, `\{"N":"6"\}`
1996
+ # does not compare to `\{"NS":["6", "2", "1"]\}`.
1997
+ #
1998
+ #
1999
+ #
2000
+ # * `GE`\: Greater than or equal.
2001
+ #
2002
+ # *AttributeValueList* can contain only one *AttributeValue* element
2003
+ # of type String, Number, or Binary (not a set type). If an item
2004
+ # contains an *AttributeValue* element of a different type than the
2005
+ # one provided in the request, the value does not match. For
2006
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
2007
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
2008
+ #
2009
+ #
2010
+ #
2011
+ # * `GT`\: Greater than.
2012
+ #
2013
+ # *AttributeValueList* can contain only one *AttributeValue* element
2014
+ # of type String, Number, or Binary (not a set type). If an item
2015
+ # contains an *AttributeValue* element of a different type than the
2016
+ # one provided in the request, the value does not match. For
2017
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
2018
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
2019
+ #
2020
+ #
2021
+ #
2022
+ # * `NOT_NULL`\: The attribute exists. `NOT_NULL` is supported for all
2023
+ # datatypes, including lists and maps.
2024
+ #
2025
+ # <note markdown="1"> This operator tests for the existence of an attribute, not its
2026
+ # data type. If the data type of attribute "`a`" is null, and you
2027
+ # evaluate it using `NOT_NULL`, the result is a Boolean *true*. This
2028
+ # result is because the attribute "`a`" exists; its data type is
2029
+ # not relevant to the `NOT_NULL` comparison operator.
2030
+ #
2031
+ # </note>
2032
+ #
2033
+ # * `NULL`\: The attribute does not exist. `NULL` is supported for all
2034
+ # datatypes, including lists and maps.
2035
+ #
2036
+ # <note markdown="1"> This operator tests for the nonexistence of an attribute, not its
2037
+ # data type. If the data type of attribute "`a`" is null, and you
2038
+ # evaluate it using `NULL`, the result is a Boolean *false*. This is
2039
+ # because the attribute "`a`" exists; its data type is not
2040
+ # relevant to the `NULL` comparison operator.
2041
+ #
2042
+ # </note>
2043
+ #
2044
+ # * `CONTAINS`\: Checks for a subsequence, or value in a set.
2045
+ #
2046
+ # *AttributeValueList* can contain only one *AttributeValue* element
2047
+ # of type String, Number, or Binary (not a set type). If the target
2048
+ # attribute of the comparison is of type String, then the operator
2049
+ # checks for a substring match. If the target attribute of the
2050
+ # comparison is of type Binary, then the operator looks for a
2051
+ # subsequence of the target that matches the input. If the target
2052
+ # attribute of the comparison is a set ("`SS`", "`NS`", or
2053
+ # "`BS`"), then the operator evaluates to true if it finds an
2054
+ # exact match with any member of the set.
2055
+ #
2056
+ # CONTAINS is supported for lists: When evaluating "`a CONTAINS
2057
+ # b`", "`a`" can be a list; however, "`b`" cannot be a set, a
2058
+ # map, or a list.
2059
+ #
2060
+ # * `NOT_CONTAINS`\: Checks for absence of a subsequence, or absence
2061
+ # of a value in a set.
2062
+ #
2063
+ # *AttributeValueList* can contain only one *AttributeValue* element
2064
+ # of type String, Number, or Binary (not a set type). If the target
2065
+ # attribute of the comparison is a String, then the operator checks
2066
+ # for the absence of a substring match. If the target attribute of
2067
+ # the comparison is Binary, then the operator checks for the absence
2068
+ # of a subsequence of the target that matches the input. If the
2069
+ # target attribute of the comparison is a set ("`SS`", "`NS`",
2070
+ # or "`BS`"), then the operator evaluates to true if it *does not*
2071
+ # find an exact match with any member of the set.
2072
+ #
2073
+ # NOT\_CONTAINS is supported for lists: When evaluating "`a NOT
2074
+ # CONTAINS b`", "`a`" can be a list; however, "`b`" cannot be a
2075
+ # set, a map, or a list.
2076
+ #
2077
+ # * `BEGINS_WITH`\: Checks for a prefix.
2078
+ #
2079
+ # *AttributeValueList* can contain only one *AttributeValue* of type
2080
+ # String or Binary (not a Number or a set type). The target
2081
+ # attribute of the comparison must be of type String or Binary (not
2082
+ # a Number or a set type).
2083
+ #
2084
+ #
2085
+ #
2086
+ # * `IN`\: Checks for matching elements within two sets.
2087
+ #
2088
+ # *AttributeValueList* can contain one or more *AttributeValue*
2089
+ # elements of type String, Number, or Binary (not a set type). These
2090
+ # attributes are compared against an existing set type attribute of
2091
+ # an item. If any elements of the input set are present in the item
2092
+ # attribute, the expression evaluates to true.
2093
+ #
2094
+ # * `BETWEEN`\: Greater than or equal to the first value, and less
2095
+ # than or equal to the second value.
2096
+ #
2097
+ # *AttributeValueList* must contain two *AttributeValue* elements of
2098
+ # the same type, either String, Number, or Binary (not a set type).
2099
+ # A target attribute matches if the target value is greater than, or
2100
+ # equal to, the first element and less than, or equal to, the second
2101
+ # element. If an item contains an *AttributeValue* element of a
2102
+ # different type than the one provided in the request, the value
2103
+ # does not match. For example, `\{"S":"6"\}` does not compare to
2104
+ # `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not compare to
2105
+ # `\{"NS":["6", "2", "1"]\}`
2106
+ #
2107
+ # For usage examples of *AttributeValueList* and *ComparisonOperator*,
2108
+ # see [Legacy Conditional Parameters][2] in the *Amazon DynamoDB
2109
+ # Developer Guide*.
2110
+ #
2111
+ # For backward compatibility with previous DynamoDB releases, the
2112
+ # following parameters can be used instead of *AttributeValueList* and
2113
+ # *ComparisonOperator*\:
2114
+ #
2115
+ # * *Value* - A value for DynamoDB to compare with an attribute.
2116
+ #
2117
+ # * *Exists* - A Boolean value that causes DynamoDB to evaluate the
2118
+ # value before attempting the conditional operation:
2119
+ #
2120
+ # * If *Exists* is `true`, DynamoDB will check to see if that
2121
+ # attribute value already exists in the table. If it is found, then
2122
+ # the condition evaluates to true; otherwise the condition evaluate
2123
+ # to false.
2124
+ #
2125
+ # * If *Exists* is `false`, DynamoDB assumes that the attribute value
2126
+ # does *not* exist in the table. If in fact the value does not
2127
+ # exist, then the assumption is valid and the condition evaluates to
2128
+ # true. If the value is found, despite the assumption that it does
2129
+ # not exist, the condition evaluates to false.
2130
+ #
2131
+ # Note that the default value for *Exists* is `true`.
2132
+ #
2133
+ # The *Value* and *Exists* parameters are incompatible with
2134
+ # *AttributeValueList* and *ComparisonOperator*. Note that if you use
2135
+ # both sets of parameters at once, DynamoDB will return a
2136
+ # *ValidationException* exception.
2137
+ #
2138
+ #
2139
+ #
2140
+ # [1]: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
2141
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.html
2142
+ # @option params [String] :return_values
2143
+ # Use *ReturnValues* if you want to get the item attributes as they
2144
+ # appeared before they were updated with the *PutItem* request. For
2145
+ # *PutItem*, the valid values are:
2146
+ #
2147
+ # * `NONE` - If *ReturnValues* is not specified, or if its value is
2148
+ # `NONE`, then nothing is returned. (This setting is the default for
2149
+ # *ReturnValues*.)
2150
+ #
2151
+ # * `ALL_OLD` - If *PutItem* overwrote an attribute name-value pair,
2152
+ # then the content of the old item is returned.
2153
+ #
2154
+ # <note markdown="1"> The *ReturnValues* parameter is used by several DynamoDB operations;
2155
+ # however, *PutItem* does not recognize any values other than `NONE` or
2156
+ # `ALL_OLD`.
2157
+ #
2158
+ # </note>
2159
+ # @option params [String] :return_consumed_capacity
2160
+ # Determines the level of detail about provisioned throughput
2161
+ # consumption that is returned in the response:
2162
+ #
2163
+ # * *INDEXES* - The response includes the aggregate *ConsumedCapacity*
2164
+ # for the operation, together with *ConsumedCapacity* for each table
2165
+ # and secondary index that was accessed.
2166
+ #
2167
+ # Note that some operations, such as *GetItem* and *BatchGetItem*, do
2168
+ # not access any indexes at all. In these cases, specifying *INDEXES*
2169
+ # will only return *ConsumedCapacity* information for table(s).
2170
+ #
2171
+ # * *TOTAL* - The response includes only the aggregate
2172
+ # *ConsumedCapacity* for the operation.
2173
+ #
2174
+ # * *NONE* - No *ConsumedCapacity* details are included in the response.
2175
+ # @option params [String] :return_item_collection_metrics
2176
+ # Determines whether item collection metrics are returned. If set to
2177
+ # `SIZE`, the response includes statistics about item collections, if
2178
+ # any, that were modified during the operation are returned in the
2179
+ # response. If set to `NONE` (the default), no statistics are returned.
2180
+ # @option params [String] :conditional_operator
2181
+ # This is a legacy parameter, for backward compatibility. New
2182
+ # applications should use *ConditionExpression* instead. Do not combine
2183
+ # legacy parameters and expression parameters in a single API call;
2184
+ # otherwise, DynamoDB will return a *ValidationException* exception.
2185
+ #
2186
+ # A logical operator to apply to the conditions in the *Expected* map:
2187
+ #
2188
+ # * `AND` - If all of the conditions evaluate to true, then the entire
2189
+ # map evaluates to true.
2190
+ #
2191
+ # * `OR` - If at least one of the conditions evaluate to true, then the
2192
+ # entire map evaluates to true.
2193
+ #
2194
+ # If you omit *ConditionalOperator*, then `AND` is the default.
2195
+ #
2196
+ # The operation will succeed only if the entire map evaluates to true.
2197
+ #
2198
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
2199
+ #
2200
+ # </note>
2201
+ # @option params [String] :condition_expression
2202
+ # A condition that must be satisfied in order for a conditional
2203
+ # *PutItem* operation to succeed.
2204
+ #
2205
+ # An expression can contain any of the following:
2206
+ #
2207
+ # * Functions: `attribute_exists | attribute_not_exists | attribute_type
2208
+ # | contains | begins_with | size`
2209
+ #
2210
+ # These function names are case-sensitive.
2211
+ #
2212
+ # * Comparison operators: ` = | &#x3C;&#x3E; | &#x3C; | &#x3E; | &#x3C;=
2213
+ # | &#x3E;= | BETWEEN | IN`
2214
+ #
2215
+ # * Logical operators: `AND | OR | NOT`
2216
+ #
2217
+ # For more information on condition expressions, see [Specifying
2218
+ # Conditions][1] in the *Amazon DynamoDB Developer Guide*.
2219
+ #
2220
+ # <note markdown="1"> *ConditionExpression* replaces the legacy *ConditionalOperator* and
2221
+ # *Expected* parameters.
2222
+ #
2223
+ # </note>
2224
+ #
2225
+ #
2226
+ #
2227
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
2228
+ # @option params [Hash<String,String>] :expression_attribute_names
2229
+ # One or more substitution tokens for attribute names in an expression.
2230
+ # The following are some use cases for using
2231
+ # *ExpressionAttributeNames*\:
2232
+ #
2233
+ # * To access an attribute whose name conflicts with a DynamoDB reserved
2234
+ # word.
2235
+ #
2236
+ # * To create a placeholder for repeating occurrences of an attribute
2237
+ # name in an expression.
2238
+ #
2239
+ # * To prevent special characters in an attribute name from being
2240
+ # misinterpreted in an expression.
2241
+ #
2242
+ # Use the **#** character in an expression to dereference an attribute
2243
+ # name. For example, consider the following attribute name:
2244
+ #
2245
+ # * `Percentile`
2246
+ #
2247
+ # ^
2248
+ #
2249
+ # The name of this attribute conflicts with a reserved word, so it
2250
+ # cannot be used directly in an expression. (For the complete list of
2251
+ # reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
2252
+ # Developer Guide*). To work around this, you could specify the
2253
+ # following for *ExpressionAttributeNames*\:
2254
+ #
2255
+ # * `\{"#P":"Percentile"\}`
2256
+ #
2257
+ # ^
2258
+ #
2259
+ # You could then use this substitution in an expression, as in this
2260
+ # example:
2261
+ #
2262
+ # * `#P = :val`
2263
+ #
2264
+ # ^
2265
+ #
2266
+ # <note markdown="1"> Tokens that begin with the **\:** character are *expression attribute
2267
+ # values*, which are placeholders for the actual value at runtime.
2268
+ #
2269
+ # </note>
2270
+ #
2271
+ # For more information on expression attribute names, see [Accessing
2272
+ # Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
2273
+ #
2274
+ #
2275
+ #
2276
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
2277
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
2278
+ # @option params [Hash<String,Types::AttributeValue>] :expression_attribute_values
2279
+ # One or more values that can be substituted in an expression.
2280
+ #
2281
+ # Use the **\:** (colon) character in an expression to dereference an
2282
+ # attribute value. For example, suppose that you wanted to check whether
2283
+ # the value of the *ProductStatus* attribute was one of the following:
2284
+ #
2285
+ # `Available | Backordered | Discontinued`
2286
+ #
2287
+ # You would first need to specify *ExpressionAttributeValues* as
2288
+ # follows:
2289
+ #
2290
+ # `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
2291
+ # ":disc":\{"S":"Discontinued"\} \}`
2292
+ #
2293
+ # You could then use these values in an expression, such as this:
2294
+ #
2295
+ # `ProductStatus IN (:avail, :back, :disc)`
2296
+ #
2297
+ # For more information on expression attribute values, see [Specifying
2298
+ # Conditions][1] in the *Amazon DynamoDB Developer Guide*.
2299
+ #
2300
+ #
2301
+ #
2302
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
2303
+ # @return [Types::PutItemOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
2304
+ #
2305
+ # * {Types::PutItemOutput#attributes #Attributes} => Hash&lt;String,Types::AttributeValue&gt;
2306
+ # * {Types::PutItemOutput#consumed_capacity #ConsumedCapacity} => Types::ConsumedCapacity
2307
+ # * {Types::PutItemOutput#item_collection_metrics #ItemCollectionMetrics} => Types::ItemCollectionMetrics
2308
+ #
2309
+ # @example Request syntax with placeholder values
2310
+ # resp = client.put_item({
2311
+ # table_name: "TableName", # required
2312
+ # item: { # required
2313
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2314
+ # },
2315
+ # expected: {
2316
+ # "AttributeName" => {
2317
+ # value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2318
+ # exists: false,
2319
+ # comparison_operator: "EQ", # accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
2320
+ # attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2321
+ # },
2322
+ # },
2323
+ # return_values: "NONE", # accepts NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW
2324
+ # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
2325
+ # return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
2326
+ # conditional_operator: "AND", # accepts AND, OR
2327
+ # condition_expression: "ConditionExpression",
2328
+ # expression_attribute_names: {
2329
+ # "ExpressionAttributeNameVariable" => "AttributeName",
2330
+ # },
2331
+ # expression_attribute_values: {
2332
+ # "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2333
+ # },
2334
+ # })
2335
+ #
2336
+ # @example Response structure
2337
+ # resp.attributes #=> Hash
2338
+ # resp.attributes["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2339
+ # resp.consumed_capacity.table_name #=> String
2340
+ # resp.consumed_capacity.capacity_units #=> Float
2341
+ # resp.consumed_capacity.table.capacity_units #=> Float
2342
+ # resp.consumed_capacity.local_secondary_indexes #=> Hash
2343
+ # resp.consumed_capacity.local_secondary_indexes["IndexName"].capacity_units #=> Float
2344
+ # resp.consumed_capacity.global_secondary_indexes #=> Hash
2345
+ # resp.consumed_capacity.global_secondary_indexes["IndexName"].capacity_units #=> Float
2346
+ # resp.item_collection_metrics.item_collection_key #=> Hash
2347
+ # resp.item_collection_metrics.item_collection_key["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2348
+ # resp.item_collection_metrics.size_estimate_range_gb #=> Array
2349
+ # resp.item_collection_metrics.size_estimate_range_gb[0] #=> Float
2350
+ # @overload put_item(params = {})
2351
+ # @param [Hash] params ({})
2352
+ def put_item(params = {}, options = {})
2353
+ req = build_request(:put_item, params)
2354
+ req.send_request(options)
2355
+ end
2356
+
2357
+ # A *Query* operation uses the primary key of a table or a secondary
2358
+ # index to directly access items from that table or index.
2359
+ #
2360
+ # Use the *KeyConditionExpression* parameter to provide a specific value
2361
+ # for the partition key. The *Query* operation will return all of the
2362
+ # items from the table or index with that partition key value. You can
2363
+ # optionally narrow the scope of the *Query* operation by specifying a
2364
+ # sort key value and a comparison operator in *KeyConditionExpression*.
2365
+ # You can use the *ScanIndexForward* parameter to get results in forward
2366
+ # or reverse order, by sort key.
2367
+ #
2368
+ # Queries that do not return results consume the minimum number of read
2369
+ # capacity units for that type of read operation.
2370
+ #
2371
+ # If the total number of items meeting the query criteria exceeds the
2372
+ # result set size limit of 1 MB, the query stops and results are
2373
+ # returned to the user with the *LastEvaluatedKey* element to continue
2374
+ # the query in a subsequent operation. Unlike a *Scan* operation, a
2375
+ # *Query* operation never returns both an empty result set and a
2376
+ # *LastEvaluatedKey* value. *LastEvaluatedKey* is only provided if you
2377
+ # have used the *Limit* parameter, or if the result set exceeds 1 MB
2378
+ # (prior to applying a filter).
2379
+ #
2380
+ # You can query a table, a local secondary index, or a global secondary
2381
+ # index. For a query on a table or on a local secondary index, you can
2382
+ # set the *ConsistentRead* parameter to `true` and obtain a strongly
2383
+ # consistent result. Global secondary indexes support eventually
2384
+ # consistent reads only, so do not specify *ConsistentRead* when
2385
+ # querying a global secondary index.
2386
+ # @option params [required, String] :table_name
2387
+ # The name of the table containing the requested items.
2388
+ # @option params [String] :index_name
2389
+ # The name of an index to query. This index can be any local secondary
2390
+ # index or global secondary index on the table. Note that if you use the
2391
+ # *IndexName* parameter, you must also provide *TableName.*
2392
+ # @option params [String] :select
2393
+ # The attributes to be returned in the result. You can retrieve all item
2394
+ # attributes, specific item attributes, the count of matching items, or
2395
+ # in the case of an index, some or all of the attributes projected into
2396
+ # the index.
2397
+ #
2398
+ # * `ALL_ATTRIBUTES` - Returns all of the item attributes from the
2399
+ # specified table or index. If you query a local secondary index, then
2400
+ # for each matching item in the index DynamoDB will fetch the entire
2401
+ # item from the parent table. If the index is configured to project
2402
+ # all item attributes, then all of the data can be obtained from the
2403
+ # local secondary index, and no fetching is required.
2404
+ #
2405
+ # * `ALL_PROJECTED_ATTRIBUTES` - Allowed only when querying an index.
2406
+ # Retrieves all attributes that have been projected into the index. If
2407
+ # the index is configured to project all attributes, this return value
2408
+ # is equivalent to specifying `ALL_ATTRIBUTES`.
2409
+ #
2410
+ # * `COUNT` - Returns the number of matching items, rather than the
2411
+ # matching items themselves.
2412
+ #
2413
+ # * `SPECIFIC_ATTRIBUTES` - Returns only the attributes listed in
2414
+ # *AttributesToGet*. This return value is equivalent to specifying
2415
+ # *AttributesToGet* without specifying any value for *Select*.
2416
+ #
2417
+ # If you query a local secondary index and request only attributes
2418
+ # that are projected into that index, the operation will read only the
2419
+ # index and not the table. If any of the requested attributes are not
2420
+ # projected into the local secondary index, DynamoDB will fetch each
2421
+ # of these attributes from the parent table. This extra fetching
2422
+ # incurs additional throughput cost and latency.
2423
+ #
2424
+ # If you query a global secondary index, you can only request
2425
+ # attributes that are projected into the index. Global secondary index
2426
+ # queries cannot fetch attributes from the parent table.
2427
+ #
2428
+ # If neither *Select* nor *AttributesToGet* are specified, DynamoDB
2429
+ # defaults to `ALL_ATTRIBUTES` when accessing a table, and
2430
+ # `ALL_PROJECTED_ATTRIBUTES` when accessing an index. You cannot use
2431
+ # both *Select* and *AttributesToGet* together in a single request,
2432
+ # unless the value for *Select* is `SPECIFIC_ATTRIBUTES`. (This usage is
2433
+ # equivalent to specifying *AttributesToGet* without any value for
2434
+ # *Select*.)
2435
+ #
2436
+ # <note markdown="1"> If you use the *ProjectionExpression* parameter, then the value for
2437
+ # *Select* can only be `SPECIFIC_ATTRIBUTES`. Any other value for
2438
+ # *Select* will return an error.
2439
+ #
2440
+ # </note>
2441
+ # @option params [Array<String>] :attributes_to_get
2442
+ # This is a legacy parameter, for backward compatibility. New
2443
+ # applications should use *ProjectionExpression* instead. Do not combine
2444
+ # legacy parameters and expression parameters in a single API call;
2445
+ # otherwise, DynamoDB will return a *ValidationException* exception.
2446
+ #
2447
+ # This parameter allows you to retrieve attributes of type List or Map;
2448
+ # however, it cannot retrieve individual elements within a List or a
2449
+ # Map.
2450
+ #
2451
+ # The names of one or more attributes to retrieve. If no attribute names
2452
+ # are provided, then all attributes will be returned. If any of the
2453
+ # requested attributes are not found, they will not appear in the
2454
+ # result.
2455
+ #
2456
+ # Note that *AttributesToGet* has no effect on provisioned throughput
2457
+ # consumption. DynamoDB determines capacity units consumed based on item
2458
+ # size, not on the amount of data that is returned to an application.
2459
+ #
2460
+ # You cannot use both *AttributesToGet* and *Select* together in a
2461
+ # *Query* request, *unless* the value for *Select* is
2462
+ # `SPECIFIC_ATTRIBUTES`. (This usage is equivalent to specifying
2463
+ # *AttributesToGet* without any value for *Select*.)
2464
+ #
2465
+ # If you query a local secondary index and request only attributes that
2466
+ # are projected into that index, the operation will read only the index
2467
+ # and not the table. If any of the requested attributes are not
2468
+ # projected into the local secondary index, DynamoDB will fetch each of
2469
+ # these attributes from the parent table. This extra fetching incurs
2470
+ # additional throughput cost and latency.
2471
+ #
2472
+ # If you query a global secondary index, you can only request attributes
2473
+ # that are projected into the index. Global secondary index queries
2474
+ # cannot fetch attributes from the parent table.
2475
+ # @option params [Integer] :limit
2476
+ # The maximum number of items to evaluate (not necessarily the number of
2477
+ # matching items). If DynamoDB processes the number of items up to the
2478
+ # limit while processing the results, it stops the operation and returns
2479
+ # the matching values up to that point, and a key in *LastEvaluatedKey*
2480
+ # to apply in a subsequent operation, so that you can pick up where you
2481
+ # left off. Also, if the processed data set size exceeds 1 MB before
2482
+ # DynamoDB reaches this limit, it stops the operation and returns the
2483
+ # matching values up to the limit, and a key in *LastEvaluatedKey* to
2484
+ # apply in a subsequent operation to continue the operation. For more
2485
+ # information, see [Query and Scan][1] in the *Amazon DynamoDB Developer
2486
+ # Guide*.
2487
+ #
2488
+ #
2489
+ #
2490
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
2491
+ # @option params [Boolean] :consistent_read
2492
+ # Determines the read consistency model: If set to `true`, then the
2493
+ # operation uses strongly consistent reads; otherwise, the operation
2494
+ # uses eventually consistent reads.
2495
+ #
2496
+ # Strongly consistent reads are not supported on global secondary
2497
+ # indexes. If you query a global secondary index with *ConsistentRead*
2498
+ # set to `true`, you will receive a *ValidationException*.
2499
+ # @option params [Hash<String,Types::Condition>] :key_conditions
2500
+ # This is a legacy parameter, for backward compatibility. New
2501
+ # applications should use *KeyConditionExpression* instead. Do not
2502
+ # combine legacy parameters and expression parameters in a single API
2503
+ # call; otherwise, DynamoDB will return a *ValidationException*
2504
+ # exception.
2505
+ #
2506
+ # The selection criteria for the query. For a query on a table, you can
2507
+ # have conditions only on the table primary key attributes. You must
2508
+ # provide the partition key name and value as an `EQ` condition. You can
2509
+ # optionally provide a second condition, referring to the sort key.
2510
+ #
2511
+ # <note markdown="1"> If you don't provide a sort key condition, all of the items that
2512
+ # match the partition key will be retrieved. If a *FilterExpression* or
2513
+ # *QueryFilter* is present, it will be applied after the items are
2514
+ # retrieved.
2515
+ #
2516
+ # </note>
2517
+ #
2518
+ # For a query on an index, you can have conditions only on the index key
2519
+ # attributes. You must provide the index partition key name and value as
2520
+ # an `EQ` condition. You can optionally provide a second condition,
2521
+ # referring to the index sort key.
2522
+ #
2523
+ # Each *KeyConditions* element consists of an attribute name to compare,
2524
+ # along with the following:
2525
+ #
2526
+ # * *AttributeValueList* - One or more values to evaluate against the
2527
+ # supplied attribute. The number of values in the list depends on the
2528
+ # *ComparisonOperator* being used.
2529
+ #
2530
+ # For type Number, value comparisons are numeric.
2531
+ #
2532
+ # String value comparisons for greater than, equals, or less than are
2533
+ # based on ASCII character code values. For example, `a` is greater
2534
+ # than `A`, and `a` is greater than `B`. For a list of code values,
2535
+ # see
2536
+ # [http://en.wikipedia.org/wiki/ASCII#ASCII\_printable\_characters][1].
2537
+ #
2538
+ # For Binary, DynamoDB treats each byte of the binary data as unsigned
2539
+ # when it compares binary values.
2540
+ #
2541
+ # * *ComparisonOperator* - A comparator for evaluating attributes, for
2542
+ # example, equals, greater than, less than, and so on.
2543
+ #
2544
+ # For *KeyConditions*, only the following comparison operators are
2545
+ # supported:
2546
+ #
2547
+ # `EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN`
2548
+ #
2549
+ # The following are descriptions of these comparison operators.
2550
+ #
2551
+ # * `EQ`\: Equal.
2552
+ #
2553
+ # *AttributeValueList* can contain only one *AttributeValue* of type
2554
+ # String, Number, or Binary (not a set type). If an item contains an
2555
+ # *AttributeValue* element of a different type than the one
2556
+ # specified in the request, the value does not match. For example,
2557
+ # `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also, `\{"N":"6"\}`
2558
+ # does not equal `\{"NS":["6", "2", "1"]\}`.
2559
+ #
2560
+ #
2561
+ #
2562
+ # * `LE`\: Less than or equal.
2563
+ #
2564
+ # *AttributeValueList* can contain only one *AttributeValue* element
2565
+ # of type String, Number, or Binary (not a set type). If an item
2566
+ # contains an *AttributeValue* element of a different type than the
2567
+ # one provided in the request, the value does not match. For
2568
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
2569
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
2570
+ #
2571
+ #
2572
+ #
2573
+ # * `LT`\: Less than.
2574
+ #
2575
+ # *AttributeValueList* can contain only one *AttributeValue* of type
2576
+ # String, Number, or Binary (not a set type). If an item contains an
2577
+ # *AttributeValue* element of a different type than the one provided
2578
+ # in the request, the value does not match. For example,
2579
+ # `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also, `\{"N":"6"\}`
2580
+ # does not compare to `\{"NS":["6", "2", "1"]\}`.
2581
+ #
2582
+ #
2583
+ #
2584
+ # * `GE`\: Greater than or equal.
2585
+ #
2586
+ # *AttributeValueList* can contain only one *AttributeValue* element
2587
+ # of type String, Number, or Binary (not a set type). If an item
2588
+ # contains an *AttributeValue* element of a different type than the
2589
+ # one provided in the request, the value does not match. For
2590
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
2591
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
2592
+ #
2593
+ #
2594
+ #
2595
+ # * `GT`\: Greater than.
2596
+ #
2597
+ # *AttributeValueList* can contain only one *AttributeValue* element
2598
+ # of type String, Number, or Binary (not a set type). If an item
2599
+ # contains an *AttributeValue* element of a different type than the
2600
+ # one provided in the request, the value does not match. For
2601
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
2602
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
2603
+ #
2604
+ #
2605
+ #
2606
+ # * `BEGINS_WITH`\: Checks for a prefix.
2607
+ #
2608
+ # *AttributeValueList* can contain only one *AttributeValue* of type
2609
+ # String or Binary (not a Number or a set type). The target
2610
+ # attribute of the comparison must be of type String or Binary (not
2611
+ # a Number or a set type).
2612
+ #
2613
+ #
2614
+ #
2615
+ # * `BETWEEN`\: Greater than or equal to the first value, and less
2616
+ # than or equal to the second value.
2617
+ #
2618
+ # *AttributeValueList* must contain two *AttributeValue* elements of
2619
+ # the same type, either String, Number, or Binary (not a set type).
2620
+ # A target attribute matches if the target value is greater than, or
2621
+ # equal to, the first element and less than, or equal to, the second
2622
+ # element. If an item contains an *AttributeValue* element of a
2623
+ # different type than the one provided in the request, the value
2624
+ # does not match. For example, `\{"S":"6"\}` does not compare to
2625
+ # `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not compare to
2626
+ # `\{"NS":["6", "2", "1"]\}`
2627
+ #
2628
+ # For usage examples of *AttributeValueList* and *ComparisonOperator*,
2629
+ # see [Legacy Conditional Parameters][2] in the *Amazon DynamoDB
2630
+ # Developer Guide*.
2631
+ #
2632
+ #
2633
+ #
2634
+ # [1]: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
2635
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.html
2636
+ # @option params [Hash<String,Types::Condition>] :query_filter
2637
+ # This is a legacy parameter, for backward compatibility. New
2638
+ # applications should use *FilterExpression* instead. Do not combine
2639
+ # legacy parameters and expression parameters in a single API call;
2640
+ # otherwise, DynamoDB will return a *ValidationException* exception.
2641
+ #
2642
+ # A condition that evaluates the query results after the items are read
2643
+ # and returns only the desired values.
2644
+ #
2645
+ # This parameter does not support attributes of type List or Map.
2646
+ #
2647
+ # <note markdown="1"> A *QueryFilter* is applied after the items have already been read; the
2648
+ # process of filtering does not consume any additional read capacity
2649
+ # units.
2650
+ #
2651
+ # </note>
2652
+ #
2653
+ # If you provide more than one condition in the *QueryFilter* map, then
2654
+ # by default all of the conditions must evaluate to true. In other
2655
+ # words, the conditions are ANDed together. (You can use the
2656
+ # *ConditionalOperator* parameter to OR the conditions instead. If you
2657
+ # do this, then at least one of the conditions must evaluate to true,
2658
+ # rather than all of them.)
2659
+ #
2660
+ # Note that *QueryFilter* does not allow key attributes. You cannot
2661
+ # define a filter condition on a partition key or a sort key.
2662
+ #
2663
+ # Each *QueryFilter* element consists of an attribute name to compare,
2664
+ # along with the following:
2665
+ #
2666
+ # * *AttributeValueList* - One or more values to evaluate against the
2667
+ # supplied attribute. The number of values in the list depends on the
2668
+ # operator specified in *ComparisonOperator*.
2669
+ #
2670
+ # For type Number, value comparisons are numeric.
2671
+ #
2672
+ # String value comparisons for greater than, equals, or less than are
2673
+ # based on ASCII character code values. For example, `a` is greater
2674
+ # than `A`, and `a` is greater than `B`. For a list of code values,
2675
+ # see
2676
+ # [http://en.wikipedia.org/wiki/ASCII#ASCII\_printable\_characters][1].
2677
+ #
2678
+ # For type Binary, DynamoDB treats each byte of the binary data as
2679
+ # unsigned when it compares binary values.
2680
+ #
2681
+ # For information on specifying data types in JSON, see [JSON Data
2682
+ # Format][2] in the *Amazon DynamoDB Developer Guide*.
2683
+ #
2684
+ # * *ComparisonOperator* - A comparator for evaluating attributes. For
2685
+ # example, equals, greater than, less than, etc.
2686
+ #
2687
+ # The following comparison operators are available:
2688
+ #
2689
+ # `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS |
2690
+ # NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN`
2691
+ #
2692
+ # For complete descriptions of all comparison operators, see the
2693
+ # [Condition][3] data type.
2694
+ #
2695
+ #
2696
+ #
2697
+ # [1]: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
2698
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataFormat.html
2699
+ # [3]: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
2700
+ # @option params [String] :conditional_operator
2701
+ # This is a legacy parameter, for backward compatibility. New
2702
+ # applications should use *FilterExpression* instead. Do not combine
2703
+ # legacy parameters and expression parameters in a single API call;
2704
+ # otherwise, DynamoDB will return a *ValidationException* exception.
2705
+ #
2706
+ # A logical operator to apply to the conditions in a *QueryFilter* map:
2707
+ #
2708
+ # * `AND` - If all of the conditions evaluate to true, then the entire
2709
+ # map evaluates to true.
2710
+ #
2711
+ # * `OR` - If at least one of the conditions evaluate to true, then the
2712
+ # entire map evaluates to true.
2713
+ #
2714
+ # If you omit *ConditionalOperator*, then `AND` is the default.
2715
+ #
2716
+ # The operation will succeed only if the entire map evaluates to true.
2717
+ #
2718
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
2719
+ #
2720
+ # </note>
2721
+ # @option params [Boolean] :scan_index_forward
2722
+ # Specifies the order for index traversal: If `true` (default), the
2723
+ # traversal is performed in ascending order; if `false`, the traversal
2724
+ # is performed in descending order.
2725
+ #
2726
+ # Items with the same partition key value are stored in sorted order by
2727
+ # sort key. If the sort key data type is Number, the results are stored
2728
+ # in numeric order. For type String, the results are stored in order of
2729
+ # ASCII character code values. For type Binary, DynamoDB treats each
2730
+ # byte of the binary data as unsigned.
2731
+ #
2732
+ # If *ScanIndexForward* is `true`, DynamoDB returns the results in the
2733
+ # order in which they are stored (by sort key value). This is the
2734
+ # default behavior. If *ScanIndexForward* is `false`, DynamoDB reads the
2735
+ # results in reverse order by sort key value, and then returns the
2736
+ # results to the client.
2737
+ # @option params [Hash<String,Types::AttributeValue>] :exclusive_start_key
2738
+ # The primary key of the first item that this operation will evaluate.
2739
+ # Use the value that was returned for *LastEvaluatedKey* in the previous
2740
+ # operation.
2741
+ #
2742
+ # The data type for *ExclusiveStartKey* must be String, Number or
2743
+ # Binary. No set data types are allowed.
2744
+ # @option params [String] :return_consumed_capacity
2745
+ # Determines the level of detail about provisioned throughput
2746
+ # consumption that is returned in the response:
2747
+ #
2748
+ # * *INDEXES* - The response includes the aggregate *ConsumedCapacity*
2749
+ # for the operation, together with *ConsumedCapacity* for each table
2750
+ # and secondary index that was accessed.
2751
+ #
2752
+ # Note that some operations, such as *GetItem* and *BatchGetItem*, do
2753
+ # not access any indexes at all. In these cases, specifying *INDEXES*
2754
+ # will only return *ConsumedCapacity* information for table(s).
2755
+ #
2756
+ # * *TOTAL* - The response includes only the aggregate
2757
+ # *ConsumedCapacity* for the operation.
2758
+ #
2759
+ # * *NONE* - No *ConsumedCapacity* details are included in the response.
2760
+ # @option params [String] :projection_expression
2761
+ # A string that identifies one or more attributes to retrieve from the
2762
+ # table. These attributes can include scalars, sets, or elements of a
2763
+ # JSON document. The attributes in the expression must be separated by
2764
+ # commas.
2765
+ #
2766
+ # If no attribute names are specified, then all attributes will be
2767
+ # returned. If any of the requested attributes are not found, they will
2768
+ # not appear in the result.
2769
+ #
2770
+ # For more information, see [Accessing Item Attributes][1] in the
2771
+ # *Amazon DynamoDB Developer Guide*.
2772
+ #
2773
+ # <note markdown="1"> *ProjectionExpression* replaces the legacy *AttributesToGet*
2774
+ # parameter.
2775
+ #
2776
+ # </note>
2777
+ #
2778
+ #
2779
+ #
2780
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
2781
+ # @option params [String] :filter_expression
2782
+ # A string that contains conditions that DynamoDB applies after the
2783
+ # *Query* operation, but before the data is returned to you. Items that
2784
+ # do not satisfy the *FilterExpression* criteria are not returned.
2785
+ #
2786
+ # <note markdown="1"> A *FilterExpression* is applied after the items have already been
2787
+ # read; the process of filtering does not consume any additional read
2788
+ # capacity units.
2789
+ #
2790
+ # </note>
2791
+ #
2792
+ # For more information, see [Filter Expressions][1] in the *Amazon
2793
+ # DynamoDB Developer Guide*.
2794
+ #
2795
+ # <note markdown="1"> *FilterExpression* replaces the legacy *QueryFilter* and
2796
+ # *ConditionalOperator* parameters.
2797
+ #
2798
+ # </note>
2799
+ #
2800
+ #
2801
+ #
2802
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#FilteringResults
2803
+ # @option params [String] :key_condition_expression
2804
+ # The condition that specifies the key value(s) for items to be
2805
+ # retrieved by the *Query* action.
2806
+ #
2807
+ # The condition must perform an equality test on a single partition key
2808
+ # value. The condition can also perform one of several comparison tests
2809
+ # on a single sort key value. *Query* can use *KeyConditionExpression*
2810
+ # to retrieve one item with a given partition key value and sort key
2811
+ # value, or several items that have the same partition key value but
2812
+ # different sort key values.
2813
+ #
2814
+ # The partition key equality test is required, and must be specified in
2815
+ # the following format:
2816
+ #
2817
+ # `partitionKeyName` *=* `:partitionkeyval`
2818
+ #
2819
+ # If you also want to provide a condition for the sort key, it must be
2820
+ # combined using *AND* with the condition for the sort key. Following is
2821
+ # an example, using the **=** comparison operator for the sort key:
2822
+ #
2823
+ # `partitionKeyName` *=* `:partitionkeyval` *AND* `sortKeyName` *=*
2824
+ # `:sortkeyval`
2825
+ #
2826
+ # Valid comparisons for the sort key condition are as follows:
2827
+ #
2828
+ # * `sortKeyName` *=* `:sortkeyval` - true if the sort key value is
2829
+ # equal to `:sortkeyval`.
2830
+ #
2831
+ # * `sortKeyName` *&lt;* `:sortkeyval` - true if the sort key value is
2832
+ # less than `:sortkeyval`.
2833
+ #
2834
+ # * `sortKeyName` *&lt;=* `:sortkeyval` - true if the sort key value is
2835
+ # less than or equal to `:sortkeyval`.
2836
+ #
2837
+ # * `sortKeyName` *&gt;* `:sortkeyval` - true if the sort key value is
2838
+ # greater than `:sortkeyval`.
2839
+ #
2840
+ # * `sortKeyName` <i>&gt;= </i> `:sortkeyval` - true if the sort key
2841
+ # value is greater than or equal to `:sortkeyval`.
2842
+ #
2843
+ # * `sortKeyName` *BETWEEN* `:sortkeyval1` *AND* `:sortkeyval2` - true
2844
+ # if the sort key value is greater than or equal to `:sortkeyval1`,
2845
+ # and less than or equal to `:sortkeyval2`.
2846
+ #
2847
+ # * *begins\_with (* `sortKeyName`, `:sortkeyval` *)* - true if the sort
2848
+ # key value begins with a particular operand. (You cannot use this
2849
+ # function with a sort key that is of type Number.) Note that the
2850
+ # function name `begins_with` is case-sensitive.
2851
+ #
2852
+ # Use the *ExpressionAttributeValues* parameter to replace tokens such
2853
+ # as `:partitionval` and `:sortval` with actual values at runtime.
2854
+ #
2855
+ # You can optionally use the *ExpressionAttributeNames* parameter to
2856
+ # replace the names of the partition key and sort key with placeholder
2857
+ # tokens. This option might be necessary if an attribute name conflicts
2858
+ # with a DynamoDB reserved word. For example, the following
2859
+ # *KeyConditionExpression* parameter causes an error because *Size* is a
2860
+ # reserved word:
2861
+ #
2862
+ # * `Size = :myval`
2863
+ #
2864
+ # ^
2865
+ #
2866
+ # To work around this, define a placeholder (such a `#S`) to represent
2867
+ # the attribute name *Size*. *KeyConditionExpression* then is as
2868
+ # follows:
2869
+ #
2870
+ # * `#S = :myval`
2871
+ #
2872
+ # ^
2873
+ #
2874
+ # For a list of reserved words, see [Reserved Words][1] in the *Amazon
2875
+ # DynamoDB Developer Guide*.
2876
+ #
2877
+ # For more information on *ExpressionAttributeNames* and
2878
+ # *ExpressionAttributeValues*, see [Using Placeholders for Attribute
2879
+ # Names and Values][2] in the *Amazon DynamoDB Developer Guide*.
2880
+ #
2881
+ # <note markdown="1"> *KeyConditionExpression* replaces the legacy *KeyConditions*
2882
+ # parameter.
2883
+ #
2884
+ # </note>
2885
+ #
2886
+ #
2887
+ #
2888
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
2889
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ExpressionPlaceholders.html
2890
+ # @option params [Hash<String,String>] :expression_attribute_names
2891
+ # One or more substitution tokens for attribute names in an expression.
2892
+ # The following are some use cases for using
2893
+ # *ExpressionAttributeNames*\:
2894
+ #
2895
+ # * To access an attribute whose name conflicts with a DynamoDB reserved
2896
+ # word.
2897
+ #
2898
+ # * To create a placeholder for repeating occurrences of an attribute
2899
+ # name in an expression.
2900
+ #
2901
+ # * To prevent special characters in an attribute name from being
2902
+ # misinterpreted in an expression.
2903
+ #
2904
+ # Use the **#** character in an expression to dereference an attribute
2905
+ # name. For example, consider the following attribute name:
2906
+ #
2907
+ # * `Percentile`
2908
+ #
2909
+ # ^
2910
+ #
2911
+ # The name of this attribute conflicts with a reserved word, so it
2912
+ # cannot be used directly in an expression. (For the complete list of
2913
+ # reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
2914
+ # Developer Guide*). To work around this, you could specify the
2915
+ # following for *ExpressionAttributeNames*\:
2916
+ #
2917
+ # * `\{"#P":"Percentile"\}`
2918
+ #
2919
+ # ^
2920
+ #
2921
+ # You could then use this substitution in an expression, as in this
2922
+ # example:
2923
+ #
2924
+ # * `#P = :val`
2925
+ #
2926
+ # ^
2927
+ #
2928
+ # <note markdown="1"> Tokens that begin with the **\:** character are *expression attribute
2929
+ # values*, which are placeholders for the actual value at runtime.
2930
+ #
2931
+ # </note>
2932
+ #
2933
+ # For more information on expression attribute names, see [Accessing
2934
+ # Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
2935
+ #
2936
+ #
2937
+ #
2938
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
2939
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
2940
+ # @option params [Hash<String,Types::AttributeValue>] :expression_attribute_values
2941
+ # One or more values that can be substituted in an expression.
2942
+ #
2943
+ # Use the **\:** (colon) character in an expression to dereference an
2944
+ # attribute value. For example, suppose that you wanted to check whether
2945
+ # the value of the *ProductStatus* attribute was one of the following:
2946
+ #
2947
+ # `Available | Backordered | Discontinued`
2948
+ #
2949
+ # You would first need to specify *ExpressionAttributeValues* as
2950
+ # follows:
2951
+ #
2952
+ # `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
2953
+ # ":disc":\{"S":"Discontinued"\} \}`
2954
+ #
2955
+ # You could then use these values in an expression, such as this:
2956
+ #
2957
+ # `ProductStatus IN (:avail, :back, :disc)`
2958
+ #
2959
+ # For more information on expression attribute values, see [Specifying
2960
+ # Conditions][1] in the *Amazon DynamoDB Developer Guide*.
2961
+ #
2962
+ #
2963
+ #
2964
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
2965
+ # @return [Types::QueryOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
2966
+ #
2967
+ # * {Types::QueryOutput#items #Items} => Array&lt;Hash&lt;String,Types::AttributeValue&gt;&gt;
2968
+ # * {Types::QueryOutput#count #Count} => Integer
2969
+ # * {Types::QueryOutput#scanned_count #ScannedCount} => Integer
2970
+ # * {Types::QueryOutput#last_evaluated_key #LastEvaluatedKey} => Hash&lt;String,Types::AttributeValue&gt;
2971
+ # * {Types::QueryOutput#consumed_capacity #ConsumedCapacity} => Types::ConsumedCapacity
2972
+ #
2973
+ # @example Request syntax with placeholder values
2974
+ # resp = client.query({
2975
+ # table_name: "TableName", # required
2976
+ # index_name: "IndexName",
2977
+ # select: "ALL_ATTRIBUTES", # accepts ALL_ATTRIBUTES, ALL_PROJECTED_ATTRIBUTES, SPECIFIC_ATTRIBUTES, COUNT
2978
+ # attributes_to_get: ["AttributeName"],
2979
+ # limit: 1,
2980
+ # consistent_read: false,
2981
+ # key_conditions: {
2982
+ # "AttributeName" => {
2983
+ # attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2984
+ # comparison_operator: "EQ", # required, accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
2985
+ # },
2986
+ # },
2987
+ # query_filter: {
2988
+ # "AttributeName" => {
2989
+ # attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2990
+ # comparison_operator: "EQ", # required, accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
2991
+ # },
2992
+ # },
2993
+ # conditional_operator: "AND", # accepts AND, OR
2994
+ # scan_index_forward: false,
2995
+ # exclusive_start_key: {
2996
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
2997
+ # },
2998
+ # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
2999
+ # projection_expression: "ProjectionExpression",
3000
+ # filter_expression: "ConditionExpression",
3001
+ # key_condition_expression: "KeyExpression",
3002
+ # expression_attribute_names: {
3003
+ # "ExpressionAttributeNameVariable" => "AttributeName",
3004
+ # },
3005
+ # expression_attribute_values: {
3006
+ # "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
3007
+ # },
3008
+ # })
3009
+ #
3010
+ # @example Response structure
3011
+ # resp.items #=> Array
3012
+ # resp.items[0] #=> Hash
3013
+ # resp.items[0]["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
3014
+ # resp.count #=> Integer
3015
+ # resp.scanned_count #=> Integer
3016
+ # resp.last_evaluated_key #=> Hash
3017
+ # resp.last_evaluated_key["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
3018
+ # resp.consumed_capacity.table_name #=> String
3019
+ # resp.consumed_capacity.capacity_units #=> Float
3020
+ # resp.consumed_capacity.table.capacity_units #=> Float
3021
+ # resp.consumed_capacity.local_secondary_indexes #=> Hash
3022
+ # resp.consumed_capacity.local_secondary_indexes["IndexName"].capacity_units #=> Float
3023
+ # resp.consumed_capacity.global_secondary_indexes #=> Hash
3024
+ # resp.consumed_capacity.global_secondary_indexes["IndexName"].capacity_units #=> Float
3025
+ # @overload query(params = {})
3026
+ # @param [Hash] params ({})
3027
+ def query(params = {}, options = {})
3028
+ req = build_request(:query, params)
3029
+ req.send_request(options)
3030
+ end
3031
+
3032
+ # The *Scan* operation returns one or more items and item attributes by
3033
+ # accessing every item in a table or a secondary index. To have DynamoDB
3034
+ # return fewer items, you can provide a *ScanFilter* operation.
3035
+ #
3036
+ # If the total number of scanned items exceeds the maximum data set size
3037
+ # limit of 1 MB, the scan stops and results are returned to the user as
3038
+ # a *LastEvaluatedKey* value to continue the scan in a subsequent
3039
+ # operation. The results also include the number of items exceeding the
3040
+ # limit. A scan can result in no table data meeting the filter criteria.
3041
+ #
3042
+ # By default, *Scan* operations proceed sequentially; however, for
3043
+ # faster performance on a large table or secondary index, applications
3044
+ # can request a parallel *Scan* operation by providing the *Segment* and
3045
+ # *TotalSegments* parameters. For more information, see [Parallel
3046
+ # Scan][1] in the *Amazon DynamoDB Developer Guide*.
3047
+ #
3048
+ # By default, *Scan* uses eventually consistent reads when accessing the
3049
+ # data in a table; therefore, the result set might not include the
3050
+ # changes to data in the table immediately before the operation began.
3051
+ # If you need a consistent copy of the data, as of the time that the
3052
+ # Scan begins, you can set the *ConsistentRead* parameter to *true*.
3053
+ #
3054
+ #
3055
+ #
3056
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScanParallelScan
3057
+ # @option params [required, String] :table_name
3058
+ # The name of the table containing the requested items; or, if you
3059
+ # provide `IndexName`, the name of the table to which that index
3060
+ # belongs.
3061
+ # @option params [String] :index_name
3062
+ # The name of a secondary index to scan. This index can be any local
3063
+ # secondary index or global secondary index. Note that if you use the
3064
+ # `IndexName` parameter, you must also provide `TableName`.
3065
+ # @option params [Array<String>] :attributes_to_get
3066
+ # This is a legacy parameter, for backward compatibility. New
3067
+ # applications should use *ProjectionExpression* instead. Do not combine
3068
+ # legacy parameters and expression parameters in a single API call;
3069
+ # otherwise, DynamoDB will return a *ValidationException* exception.
3070
+ #
3071
+ # This parameter allows you to retrieve attributes of type List or Map;
3072
+ # however, it cannot retrieve individual elements within a List or a
3073
+ # Map.
3074
+ #
3075
+ # The names of one or more attributes to retrieve. If no attribute names
3076
+ # are provided, then all attributes will be returned. If any of the
3077
+ # requested attributes are not found, they will not appear in the
3078
+ # result.
3079
+ #
3080
+ # Note that *AttributesToGet* has no effect on provisioned throughput
3081
+ # consumption. DynamoDB determines capacity units consumed based on item
3082
+ # size, not on the amount of data that is returned to an application.
3083
+ # @option params [Integer] :limit
3084
+ # The maximum number of items to evaluate (not necessarily the number of
3085
+ # matching items). If DynamoDB processes the number of items up to the
3086
+ # limit while processing the results, it stops the operation and returns
3087
+ # the matching values up to that point, and a key in *LastEvaluatedKey*
3088
+ # to apply in a subsequent operation, so that you can pick up where you
3089
+ # left off. Also, if the processed data set size exceeds 1 MB before
3090
+ # DynamoDB reaches this limit, it stops the operation and returns the
3091
+ # matching values up to the limit, and a key in *LastEvaluatedKey* to
3092
+ # apply in a subsequent operation to continue the operation. For more
3093
+ # information, see [Query and Scan][1] in the *Amazon DynamoDB Developer
3094
+ # Guide*.
3095
+ #
3096
+ #
3097
+ #
3098
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
3099
+ # @option params [String] :select
3100
+ # The attributes to be returned in the result. You can retrieve all item
3101
+ # attributes, specific item attributes, or the count of matching items.
3102
+ #
3103
+ # * `ALL_ATTRIBUTES` - Returns all of the item attributes.
3104
+ #
3105
+ # * `ALL_PROJECTED_ATTRIBUTES` - Allowed only when querying an index.
3106
+ # Retrieves all attributes that have been projected into the index. If
3107
+ # the index is configured to project all attributes, this return value
3108
+ # is equivalent to specifying `ALL_ATTRIBUTES`.
3109
+ #
3110
+ # * `COUNT` - Returns the number of matching items, rather than the
3111
+ # matching items themselves.
3112
+ #
3113
+ # * `SPECIFIC_ATTRIBUTES` - Returns only the attributes listed in
3114
+ # *AttributesToGet*. This return value is equivalent to specifying
3115
+ # *AttributesToGet* without specifying any value for *Select*.
3116
+ #
3117
+ # If neither *Select* nor *AttributesToGet* are specified, DynamoDB
3118
+ # defaults to `ALL_ATTRIBUTES`. You cannot use both *AttributesToGet*
3119
+ # and *Select* together in a single request, unless the value for
3120
+ # *Select* is `SPECIFIC_ATTRIBUTES`. (This usage is equivalent to
3121
+ # specifying *AttributesToGet* without any value for *Select*.)
3122
+ # @option params [Hash<String,Types::Condition>] :scan_filter
3123
+ # This is a legacy parameter, for backward compatibility. New
3124
+ # applications should use *FilterExpression* instead. Do not combine
3125
+ # legacy parameters and expression parameters in a single API call;
3126
+ # otherwise, DynamoDB will return a *ValidationException* exception.
3127
+ #
3128
+ # A condition that evaluates the scan results and returns only the
3129
+ # desired values.
3130
+ #
3131
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
3132
+ #
3133
+ # </note>
3134
+ #
3135
+ # If you specify more than one condition in the *ScanFilter* map, then
3136
+ # by default all of the conditions must evaluate to true. In other
3137
+ # words, the conditions are ANDed together. (You can use the
3138
+ # *ConditionalOperator* parameter to OR the conditions instead. If you
3139
+ # do this, then at least one of the conditions must evaluate to true,
3140
+ # rather than all of them.)
3141
+ #
3142
+ # Each *ScanFilter* element consists of an attribute name to compare,
3143
+ # along with the following:
3144
+ #
3145
+ # * *AttributeValueList* - One or more values to evaluate against the
3146
+ # supplied attribute. The number of values in the list depends on the
3147
+ # operator specified in *ComparisonOperator* .
3148
+ #
3149
+ # For type Number, value comparisons are numeric.
3150
+ #
3151
+ # String value comparisons for greater than, equals, or less than are
3152
+ # based on ASCII character code values. For example, `a` is greater
3153
+ # than `A`, and `a` is greater than `B`. For a list of code values,
3154
+ # see
3155
+ # [http://en.wikipedia.org/wiki/ASCII#ASCII\_printable\_characters][1].
3156
+ #
3157
+ # For Binary, DynamoDB treats each byte of the binary data as unsigned
3158
+ # when it compares binary values.
3159
+ #
3160
+ # For information on specifying data types in JSON, see [JSON Data
3161
+ # Format][2] in the *Amazon DynamoDB Developer Guide*.
3162
+ #
3163
+ # * *ComparisonOperator* - A comparator for evaluating attributes. For
3164
+ # example, equals, greater than, less than, etc.
3165
+ #
3166
+ # The following comparison operators are available:
3167
+ #
3168
+ # `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS |
3169
+ # NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN`
3170
+ #
3171
+ # For complete descriptions of all comparison operators, see
3172
+ # [Condition][3].
3173
+ #
3174
+ #
3175
+ #
3176
+ # [1]: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
3177
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataFormat.html
3178
+ # [3]: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
3179
+ # @option params [String] :conditional_operator
3180
+ # This is a legacy parameter, for backward compatibility. New
3181
+ # applications should use *FilterExpression* instead. Do not combine
3182
+ # legacy parameters and expression parameters in a single API call;
3183
+ # otherwise, DynamoDB will return a *ValidationException* exception.
3184
+ #
3185
+ # A logical operator to apply to the conditions in a *ScanFilter* map:
3186
+ #
3187
+ # * `AND` - If all of the conditions evaluate to true, then the entire
3188
+ # map evaluates to true.
3189
+ #
3190
+ # * `OR` - If at least one of the conditions evaluate to true, then the
3191
+ # entire map evaluates to true.
3192
+ #
3193
+ # If you omit *ConditionalOperator*, then `AND` is the default.
3194
+ #
3195
+ # The operation will succeed only if the entire map evaluates to true.
3196
+ #
3197
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
3198
+ #
3199
+ # </note>
3200
+ # @option params [Hash<String,Types::AttributeValue>] :exclusive_start_key
3201
+ # The primary key of the first item that this operation will evaluate.
3202
+ # Use the value that was returned for *LastEvaluatedKey* in the previous
3203
+ # operation.
3204
+ #
3205
+ # The data type for *ExclusiveStartKey* must be String, Number or
3206
+ # Binary. No set data types are allowed.
3207
+ #
3208
+ # In a parallel scan, a *Scan* request that includes *ExclusiveStartKey*
3209
+ # must specify the same segment whose previous *Scan* returned the
3210
+ # corresponding value of *LastEvaluatedKey*.
3211
+ # @option params [String] :return_consumed_capacity
3212
+ # Determines the level of detail about provisioned throughput
3213
+ # consumption that is returned in the response:
3214
+ #
3215
+ # * *INDEXES* - The response includes the aggregate *ConsumedCapacity*
3216
+ # for the operation, together with *ConsumedCapacity* for each table
3217
+ # and secondary index that was accessed.
3218
+ #
3219
+ # Note that some operations, such as *GetItem* and *BatchGetItem*, do
3220
+ # not access any indexes at all. In these cases, specifying *INDEXES*
3221
+ # will only return *ConsumedCapacity* information for table(s).
3222
+ #
3223
+ # * *TOTAL* - The response includes only the aggregate
3224
+ # *ConsumedCapacity* for the operation.
3225
+ #
3226
+ # * *NONE* - No *ConsumedCapacity* details are included in the response.
3227
+ # @option params [Integer] :total_segments
3228
+ # For a parallel *Scan* request, *TotalSegments* represents the total
3229
+ # number of segments into which the *Scan* operation will be divided.
3230
+ # The value of *TotalSegments* corresponds to the number of application
3231
+ # workers that will perform the parallel scan. For example, if you want
3232
+ # to use four application threads to scan a table or an index, specify a
3233
+ # *TotalSegments* value of 4.
3234
+ #
3235
+ # The value for *TotalSegments* must be greater than or equal to 1, and
3236
+ # less than or equal to 1000000. If you specify a *TotalSegments* value
3237
+ # of 1, the *Scan* operation will be sequential rather than parallel.
3238
+ #
3239
+ # If you specify *TotalSegments*, you must also specify *Segment*.
3240
+ # @option params [Integer] :segment
3241
+ # For a parallel *Scan* request, *Segment* identifies an individual
3242
+ # segment to be scanned by an application worker.
3243
+ #
3244
+ # Segment IDs are zero-based, so the first segment is always 0. For
3245
+ # example, if you want to use four application threads to scan a table
3246
+ # or an index, then the first thread specifies a *Segment* value of 0,
3247
+ # the second thread specifies 1, and so on.
3248
+ #
3249
+ # The value of *LastEvaluatedKey* returned from a parallel *Scan*
3250
+ # request must be used as *ExclusiveStartKey* with the same segment ID
3251
+ # in a subsequent *Scan* operation.
3252
+ #
3253
+ # The value for *Segment* must be greater than or equal to 0, and less
3254
+ # than the value provided for *TotalSegments*.
3255
+ #
3256
+ # If you provide *Segment*, you must also provide *TotalSegments*.
3257
+ # @option params [String] :projection_expression
3258
+ # A string that identifies one or more attributes to retrieve from the
3259
+ # specified table or index. These attributes can include scalars, sets,
3260
+ # or elements of a JSON document. The attributes in the expression must
3261
+ # be separated by commas.
3262
+ #
3263
+ # If no attribute names are specified, then all attributes will be
3264
+ # returned. If any of the requested attributes are not found, they will
3265
+ # not appear in the result.
3266
+ #
3267
+ # For more information, see [Accessing Item Attributes][1] in the
3268
+ # *Amazon DynamoDB Developer Guide*.
3269
+ #
3270
+ # <note markdown="1"> *ProjectionExpression* replaces the legacy *AttributesToGet*
3271
+ # parameter.
3272
+ #
3273
+ # </note>
3274
+ #
3275
+ #
3276
+ #
3277
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
3278
+ # @option params [String] :filter_expression
3279
+ # A string that contains conditions that DynamoDB applies after the
3280
+ # *Scan* operation, but before the data is returned to you. Items that
3281
+ # do not satisfy the *FilterExpression* criteria are not returned.
3282
+ #
3283
+ # <note markdown="1"> A *FilterExpression* is applied after the items have already been
3284
+ # read; the process of filtering does not consume any additional read
3285
+ # capacity units.
3286
+ #
3287
+ # </note>
3288
+ #
3289
+ # For more information, see [Filter Expressions][1] in the *Amazon
3290
+ # DynamoDB Developer Guide*.
3291
+ #
3292
+ # <note markdown="1"> *FilterExpression* replaces the legacy *ScanFilter* and
3293
+ # *ConditionalOperator* parameters.
3294
+ #
3295
+ # </note>
3296
+ #
3297
+ #
3298
+ #
3299
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#FilteringResults
3300
+ # @option params [Hash<String,String>] :expression_attribute_names
3301
+ # One or more substitution tokens for attribute names in an expression.
3302
+ # The following are some use cases for using
3303
+ # *ExpressionAttributeNames*\:
3304
+ #
3305
+ # * To access an attribute whose name conflicts with a DynamoDB reserved
3306
+ # word.
3307
+ #
3308
+ # * To create a placeholder for repeating occurrences of an attribute
3309
+ # name in an expression.
3310
+ #
3311
+ # * To prevent special characters in an attribute name from being
3312
+ # misinterpreted in an expression.
3313
+ #
3314
+ # Use the **#** character in an expression to dereference an attribute
3315
+ # name. For example, consider the following attribute name:
3316
+ #
3317
+ # * `Percentile`
3318
+ #
3319
+ # ^
3320
+ #
3321
+ # The name of this attribute conflicts with a reserved word, so it
3322
+ # cannot be used directly in an expression. (For the complete list of
3323
+ # reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
3324
+ # Developer Guide*). To work around this, you could specify the
3325
+ # following for *ExpressionAttributeNames*\:
3326
+ #
3327
+ # * `\{"#P":"Percentile"\}`
3328
+ #
3329
+ # ^
3330
+ #
3331
+ # You could then use this substitution in an expression, as in this
3332
+ # example:
3333
+ #
3334
+ # * `#P = :val`
3335
+ #
3336
+ # ^
3337
+ #
3338
+ # <note markdown="1"> Tokens that begin with the **\:** character are *expression attribute
3339
+ # values*, which are placeholders for the actual value at runtime.
3340
+ #
3341
+ # </note>
3342
+ #
3343
+ # For more information on expression attribute names, see [Accessing
3344
+ # Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
3345
+ #
3346
+ #
3347
+ #
3348
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
3349
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
3350
+ # @option params [Hash<String,Types::AttributeValue>] :expression_attribute_values
3351
+ # One or more values that can be substituted in an expression.
3352
+ #
3353
+ # Use the **\:** (colon) character in an expression to dereference an
3354
+ # attribute value. For example, suppose that you wanted to check whether
3355
+ # the value of the *ProductStatus* attribute was one of the following:
3356
+ #
3357
+ # `Available | Backordered | Discontinued`
3358
+ #
3359
+ # You would first need to specify *ExpressionAttributeValues* as
3360
+ # follows:
3361
+ #
3362
+ # `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
3363
+ # ":disc":\{"S":"Discontinued"\} \}`
3364
+ #
3365
+ # You could then use these values in an expression, such as this:
3366
+ #
3367
+ # `ProductStatus IN (:avail, :back, :disc)`
3368
+ #
3369
+ # For more information on expression attribute values, see [Specifying
3370
+ # Conditions][1] in the *Amazon DynamoDB Developer Guide*.
3371
+ #
3372
+ #
3373
+ #
3374
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
3375
+ # @option params [Boolean] :consistent_read
3376
+ # A Boolean value that determines the read consistency model during the
3377
+ # scan:
3378
+ #
3379
+ # * If *ConsistentRead* is `false`, then the data returned from *Scan*
3380
+ # might not contain the results from other recently completed write
3381
+ # operations (PutItem, UpdateItem or DeleteItem).
3382
+ #
3383
+ # * If *ConsistentRead* is `true`, then all of the write operations that
3384
+ # completed before the *Scan* began are guaranteed to be contained in
3385
+ # the *Scan* response.
3386
+ #
3387
+ # The default setting for *ConsistentRead* is `false`.
3388
+ #
3389
+ # The *ConsistentRead* parameter is not supported on global secondary
3390
+ # indexes. If you scan a global secondary index with *ConsistentRead*
3391
+ # set to true, you will receive a *ValidationException*.
3392
+ # @return [Types::ScanOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
3393
+ #
3394
+ # * {Types::ScanOutput#items #Items} => Array&lt;Hash&lt;String,Types::AttributeValue&gt;&gt;
3395
+ # * {Types::ScanOutput#count #Count} => Integer
3396
+ # * {Types::ScanOutput#scanned_count #ScannedCount} => Integer
3397
+ # * {Types::ScanOutput#last_evaluated_key #LastEvaluatedKey} => Hash&lt;String,Types::AttributeValue&gt;
3398
+ # * {Types::ScanOutput#consumed_capacity #ConsumedCapacity} => Types::ConsumedCapacity
3399
+ #
3400
+ # @example Request syntax with placeholder values
3401
+ # resp = client.scan({
3402
+ # table_name: "TableName", # required
3403
+ # index_name: "IndexName",
3404
+ # attributes_to_get: ["AttributeName"],
3405
+ # limit: 1,
3406
+ # select: "ALL_ATTRIBUTES", # accepts ALL_ATTRIBUTES, ALL_PROJECTED_ATTRIBUTES, SPECIFIC_ATTRIBUTES, COUNT
3407
+ # scan_filter: {
3408
+ # "AttributeName" => {
3409
+ # attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
3410
+ # comparison_operator: "EQ", # required, accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
3411
+ # },
3412
+ # },
3413
+ # conditional_operator: "AND", # accepts AND, OR
3414
+ # exclusive_start_key: {
3415
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
3416
+ # },
3417
+ # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
3418
+ # total_segments: 1,
3419
+ # segment: 1,
3420
+ # projection_expression: "ProjectionExpression",
3421
+ # filter_expression: "ConditionExpression",
3422
+ # expression_attribute_names: {
3423
+ # "ExpressionAttributeNameVariable" => "AttributeName",
3424
+ # },
3425
+ # expression_attribute_values: {
3426
+ # "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
3427
+ # },
3428
+ # consistent_read: false,
3429
+ # })
3430
+ #
3431
+ # @example Response structure
3432
+ # resp.items #=> Array
3433
+ # resp.items[0] #=> Hash
3434
+ # resp.items[0]["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
3435
+ # resp.count #=> Integer
3436
+ # resp.scanned_count #=> Integer
3437
+ # resp.last_evaluated_key #=> Hash
3438
+ # resp.last_evaluated_key["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
3439
+ # resp.consumed_capacity.table_name #=> String
3440
+ # resp.consumed_capacity.capacity_units #=> Float
3441
+ # resp.consumed_capacity.table.capacity_units #=> Float
3442
+ # resp.consumed_capacity.local_secondary_indexes #=> Hash
3443
+ # resp.consumed_capacity.local_secondary_indexes["IndexName"].capacity_units #=> Float
3444
+ # resp.consumed_capacity.global_secondary_indexes #=> Hash
3445
+ # resp.consumed_capacity.global_secondary_indexes["IndexName"].capacity_units #=> Float
3446
+ # @overload scan(params = {})
3447
+ # @param [Hash] params ({})
3448
+ def scan(params = {}, options = {})
3449
+ req = build_request(:scan, params)
3450
+ req.send_request(options)
3451
+ end
3452
+
3453
+ # Edits an existing item's attributes, or adds a new item to the table
3454
+ # if it does not already exist. You can put, delete, or add attribute
3455
+ # values. You can also perform a conditional update on an existing item
3456
+ # (insert a new attribute name-value pair if it doesn't exist, or
3457
+ # replace an existing name-value pair if it has certain expected
3458
+ # attribute values).
3459
+ #
3460
+ # You can also return the item's attribute values in the same
3461
+ # *UpdateItem* operation using the *ReturnValues* parameter.
3462
+ # @option params [required, String] :table_name
3463
+ # The name of the table containing the item to update.
3464
+ # @option params [required, Hash<String,Types::AttributeValue>] :key
3465
+ # The primary key of the item to be updated. Each element consists of an
3466
+ # attribute name and a value for that attribute.
3467
+ #
3468
+ # For the primary key, you must provide all of the attributes. For
3469
+ # example, with a simple primary key, you only need to provide a value
3470
+ # for the partition key. For a composite primary key, you must provide
3471
+ # values for both the partition key and the sort key.
3472
+ # @option params [Hash<String,Types::AttributeValueUpdate>] :attribute_updates
3473
+ # This is a legacy parameter, for backward compatibility. New
3474
+ # applications should use *UpdateExpression* instead. Do not combine
3475
+ # legacy parameters and expression parameters in a single API call;
3476
+ # otherwise, DynamoDB will return a *ValidationException* exception.
3477
+ #
3478
+ # This parameter can be used for modifying top-level attributes;
3479
+ # however, it does not support individual list or map elements.
3480
+ #
3481
+ # The names of attributes to be modified, the action to perform on each,
3482
+ # and the new value for each. If you are updating an attribute that is
3483
+ # an index key attribute for any indexes on that table, the attribute
3484
+ # type must match the index key type defined in the
3485
+ # *AttributesDefinition* of the table description. You can use
3486
+ # *UpdateItem* to update any non-key attributes.
3487
+ #
3488
+ # Attribute values cannot be null. String and Binary type attributes
3489
+ # must have lengths greater than zero. Set type attributes must not be
3490
+ # empty. Requests with empty values will be rejected with a
3491
+ # *ValidationException* exception.
3492
+ #
3493
+ # Each *AttributeUpdates* element consists of an attribute name to
3494
+ # modify, along with the following:
3495
+ #
3496
+ # * *Value* - The new value, if applicable, for this attribute.
3497
+ #
3498
+ # * *Action* - A value that specifies how to perform the update. This
3499
+ # action is only valid for an existing attribute whose data type is
3500
+ # Number or is a set; do not use `ADD` for other data types.
3501
+ #
3502
+ # If an item with the specified primary key is found in the table, the
3503
+ # following values perform the following actions:
3504
+ #
3505
+ # * `PUT` - Adds the specified attribute to the item. If the attribute
3506
+ # already exists, it is replaced by the new value.
3507
+ #
3508
+ # * `DELETE` - Removes the attribute and its value, if no value is
3509
+ # specified for `DELETE`. The data type of the specified value must
3510
+ # match the existing value's data type.
3511
+ #
3512
+ # If a set of values is specified, then those values are subtracted
3513
+ # from the old set. For example, if the attribute value was the set
3514
+ # `[a,b,c]` and the `DELETE` action specifies `[a,c]`, then the
3515
+ # final attribute value is `[b]`. Specifying an empty set is an
3516
+ # error.
3517
+ #
3518
+ # * `ADD` - Adds the specified value to the item, if the attribute
3519
+ # does not already exist. If the attribute does exist, then the
3520
+ # behavior of `ADD` depends on the data type of the attribute:
3521
+ #
3522
+ # * If the existing attribute is a number, and if *Value* is also a
3523
+ # number, then *Value* is mathematically added to the existing
3524
+ # attribute. If *Value* is a negative number, then it is
3525
+ # subtracted from the existing attribute.
3526
+ #
3527
+ # <note markdown="1"> If you use `ADD` to increment or decrement a number value for an
3528
+ # item that doesn't exist before the update, DynamoDB uses 0 as
3529
+ # the initial value.
3530
+ #
3531
+ # Similarly, if you use `ADD` for an existing item to increment or
3532
+ # decrement an attribute value that doesn't exist before the
3533
+ # update, DynamoDB uses `0` as the initial value. For example,
3534
+ # suppose that the item you want to update doesn't have an
3535
+ # attribute named *itemcount*, but you decide to `ADD` the number
3536
+ # `3` to this attribute anyway. DynamoDB will create the
3537
+ # *itemcount* attribute, set its initial value to `0`, and finally
3538
+ # add `3` to it. The result will be a new *itemcount* attribute,
3539
+ # with a value of `3`.
3540
+ #
3541
+ # </note>
3542
+ #
3543
+ # * If the existing data type is a set, and if *Value* is also a
3544
+ # set, then *Value* is appended to the existing set. For example,
3545
+ # if the attribute value is the set `[1,2]`, and the `ADD` action
3546
+ # specified `[3]`, then the final attribute value is `[1,2,3]`. An
3547
+ # error occurs if an `ADD` action is specified for a set attribute
3548
+ # and the attribute type specified does not match the existing set
3549
+ # type.
3550
+ #
3551
+ # Both sets must have the same primitive data type. For example,
3552
+ # if the existing data type is a set of strings, *Value* must also
3553
+ # be a set of strings.
3554
+ #
3555
+ # If no item with the specified key is found in the table, the
3556
+ # following values perform the following actions:
3557
+ #
3558
+ # * `PUT` - Causes DynamoDB to create a new item with the specified
3559
+ # primary key, and then adds the attribute.
3560
+ #
3561
+ # * `DELETE` - Nothing happens, because attributes cannot be deleted
3562
+ # from a nonexistent item. The operation succeeds, but DynamoDB does
3563
+ # not create a new item.
3564
+ #
3565
+ # * `ADD` - Causes DynamoDB to create an item with the supplied
3566
+ # primary key and number (or set of numbers) for the attribute
3567
+ # value. The only data types allowed are Number and Number Set.
3568
+ #
3569
+ # If you provide any attributes that are part of an index key, then the
3570
+ # data types for those attributes must match those of the schema in the
3571
+ # table's attribute definition.
3572
+ # @option params [Hash<String,Types::ExpectedAttributeValue>] :expected
3573
+ # This is a legacy parameter, for backward compatibility. New
3574
+ # applications should use <i> ConditionExpression </i> instead. Do not
3575
+ # combine legacy parameters and expression parameters in a single API
3576
+ # call; otherwise, DynamoDB will return a *ValidationException*
3577
+ # exception.
3578
+ #
3579
+ # A map of attribute/condition pairs. *Expected* provides a conditional
3580
+ # block for the *UpdateItem* operation.
3581
+ #
3582
+ # Each element of *Expected* consists of an attribute name, a comparison
3583
+ # operator, and one or more values. DynamoDB compares the attribute with
3584
+ # the value(s) you supplied, using the comparison operator. For each
3585
+ # *Expected* element, the result of the evaluation is either true or
3586
+ # false.
3587
+ #
3588
+ # If you specify more than one element in the *Expected* map, then by
3589
+ # default all of the conditions must evaluate to true. In other words,
3590
+ # the conditions are ANDed together. (You can use the
3591
+ # *ConditionalOperator* parameter to OR the conditions instead. If you
3592
+ # do this, then at least one of the conditions must evaluate to true,
3593
+ # rather than all of them.)
3594
+ #
3595
+ # If the *Expected* map evaluates to true, then the conditional
3596
+ # operation succeeds; otherwise, it fails.
3597
+ #
3598
+ # *Expected* contains the following:
3599
+ #
3600
+ # * *AttributeValueList* - One or more values to evaluate against the
3601
+ # supplied attribute. The number of values in the list depends on the
3602
+ # *ComparisonOperator* being used.
3603
+ #
3604
+ # For type Number, value comparisons are numeric.
3605
+ #
3606
+ # String value comparisons for greater than, equals, or less than are
3607
+ # based on ASCII character code values. For example, `a` is greater
3608
+ # than `A`, and `a` is greater than `B`. For a list of code values,
3609
+ # see
3610
+ # [http://en.wikipedia.org/wiki/ASCII#ASCII\_printable\_characters][1].
3611
+ #
3612
+ # For type Binary, DynamoDB treats each byte of the binary data as
3613
+ # unsigned when it compares binary values.
3614
+ #
3615
+ # * *ComparisonOperator* - A comparator for evaluating attributes in the
3616
+ # *AttributeValueList*. When performing the comparison, DynamoDB uses
3617
+ # strongly consistent reads.
3618
+ #
3619
+ # The following comparison operators are available:
3620
+ #
3621
+ # `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS |
3622
+ # NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN`
3623
+ #
3624
+ # The following are descriptions of each comparison operator.
3625
+ #
3626
+ # * `EQ`\: Equal. `EQ` is supported for all datatypes, including lists
3627
+ # and maps.
3628
+ #
3629
+ # *AttributeValueList* can contain only one *AttributeValue* element
3630
+ # of type String, Number, Binary, String Set, Number Set, or Binary
3631
+ # Set. If an item contains an *AttributeValue* element of a
3632
+ # different type than the one provided in the request, the value
3633
+ # does not match. For example, `\{"S":"6"\}` does not equal
3634
+ # `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not equal `\{"NS":["6",
3635
+ # "2", "1"]\}`.
3636
+ #
3637
+ #
3638
+ #
3639
+ # * `NE`\: Not equal. `NE` is supported for all datatypes, including
3640
+ # lists and maps.
3641
+ #
3642
+ # *AttributeValueList* can contain only one *AttributeValue* of type
3643
+ # String, Number, Binary, String Set, Number Set, or Binary Set. If
3644
+ # an item contains an *AttributeValue* of a different type than the
3645
+ # one provided in the request, the value does not match. For
3646
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
3647
+ # `\{"N":"6"\}` does not equal `\{"NS":["6", "2", "1"]\}`.
3648
+ #
3649
+ #
3650
+ #
3651
+ # * `LE`\: Less than or equal.
3652
+ #
3653
+ # *AttributeValueList* can contain only one *AttributeValue* element
3654
+ # of type String, Number, or Binary (not a set type). If an item
3655
+ # contains an *AttributeValue* element of a different type than the
3656
+ # one provided in the request, the value does not match. For
3657
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
3658
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
3659
+ #
3660
+ #
3661
+ #
3662
+ # * `LT`\: Less than.
3663
+ #
3664
+ # *AttributeValueList* can contain only one *AttributeValue* of type
3665
+ # String, Number, or Binary (not a set type). If an item contains an
3666
+ # *AttributeValue* element of a different type than the one provided
3667
+ # in the request, the value does not match. For example,
3668
+ # `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also, `\{"N":"6"\}`
3669
+ # does not compare to `\{"NS":["6", "2", "1"]\}`.
3670
+ #
3671
+ #
3672
+ #
3673
+ # * `GE`\: Greater than or equal.
3674
+ #
3675
+ # *AttributeValueList* can contain only one *AttributeValue* element
3676
+ # of type String, Number, or Binary (not a set type). If an item
3677
+ # contains an *AttributeValue* element of a different type than the
3678
+ # one provided in the request, the value does not match. For
3679
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
3680
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
3681
+ #
3682
+ #
3683
+ #
3684
+ # * `GT`\: Greater than.
3685
+ #
3686
+ # *AttributeValueList* can contain only one *AttributeValue* element
3687
+ # of type String, Number, or Binary (not a set type). If an item
3688
+ # contains an *AttributeValue* element of a different type than the
3689
+ # one provided in the request, the value does not match. For
3690
+ # example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
3691
+ # `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
3692
+ #
3693
+ #
3694
+ #
3695
+ # * `NOT_NULL`\: The attribute exists. `NOT_NULL` is supported for all
3696
+ # datatypes, including lists and maps.
3697
+ #
3698
+ # <note markdown="1"> This operator tests for the existence of an attribute, not its
3699
+ # data type. If the data type of attribute "`a`" is null, and you
3700
+ # evaluate it using `NOT_NULL`, the result is a Boolean *true*. This
3701
+ # result is because the attribute "`a`" exists; its data type is
3702
+ # not relevant to the `NOT_NULL` comparison operator.
3703
+ #
3704
+ # </note>
3705
+ #
3706
+ # * `NULL`\: The attribute does not exist. `NULL` is supported for all
3707
+ # datatypes, including lists and maps.
3708
+ #
3709
+ # <note markdown="1"> This operator tests for the nonexistence of an attribute, not its
3710
+ # data type. If the data type of attribute "`a`" is null, and you
3711
+ # evaluate it using `NULL`, the result is a Boolean *false*. This is
3712
+ # because the attribute "`a`" exists; its data type is not
3713
+ # relevant to the `NULL` comparison operator.
3714
+ #
3715
+ # </note>
3716
+ #
3717
+ # * `CONTAINS`\: Checks for a subsequence, or value in a set.
3718
+ #
3719
+ # *AttributeValueList* can contain only one *AttributeValue* element
3720
+ # of type String, Number, or Binary (not a set type). If the target
3721
+ # attribute of the comparison is of type String, then the operator
3722
+ # checks for a substring match. If the target attribute of the
3723
+ # comparison is of type Binary, then the operator looks for a
3724
+ # subsequence of the target that matches the input. If the target
3725
+ # attribute of the comparison is a set ("`SS`", "`NS`", or
3726
+ # "`BS`"), then the operator evaluates to true if it finds an
3727
+ # exact match with any member of the set.
3728
+ #
3729
+ # CONTAINS is supported for lists: When evaluating "`a CONTAINS
3730
+ # b`", "`a`" can be a list; however, "`b`" cannot be a set, a
3731
+ # map, or a list.
3732
+ #
3733
+ # * `NOT_CONTAINS`\: Checks for absence of a subsequence, or absence
3734
+ # of a value in a set.
3735
+ #
3736
+ # *AttributeValueList* can contain only one *AttributeValue* element
3737
+ # of type String, Number, or Binary (not a set type). If the target
3738
+ # attribute of the comparison is a String, then the operator checks
3739
+ # for the absence of a substring match. If the target attribute of
3740
+ # the comparison is Binary, then the operator checks for the absence
3741
+ # of a subsequence of the target that matches the input. If the
3742
+ # target attribute of the comparison is a set ("`SS`", "`NS`",
3743
+ # or "`BS`"), then the operator evaluates to true if it *does not*
3744
+ # find an exact match with any member of the set.
3745
+ #
3746
+ # NOT\_CONTAINS is supported for lists: When evaluating "`a NOT
3747
+ # CONTAINS b`", "`a`" can be a list; however, "`b`" cannot be a
3748
+ # set, a map, or a list.
3749
+ #
3750
+ # * `BEGINS_WITH`\: Checks for a prefix.
3751
+ #
3752
+ # *AttributeValueList* can contain only one *AttributeValue* of type
3753
+ # String or Binary (not a Number or a set type). The target
3754
+ # attribute of the comparison must be of type String or Binary (not
3755
+ # a Number or a set type).
3756
+ #
3757
+ #
3758
+ #
3759
+ # * `IN`\: Checks for matching elements within two sets.
3760
+ #
3761
+ # *AttributeValueList* can contain one or more *AttributeValue*
3762
+ # elements of type String, Number, or Binary (not a set type). These
3763
+ # attributes are compared against an existing set type attribute of
3764
+ # an item. If any elements of the input set are present in the item
3765
+ # attribute, the expression evaluates to true.
3766
+ #
3767
+ # * `BETWEEN`\: Greater than or equal to the first value, and less
3768
+ # than or equal to the second value.
3769
+ #
3770
+ # *AttributeValueList* must contain two *AttributeValue* elements of
3771
+ # the same type, either String, Number, or Binary (not a set type).
3772
+ # A target attribute matches if the target value is greater than, or
3773
+ # equal to, the first element and less than, or equal to, the second
3774
+ # element. If an item contains an *AttributeValue* element of a
3775
+ # different type than the one provided in the request, the value
3776
+ # does not match. For example, `\{"S":"6"\}` does not compare to
3777
+ # `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not compare to
3778
+ # `\{"NS":["6", "2", "1"]\}`
3779
+ #
3780
+ # For usage examples of *AttributeValueList* and *ComparisonOperator*,
3781
+ # see [Legacy Conditional Parameters][2] in the *Amazon DynamoDB
3782
+ # Developer Guide*.
3783
+ #
3784
+ # For backward compatibility with previous DynamoDB releases, the
3785
+ # following parameters can be used instead of *AttributeValueList* and
3786
+ # *ComparisonOperator*\:
3787
+ #
3788
+ # * *Value* - A value for DynamoDB to compare with an attribute.
3789
+ #
3790
+ # * *Exists* - A Boolean value that causes DynamoDB to evaluate the
3791
+ # value before attempting the conditional operation:
3792
+ #
3793
+ # * If *Exists* is `true`, DynamoDB will check to see if that
3794
+ # attribute value already exists in the table. If it is found, then
3795
+ # the condition evaluates to true; otherwise the condition evaluate
3796
+ # to false.
3797
+ #
3798
+ # * If *Exists* is `false`, DynamoDB assumes that the attribute value
3799
+ # does *not* exist in the table. If in fact the value does not
3800
+ # exist, then the assumption is valid and the condition evaluates to
3801
+ # true. If the value is found, despite the assumption that it does
3802
+ # not exist, the condition evaluates to false.
3803
+ #
3804
+ # Note that the default value for *Exists* is `true`.
3805
+ #
3806
+ # The *Value* and *Exists* parameters are incompatible with
3807
+ # *AttributeValueList* and *ComparisonOperator*. Note that if you use
3808
+ # both sets of parameters at once, DynamoDB will return a
3809
+ # *ValidationException* exception.
3810
+ #
3811
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
3812
+ #
3813
+ # </note>
3814
+ #
3815
+ #
3816
+ #
3817
+ # [1]: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
3818
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.html
3819
+ # @option params [String] :conditional_operator
3820
+ # This is a legacy parameter, for backward compatibility. New
3821
+ # applications should use *ConditionExpression* instead. Do not combine
3822
+ # legacy parameters and expression parameters in a single API call;
3823
+ # otherwise, DynamoDB will return a *ValidationException* exception.
3824
+ #
3825
+ # A logical operator to apply to the conditions in the *Expected* map:
3826
+ #
3827
+ # * `AND` - If all of the conditions evaluate to true, then the entire
3828
+ # map evaluates to true.
3829
+ #
3830
+ # * `OR` - If at least one of the conditions evaluate to true, then the
3831
+ # entire map evaluates to true.
3832
+ #
3833
+ # If you omit *ConditionalOperator*, then `AND` is the default.
3834
+ #
3835
+ # The operation will succeed only if the entire map evaluates to true.
3836
+ #
3837
+ # <note markdown="1"> This parameter does not support attributes of type List or Map.
3838
+ #
3839
+ # </note>
3840
+ # @option params [String] :return_values
3841
+ # Use *ReturnValues* if you want to get the item attributes as they
3842
+ # appeared either before or after they were updated. For *UpdateItem*,
3843
+ # the valid values are:
3844
+ #
3845
+ # * `NONE` - If *ReturnValues* is not specified, or if its value is
3846
+ # `NONE`, then nothing is returned. (This setting is the default for
3847
+ # *ReturnValues*.)
3848
+ #
3849
+ # * `ALL_OLD` - If *UpdateItem* overwrote an attribute name-value pair,
3850
+ # then the content of the old item is returned.
3851
+ #
3852
+ # * `UPDATED_OLD` - The old versions of only the updated attributes are
3853
+ # returned.
3854
+ #
3855
+ # * `ALL_NEW` - All of the attributes of the new version of the item are
3856
+ # returned.
3857
+ #
3858
+ # * `UPDATED_NEW` - The new versions of only the updated attributes are
3859
+ # returned.
3860
+ #
3861
+ # There is no additional cost associated with requesting a return value
3862
+ # aside from the small network and processing overhead of receiving a
3863
+ # larger response. No Read Capacity Units are consumed.
3864
+ #
3865
+ # Values returned are strongly consistent
3866
+ # @option params [String] :return_consumed_capacity
3867
+ # Determines the level of detail about provisioned throughput
3868
+ # consumption that is returned in the response:
3869
+ #
3870
+ # * *INDEXES* - The response includes the aggregate *ConsumedCapacity*
3871
+ # for the operation, together with *ConsumedCapacity* for each table
3872
+ # and secondary index that was accessed.
3873
+ #
3874
+ # Note that some operations, such as *GetItem* and *BatchGetItem*, do
3875
+ # not access any indexes at all. In these cases, specifying *INDEXES*
3876
+ # will only return *ConsumedCapacity* information for table(s).
3877
+ #
3878
+ # * *TOTAL* - The response includes only the aggregate
3879
+ # *ConsumedCapacity* for the operation.
3880
+ #
3881
+ # * *NONE* - No *ConsumedCapacity* details are included in the response.
3882
+ # @option params [String] :return_item_collection_metrics
3883
+ # Determines whether item collection metrics are returned. If set to
3884
+ # `SIZE`, the response includes statistics about item collections, if
3885
+ # any, that were modified during the operation are returned in the
3886
+ # response. If set to `NONE` (the default), no statistics are returned.
3887
+ # @option params [String] :update_expression
3888
+ # An expression that defines one or more attributes to be updated, the
3889
+ # action to be performed on them, and new value(s) for them.
3890
+ #
3891
+ # The following action values are available for *UpdateExpression*.
3892
+ #
3893
+ # * `SET` - Adds one or more attributes and values to an item. If any of
3894
+ # these attribute already exist, they are replaced by the new values.
3895
+ # You can also use `SET` to add or subtract from an attribute that is
3896
+ # of type Number. For example: `SET myNum = myNum + :val`
3897
+ #
3898
+ # `SET` supports the following functions:
3899
+ #
3900
+ # * `if_not_exists (path, operand)` - if the item does not contain an
3901
+ # attribute at the specified path, then `if_not_exists` evaluates to
3902
+ # operand; otherwise, it evaluates to path. You can use this
3903
+ # function to avoid overwriting an attribute that may already be
3904
+ # present in the item.
3905
+ #
3906
+ # * `list_append (operand, operand)` - evaluates to a list with a new
3907
+ # element added to it. You can append the new element to the start
3908
+ # or the end of the list by reversing the order of the operands.
3909
+ #
3910
+ # These function names are case-sensitive.
3911
+ #
3912
+ # * `REMOVE` - Removes one or more attributes from an item.
3913
+ #
3914
+ # * `ADD` - Adds the specified value to the item, if the attribute does
3915
+ # not already exist. If the attribute does exist, then the behavior of
3916
+ # `ADD` depends on the data type of the attribute:
3917
+ #
3918
+ # * If the existing attribute is a number, and if *Value* is also a
3919
+ # number, then *Value* is mathematically added to the existing
3920
+ # attribute. If *Value* is a negative number, then it is subtracted
3921
+ # from the existing attribute.
3922
+ #
3923
+ # <note markdown="1"> If you use `ADD` to increment or decrement a number value for an
3924
+ # item that doesn't exist before the update, DynamoDB uses `0` as
3925
+ # the initial value.
3926
+ #
3927
+ # Similarly, if you use `ADD` for an existing item to increment or
3928
+ # decrement an attribute value that doesn't exist before the
3929
+ # update, DynamoDB uses `0` as the initial value. For example,
3930
+ # suppose that the item you want to update doesn't have an
3931
+ # attribute named *itemcount*, but you decide to `ADD` the number
3932
+ # `3` to this attribute anyway. DynamoDB will create the *itemcount*
3933
+ # attribute, set its initial value to `0`, and finally add `3` to
3934
+ # it. The result will be a new *itemcount* attribute in the item,
3935
+ # with a value of `3`.
3936
+ #
3937
+ # </note>
3938
+ #
3939
+ # * If the existing data type is a set and if *Value* is also a set,
3940
+ # then *Value* is added to the existing set. For example, if the
3941
+ # attribute value is the set `[1,2]`, and the `ADD` action specified
3942
+ # `[3]`, then the final attribute value is `[1,2,3]`. An error
3943
+ # occurs if an `ADD` action is specified for a set attribute and the
3944
+ # attribute type specified does not match the existing set type.
3945
+ #
3946
+ # Both sets must have the same primitive data type. For example, if
3947
+ # the existing data type is a set of strings, the *Value* must also
3948
+ # be a set of strings.
3949
+ #
3950
+ # The `ADD` action only supports Number and set data types. In
3951
+ # addition, `ADD` can only be used on top-level attributes, not nested
3952
+ # attributes.
3953
+ #
3954
+ # * `DELETE` - Deletes an element from a set.
3955
+ #
3956
+ # If a set of values is specified, then those values are subtracted
3957
+ # from the old set. For example, if the attribute value was the set
3958
+ # `[a,b,c]` and the `DELETE` action specifies `[a,c]`, then the final
3959
+ # attribute value is `[b]`. Specifying an empty set is an error.
3960
+ #
3961
+ # The `DELETE` action only supports set data types. In addition,
3962
+ # `DELETE` can only be used on top-level attributes, not nested
3963
+ # attributes.
3964
+ #
3965
+ # You can have many actions in a single expression, such as the
3966
+ # following: `SET a=:value1, b=:value2 DELETE :value3, :value4, :value5`
3967
+ #
3968
+ # For more information on update expressions, see [Modifying Items and
3969
+ # Attributes][1] in the *Amazon DynamoDB Developer Guide*.
3970
+ #
3971
+ # <note markdown="1"> *UpdateExpression* replaces the legacy *AttributeUpdates* parameter.
3972
+ #
3973
+ # </note>
3974
+ #
3975
+ #
3976
+ #
3977
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html
3978
+ # @option params [String] :condition_expression
3979
+ # A condition that must be satisfied in order for a conditional update
3980
+ # to succeed.
3981
+ #
3982
+ # An expression can contain any of the following:
3983
+ #
3984
+ # * Functions: `attribute_exists | attribute_not_exists | attribute_type
3985
+ # | contains | begins_with | size`
3986
+ #
3987
+ # These function names are case-sensitive.
3988
+ #
3989
+ # * Comparison operators: ` = | &#x3C;&#x3E; | &#x3C; | &#x3E; | &#x3C;=
3990
+ # | &#x3E;= | BETWEEN | IN`
3991
+ #
3992
+ # * Logical operators: `AND | OR | NOT`
3993
+ #
3994
+ # For more information on condition expressions, see [Specifying
3995
+ # Conditions][1] in the *Amazon DynamoDB Developer Guide*.
3996
+ #
3997
+ # <note markdown="1"> *ConditionExpression* replaces the legacy *ConditionalOperator* and
3998
+ # *Expected* parameters.
3999
+ #
4000
+ # </note>
4001
+ #
4002
+ #
4003
+ #
4004
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
4005
+ # @option params [Hash<String,String>] :expression_attribute_names
4006
+ # One or more substitution tokens for attribute names in an expression.
4007
+ # The following are some use cases for using
4008
+ # *ExpressionAttributeNames*\:
4009
+ #
4010
+ # * To access an attribute whose name conflicts with a DynamoDB reserved
4011
+ # word.
4012
+ #
4013
+ # * To create a placeholder for repeating occurrences of an attribute
4014
+ # name in an expression.
4015
+ #
4016
+ # * To prevent special characters in an attribute name from being
4017
+ # misinterpreted in an expression.
4018
+ #
4019
+ # Use the **#** character in an expression to dereference an attribute
4020
+ # name. For example, consider the following attribute name:
4021
+ #
4022
+ # * `Percentile`
4023
+ #
4024
+ # ^
4025
+ #
4026
+ # The name of this attribute conflicts with a reserved word, so it
4027
+ # cannot be used directly in an expression. (For the complete list of
4028
+ # reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
4029
+ # Developer Guide*). To work around this, you could specify the
4030
+ # following for *ExpressionAttributeNames*\:
4031
+ #
4032
+ # * `\{"#P":"Percentile"\}`
4033
+ #
4034
+ # ^
4035
+ #
4036
+ # You could then use this substitution in an expression, as in this
4037
+ # example:
4038
+ #
4039
+ # * `#P = :val`
4040
+ #
4041
+ # ^
4042
+ #
4043
+ # <note markdown="1"> Tokens that begin with the **\:** character are *expression attribute
4044
+ # values*, which are placeholders for the actual value at runtime.
4045
+ #
4046
+ # </note>
4047
+ #
4048
+ # For more information on expression attribute names, see [Accessing
4049
+ # Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
4050
+ #
4051
+ #
4052
+ #
4053
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
4054
+ # [2]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
4055
+ # @option params [Hash<String,Types::AttributeValue>] :expression_attribute_values
4056
+ # One or more values that can be substituted in an expression.
4057
+ #
4058
+ # Use the **\:** (colon) character in an expression to dereference an
4059
+ # attribute value. For example, suppose that you wanted to check whether
4060
+ # the value of the *ProductStatus* attribute was one of the following:
4061
+ #
4062
+ # `Available | Backordered | Discontinued`
4063
+ #
4064
+ # You would first need to specify *ExpressionAttributeValues* as
4065
+ # follows:
4066
+ #
4067
+ # `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
4068
+ # ":disc":\{"S":"Discontinued"\} \}`
4069
+ #
4070
+ # You could then use these values in an expression, such as this:
4071
+ #
4072
+ # `ProductStatus IN (:avail, :back, :disc)`
4073
+ #
4074
+ # For more information on expression attribute values, see [Specifying
4075
+ # Conditions][1] in the *Amazon DynamoDB Developer Guide*.
4076
+ #
4077
+ #
4078
+ #
4079
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
4080
+ # @return [Types::UpdateItemOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
4081
+ #
4082
+ # * {Types::UpdateItemOutput#attributes #Attributes} => Hash&lt;String,Types::AttributeValue&gt;
4083
+ # * {Types::UpdateItemOutput#consumed_capacity #ConsumedCapacity} => Types::ConsumedCapacity
4084
+ # * {Types::UpdateItemOutput#item_collection_metrics #ItemCollectionMetrics} => Types::ItemCollectionMetrics
4085
+ #
4086
+ # @example Request syntax with placeholder values
4087
+ # resp = client.update_item({
4088
+ # table_name: "TableName", # required
4089
+ # key: { # required
4090
+ # "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
4091
+ # },
4092
+ # attribute_updates: {
4093
+ # "AttributeName" => {
4094
+ # value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
4095
+ # action: "ADD", # accepts ADD, PUT, DELETE
4096
+ # },
4097
+ # },
4098
+ # expected: {
4099
+ # "AttributeName" => {
4100
+ # value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
4101
+ # exists: false,
4102
+ # comparison_operator: "EQ", # accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
4103
+ # attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
4104
+ # },
4105
+ # },
4106
+ # conditional_operator: "AND", # accepts AND, OR
4107
+ # return_values: "NONE", # accepts NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW
4108
+ # return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
4109
+ # return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
4110
+ # update_expression: "UpdateExpression",
4111
+ # condition_expression: "ConditionExpression",
4112
+ # expression_attribute_names: {
4113
+ # "ExpressionAttributeNameVariable" => "AttributeName",
4114
+ # },
4115
+ # expression_attribute_values: {
4116
+ # "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
4117
+ # },
4118
+ # })
4119
+ #
4120
+ # @example Response structure
4121
+ # resp.attributes #=> Hash
4122
+ # resp.attributes["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
4123
+ # resp.consumed_capacity.table_name #=> String
4124
+ # resp.consumed_capacity.capacity_units #=> Float
4125
+ # resp.consumed_capacity.table.capacity_units #=> Float
4126
+ # resp.consumed_capacity.local_secondary_indexes #=> Hash
4127
+ # resp.consumed_capacity.local_secondary_indexes["IndexName"].capacity_units #=> Float
4128
+ # resp.consumed_capacity.global_secondary_indexes #=> Hash
4129
+ # resp.consumed_capacity.global_secondary_indexes["IndexName"].capacity_units #=> Float
4130
+ # resp.item_collection_metrics.item_collection_key #=> Hash
4131
+ # resp.item_collection_metrics.item_collection_key["AttributeName"] #=> <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
4132
+ # resp.item_collection_metrics.size_estimate_range_gb #=> Array
4133
+ # resp.item_collection_metrics.size_estimate_range_gb[0] #=> Float
4134
+ # @overload update_item(params = {})
4135
+ # @param [Hash] params ({})
4136
+ def update_item(params = {}, options = {})
4137
+ req = build_request(:update_item, params)
4138
+ req.send_request(options)
4139
+ end
4140
+
4141
+ # Modifies the provisioned throughput settings, global secondary
4142
+ # indexes, or DynamoDB Streams settings for a given table.
4143
+ #
4144
+ # You can only perform one of the following operations at once:
4145
+ #
4146
+ # * Modify the provisioned throughput settings of the table.
4147
+ #
4148
+ # * Enable or disable Streams on the table.
4149
+ #
4150
+ # * Remove a global secondary index from the table.
4151
+ #
4152
+ # * Create a new global secondary index on the table. Once the index
4153
+ # begins backfilling, you can use *UpdateTable* to perform other
4154
+ # operations.
4155
+ #
4156
+ # *UpdateTable* is an asynchronous operation; while it is executing, the
4157
+ # table status changes from `ACTIVE` to `UPDATING`. While it is
4158
+ # `UPDATING`, you cannot issue another *UpdateTable* request. When the
4159
+ # table returns to the `ACTIVE` state, the *UpdateTable* operation is
4160
+ # complete.
4161
+ # @option params [Array<Types::AttributeDefinition>] :attribute_definitions
4162
+ # An array of attributes that describe the key schema for the table and
4163
+ # indexes. If you are adding a new global secondary index to the table,
4164
+ # *AttributeDefinitions* must include the key element(s) of the new
4165
+ # index.
4166
+ # @option params [required, String] :table_name
4167
+ # The name of the table to be updated.
4168
+ # @option params [Types::ProvisionedThroughput] :provisioned_throughput
4169
+ # Represents the provisioned throughput settings for a specified table
4170
+ # or index. The settings can be modified using the *UpdateTable*
4171
+ # operation.
4172
+ #
4173
+ # For current minimum and maximum provisioned throughput values, see
4174
+ # [Limits][1] in the *Amazon DynamoDB Developer Guide*.
4175
+ #
4176
+ #
4177
+ #
4178
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
4179
+ # @option params [Array<Types::GlobalSecondaryIndexUpdate>] :global_secondary_index_updates
4180
+ # An array of one or more global secondary indexes for the table. For
4181
+ # each index in the array, you can request one action:
4182
+ #
4183
+ # * *Create* - add a new global secondary index to the table.
4184
+ #
4185
+ # * *Update* - modify the provisioned throughput settings of an existing
4186
+ # global secondary index.
4187
+ #
4188
+ # * *Delete* - remove a global secondary index from the table.
4189
+ #
4190
+ # For more information, see [Managing Global Secondary Indexes][1] in
4191
+ # the *Amazon DynamoDB Developer Guide*.
4192
+ #
4193
+ #
4194
+ #
4195
+ # [1]: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.OnlineOps.html
4196
+ # @option params [Types::StreamSpecification] :stream_specification
4197
+ # Represents the DynamoDB Streams configuration for the table.
4198
+ #
4199
+ # <note markdown="1"> You will receive a *ResourceInUseException* if you attempt to enable a
4200
+ # stream on a table that already has a stream, or if you attempt to
4201
+ # disable a stream on a table which does not have a stream.
4202
+ #
4203
+ # </note>
4204
+ # @return [Types::UpdateTableOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
4205
+ #
4206
+ # * {Types::UpdateTableOutput#table_description #TableDescription} => Types::TableDescription
4207
+ #
4208
+ # @example Request syntax with placeholder values
4209
+ # resp = client.update_table({
4210
+ # attribute_definitions: [
4211
+ # {
4212
+ # attribute_name: "KeySchemaAttributeName", # required
4213
+ # attribute_type: "S", # required, accepts S, N, B
4214
+ # },
4215
+ # ],
4216
+ # table_name: "TableName", # required
4217
+ # provisioned_throughput: {
4218
+ # read_capacity_units: 1, # required
4219
+ # write_capacity_units: 1, # required
4220
+ # },
4221
+ # global_secondary_index_updates: [
4222
+ # {
4223
+ # update: {
4224
+ # index_name: "IndexName", # required
4225
+ # provisioned_throughput: { # required
4226
+ # read_capacity_units: 1, # required
4227
+ # write_capacity_units: 1, # required
4228
+ # },
4229
+ # },
4230
+ # create: {
4231
+ # index_name: "IndexName", # required
4232
+ # key_schema: [ # required
4233
+ # {
4234
+ # attribute_name: "KeySchemaAttributeName", # required
4235
+ # key_type: "HASH", # required, accepts HASH, RANGE
4236
+ # },
4237
+ # ],
4238
+ # projection: { # required
4239
+ # projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
4240
+ # non_key_attributes: ["NonKeyAttributeName"],
4241
+ # },
4242
+ # provisioned_throughput: { # required
4243
+ # read_capacity_units: 1, # required
4244
+ # write_capacity_units: 1, # required
4245
+ # },
4246
+ # },
4247
+ # delete: {
4248
+ # index_name: "IndexName", # required
4249
+ # },
4250
+ # },
4251
+ # ],
4252
+ # stream_specification: {
4253
+ # stream_enabled: false,
4254
+ # stream_view_type: "NEW_IMAGE", # accepts NEW_IMAGE, OLD_IMAGE, NEW_AND_OLD_IMAGES, KEYS_ONLY
4255
+ # },
4256
+ # })
4257
+ #
4258
+ # @example Response structure
4259
+ # resp.table_description.attribute_definitions #=> Array
4260
+ # resp.table_description.attribute_definitions[0].attribute_name #=> String
4261
+ # resp.table_description.attribute_definitions[0].attribute_type #=> String, one of "S", "N", "B"
4262
+ # resp.table_description.table_name #=> String
4263
+ # resp.table_description.key_schema #=> Array
4264
+ # resp.table_description.key_schema[0].attribute_name #=> String
4265
+ # resp.table_description.key_schema[0].key_type #=> String, one of "HASH", "RANGE"
4266
+ # resp.table_description.table_status #=> String, one of "CREATING", "UPDATING", "DELETING", "ACTIVE"
4267
+ # resp.table_description.creation_date_time #=> Time
4268
+ # resp.table_description.provisioned_throughput.last_increase_date_time #=> Time
4269
+ # resp.table_description.provisioned_throughput.last_decrease_date_time #=> Time
4270
+ # resp.table_description.provisioned_throughput.number_of_decreases_today #=> Integer
4271
+ # resp.table_description.provisioned_throughput.read_capacity_units #=> Integer
4272
+ # resp.table_description.provisioned_throughput.write_capacity_units #=> Integer
4273
+ # resp.table_description.table_size_bytes #=> Integer
4274
+ # resp.table_description.item_count #=> Integer
4275
+ # resp.table_description.table_arn #=> String
4276
+ # resp.table_description.local_secondary_indexes #=> Array
4277
+ # resp.table_description.local_secondary_indexes[0].index_name #=> String
4278
+ # resp.table_description.local_secondary_indexes[0].key_schema #=> Array
4279
+ # resp.table_description.local_secondary_indexes[0].key_schema[0].attribute_name #=> String
4280
+ # resp.table_description.local_secondary_indexes[0].key_schema[0].key_type #=> String, one of "HASH", "RANGE"
4281
+ # resp.table_description.local_secondary_indexes[0].projection.projection_type #=> String, one of "ALL", "KEYS_ONLY", "INCLUDE"
4282
+ # resp.table_description.local_secondary_indexes[0].projection.non_key_attributes #=> Array
4283
+ # resp.table_description.local_secondary_indexes[0].projection.non_key_attributes[0] #=> String
4284
+ # resp.table_description.local_secondary_indexes[0].index_size_bytes #=> Integer
4285
+ # resp.table_description.local_secondary_indexes[0].item_count #=> Integer
4286
+ # resp.table_description.local_secondary_indexes[0].index_arn #=> String
4287
+ # resp.table_description.global_secondary_indexes #=> Array
4288
+ # resp.table_description.global_secondary_indexes[0].index_name #=> String
4289
+ # resp.table_description.global_secondary_indexes[0].key_schema #=> Array
4290
+ # resp.table_description.global_secondary_indexes[0].key_schema[0].attribute_name #=> String
4291
+ # resp.table_description.global_secondary_indexes[0].key_schema[0].key_type #=> String, one of "HASH", "RANGE"
4292
+ # resp.table_description.global_secondary_indexes[0].projection.projection_type #=> String, one of "ALL", "KEYS_ONLY", "INCLUDE"
4293
+ # resp.table_description.global_secondary_indexes[0].projection.non_key_attributes #=> Array
4294
+ # resp.table_description.global_secondary_indexes[0].projection.non_key_attributes[0] #=> String
4295
+ # resp.table_description.global_secondary_indexes[0].index_status #=> String, one of "CREATING", "UPDATING", "DELETING", "ACTIVE"
4296
+ # resp.table_description.global_secondary_indexes[0].backfilling #=> Boolean
4297
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.last_increase_date_time #=> Time
4298
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.last_decrease_date_time #=> Time
4299
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.number_of_decreases_today #=> Integer
4300
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.read_capacity_units #=> Integer
4301
+ # resp.table_description.global_secondary_indexes[0].provisioned_throughput.write_capacity_units #=> Integer
4302
+ # resp.table_description.global_secondary_indexes[0].index_size_bytes #=> Integer
4303
+ # resp.table_description.global_secondary_indexes[0].item_count #=> Integer
4304
+ # resp.table_description.global_secondary_indexes[0].index_arn #=> String
4305
+ # resp.table_description.stream_specification.stream_enabled #=> Boolean
4306
+ # resp.table_description.stream_specification.stream_view_type #=> String, one of "NEW_IMAGE", "OLD_IMAGE", "NEW_AND_OLD_IMAGES", "KEYS_ONLY"
4307
+ # resp.table_description.latest_stream_label #=> String
4308
+ # resp.table_description.latest_stream_arn #=> String
4309
+ # @overload update_table(params = {})
4310
+ # @param [Hash] params ({})
4311
+ def update_table(params = {}, options = {})
4312
+ req = build_request(:update_table, params)
4313
+ req.send_request(options)
4314
+ end
4315
+
4316
+ # @!endgroup
4317
+
4318
+ # @param params ({})
4319
+ # @api private
4320
+ def build_request(operation_name, params = {})
4321
+ handlers = @handlers.for(operation_name)
4322
+ context = Seahorse::Client::RequestContext.new(
4323
+ operation_name: operation_name,
4324
+ operation: config.api.operation(operation_name),
4325
+ client: self,
4326
+ params: params,
4327
+ config: config)
4328
+ context[:gem_name] = 'aws-sdk-dynamodb'
4329
+ context[:gem_version] = '1.0.0.rc1'
4330
+ Seahorse::Client::Request.new(handlers, context)
4331
+ end
4332
+
4333
+ # Polls an API operation until a resource enters a desired state.
4334
+ #
4335
+ # ## Basic Usage
4336
+ #
4337
+ # A waiter will call an API operation until:
4338
+ #
4339
+ # * It is successful
4340
+ # * It enters a terminal state
4341
+ # * It makes the maximum number of attempts
4342
+ #
4343
+ # In between attempts, the waiter will sleep.
4344
+ #
4345
+ # # polls in a loop, sleeping between attempts
4346
+ # client.waiter_until(waiter_name, params)
4347
+ #
4348
+ # ## Configuration
4349
+ #
4350
+ # You can configure the maximum number of polling attempts, and the
4351
+ # delay (in seconds) between each polling attempt. You can pass
4352
+ # configuration as the final arguments hash.
4353
+ #
4354
+ # # poll for ~25 seconds
4355
+ # client.wait_until(waiter_name, params, {
4356
+ # max_attempts: 5,
4357
+ # delay: 5,
4358
+ # })
4359
+ #
4360
+ # ## Callbacks
4361
+ #
4362
+ # You can be notified before each polling attempt and before each
4363
+ # delay. If you throw `:success` or `:failure` from these callbacks,
4364
+ # it will terminate the waiter.
4365
+ #
4366
+ # started_at = Time.now
4367
+ # client.wait_until(waiter_name, params, {
4368
+ #
4369
+ # # disable max attempts
4370
+ # max_attempts: nil,
4371
+ #
4372
+ # # poll for 1 hour, instead of a number of attempts
4373
+ # before_wait: -> (attempts, response) do
4374
+ # throw :failure if Time.now - started_at > 3600
4375
+ # end
4376
+ # })
4377
+ #
4378
+ # ## Handling Errors
4379
+ #
4380
+ # When a waiter is unsuccessful, it will raise an error.
4381
+ # All of the failure errors extend from
4382
+ # {Aws::Waiters::Errors::WaiterFailed}.
4383
+ #
4384
+ # begin
4385
+ # client.wait_until(...)
4386
+ # rescue Aws::Waiters::Errors::WaiterFailed
4387
+ # # resource did not enter the desired state in time
4388
+ # end
4389
+ #
4390
+ # ## Valid Waiters
4391
+ #
4392
+ # The following table lists the valid waiter names, the operations they call,
4393
+ # and the default `:delay` and `:max_attempts` values.
4394
+ #
4395
+ # | waiter_name | params | :delay | :max_attempts |
4396
+ # | ---------------- | ----------------- | -------- | ------------- |
4397
+ # | table_exists | {#describe_table} | 20 | 25 |
4398
+ # | table_not_exists | {#describe_table} | 20 | 25 |
4399
+ #
4400
+ # @raise [Errors::FailureStateError] Raised when the waiter terminates
4401
+ # because the waiter has entered a state that it will not transition
4402
+ # out of, preventing success.
4403
+ #
4404
+ # @raise [Errors::TooManyAttemptsError] Raised when the configured
4405
+ # maximum number of attempts have been made, and the waiter is not
4406
+ # yet successful.
4407
+ #
4408
+ # @raise [Errors::UnexpectedError] Raised when an error is encounted
4409
+ # while polling for a resource that is not expected.
4410
+ #
4411
+ # @raise [Errors::NoSuchWaiterError] Raised when you request to wait
4412
+ # for an unknown state.
4413
+ #
4414
+ # @return [Boolean] Returns `true` if the waiter was successful.
4415
+ # @param [Symbol] waiter_name
4416
+ # @param [Hash] params ({})
4417
+ # @param [Hash] options ({})
4418
+ # @option options [Integer] :max_attempts
4419
+ # @option options [Integer] :delay
4420
+ # @option options [Proc] :before_attempt
4421
+ # @option options [Proc] :before_wait
4422
+ def wait_until(waiter_name, params = {}, options = {})
4423
+ w = waiter(waiter_name, options)
4424
+ yield(w.waiter) if block_given? # deprecated
4425
+ w.wait(params)
4426
+ end
4427
+
4428
+ # @api private
4429
+ # @deprecated
4430
+ def waiter_names
4431
+ waiters.keys
4432
+ end
4433
+
4434
+ private
4435
+
4436
+ # @param [Symbol] waiter_name
4437
+ # @param [Hash] options ({})
4438
+ def waiter(waiter_name, options = {})
4439
+ waiter_class = waiters[waiter_name]
4440
+ if waiter_class
4441
+ waiter_class.new(options.merge(client: self))
4442
+ else
4443
+ raise Aws::Waiters::Errors::NoSuchWaiterError.new(waiter_name, waiters.keys)
4444
+ end
4445
+ end
4446
+
4447
+ def waiters
4448
+ {
4449
+ table_exists: Waiters::TableExists,
4450
+ table_not_exists: Waiters::TableNotExists
4451
+ }
4452
+ end
4453
+
4454
+ class << self
4455
+
4456
+ # @api private
4457
+ attr_reader :identifier
4458
+
4459
+ # @api private
4460
+ def errors_module
4461
+ Errors
4462
+ end
4463
+
4464
+ end
4465
+ end
4466
+ end
4467
+ end