# frozen_string_literal: true

# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE

module Aws::DynamoDB
  module Types

    # Contains details of a table archival operation.
    #
    # @!attribute [rw] archival_date_time
    #   The date and time when table archival was initiated by DynamoDB, in
    #   UNIX epoch time format.
    #   @return [Time]
    #
    # @!attribute [rw] archival_reason
    #   The reason DynamoDB archived the table. Currently, the only possible
    #   value is:
    #
    #   * `INACCESSIBLE_ENCRYPTION_CREDENTIALS` - The table was archived due
    #     to the table's KMS key being inaccessible for more than seven
    #     days. An On-Demand backup was created at the archival time.
    #
    #   ^
    #   @return [String]
    #
    # @!attribute [rw] archival_backup_arn
    #   The Amazon Resource Name (ARN) of the backup the table was archived
    #   to, when applicable in the archival reason. If you wish to restore
    #   this backup to the same table name, you will need to delete the
    #   original table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ArchivalSummary AWS API Documentation
    #
    class ArchivalSummary < Struct.new(
      :archival_date_time,
      :archival_reason,
      :archival_backup_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents an attribute for describing the key schema for the table
    # and indexes.
    #
    # @note When making an API call, you may pass AttributeDefinition
    #   data as a hash:
    #
    #       {
    #         attribute_name: "KeySchemaAttributeName", # required
    #         attribute_type: "S", # required, accepts S, N, B
    #       }
    #
    # @!attribute [rw] attribute_name
    #   A name for the attribute.
    #   @return [String]
    #
    # @!attribute [rw] attribute_type
    #   The data type for the attribute, where:
    #
    #   * `S` - the attribute is of type String
    #
    #   * `N` - the attribute is of type Number
    #
    #   * `B` - the attribute is of type Binary
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AttributeDefinition AWS API Documentation
    #
    class AttributeDefinition < Struct.new(
      :attribute_name,
      :attribute_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the data for an attribute.
    #
    # Each attribute value is described as a name-value pair. The name is
    # the data type, and the value is the data itself.
    #
    # For more information, see [Data Types][1] in the *Amazon DynamoDB
    # Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes
    #
    # @note When making an API call, you may pass AttributeValue
    #   data as a hash:
    #
    #       {
    #         s: "StringAttributeValue",
    #         n: "NumberAttributeValue",
    #         b: "data",
    #         ss: ["StringAttributeValue"],
    #         ns: ["NumberAttributeValue"],
    #         bs: ["data"],
    #         m: {
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         l: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         null: false,
    #         bool: false,
    #       }
    #
    # @!attribute [rw] s
    #   An attribute of type String. For example:
    #
    #   `"S": "Hello"`
    #   @return [String]
    #
    # @!attribute [rw] n
    #   An attribute of type Number. For example:
    #
    #   `"N": "123.45"`
    #
    #   Numbers are sent across the network to DynamoDB as strings, to
    #   maximize compatibility across languages and libraries. However,
    #   DynamoDB treats them as number type attributes for mathematical
    #   operations.
    #   @return [String]
    #
    # @!attribute [rw] b
    #   An attribute of type Binary. For example:
    #
    #   `"B": "dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk"`
    #   @return [String]
    #
    # @!attribute [rw] ss
    #   An attribute of type String Set. For example:
    #
    #   `"SS": ["Giraffe", "Hippo" ,"Zebra"]`
    #   @return [Array<String>]
    #
    # @!attribute [rw] ns
    #   An attribute of type Number Set. For example:
    #
    #   `"NS": ["42.2", "-19", "7.5", "3.14"]`
    #
    #   Numbers are sent across the network to DynamoDB as strings, to
    #   maximize compatibility across languages and libraries. However,
    #   DynamoDB treats them as number type attributes for mathematical
    #   operations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] bs
    #   An attribute of type Binary Set. For example:
    #
    #   `"BS": ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]`
    #   @return [Array<String>]
    #
    # @!attribute [rw] m
    #   An attribute of type Map. For example:
    #
    #   `"M": \{"Name": \{"S": "Joe"\}, "Age": \{"N": "35"\}\}`
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] l
    #   An attribute of type List. For example:
    #
    #   `"L": [ \{"S": "Cookies"\} , \{"S": "Coffee"\}, \{"N": "3.14159"\}]`
    #   @return [Array<Types::AttributeValue>]
    #
    # @!attribute [rw] null
    #   An attribute of type Null. For example:
    #
    #   `"NULL": true`
    #   @return [Boolean]
    #
    # @!attribute [rw] bool
    #   An attribute of type Boolean. For example:
    #
    #   `"BOOL": true`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AttributeValue AWS API Documentation
    #
    class AttributeValue < Struct.new(
      :s,
      :n,
      :b,
      :ss,
      :ns,
      :bs,
      :m,
      :l,
      :null,
      :bool)
      SENSITIVE = []
      include Aws::Structure
    end

    # For the `UpdateItem` operation, represents the attributes to be
    # modified, the action to perform on each, and the new value for each.
    #
    # <note markdown="1"> You cannot use `UpdateItem` to update any primary key attributes.
    # Instead, you will need to delete the item, and then use `PutItem` to
    # create a new item with new attributes.
    #
    #  </note>
    #
    # Attribute values cannot be null; string and binary type attributes
    # must have lengths greater than zero; and set type attributes must not
    # be empty. Requests with empty values will be rejected with a
    # `ValidationException` exception.
    #
    # @note When making an API call, you may pass AttributeValueUpdate
    #   data as a hash:
    #
    #       {
    #         value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         action: "ADD", # accepts ADD, PUT, DELETE
    #       }
    #
    # @!attribute [rw] value
    #   Represents the data for an attribute.
    #
    #   Each attribute value is described as a name-value pair. The name is
    #   the data type, and the value is the data itself.
    #
    #   For more information, see [Data Types][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] action
    #   Specifies how to perform the update. Valid values are `PUT`
    #   (default), `DELETE`, and `ADD`. The behavior depends on whether the
    #   specified primary key already exists in the table.
    #
    #   **If an item with the specified *Key* is found in the table:**
    #
    #   * `PUT` - Adds the specified attribute to the item. If the attribute
    #     already exists, it is replaced by the new value.
    #
    #   * `DELETE` - If no value is specified, the attribute and its value
    #     are removed from the item. The data type of the specified value
    #     must match the existing value's data type.
    #
    #     If a *set* of values is specified, then those values are
    #     subtracted from the old set. For example, if the attribute value
    #     was the set `[a,b,c]` and the `DELETE` action specified `[a,c]`,
    #     then the final attribute value would be `[b]`. Specifying an empty
    #     set is an error.
    #
    #   * `ADD` - If the attribute does not already exist, then the
    #     attribute and its values are added to the item. If the attribute
    #     does exist, then the behavior of `ADD` depends on the data type of
    #     the attribute:
    #
    #     * If the existing attribute is a number, and if `Value` is also a
    #       number, then the `Value` is mathematically added to the existing
    #       attribute. If `Value` is a negative number, then it is
    #       subtracted from the existing attribute.
    #
    #       <note markdown="1"> If you use `ADD` to increment or decrement a number value for an
    #       item that doesn't exist before the update, DynamoDB uses 0 as
    #       the initial value.
    #
    #        In addition, if you use `ADD` to update an existing item, and
    #       intend to increment or decrement an attribute value which does
    #       not yet exist, DynamoDB uses `0` as the initial value. For
    #       example, suppose that the item you want to update does not yet
    #       have an attribute named *itemcount*, but you decide to `ADD` the
    #       number `3` to this attribute anyway, even though it currently
    #       does not exist. DynamoDB will create the *itemcount* attribute,
    #       set its initial value to `0`, and finally add `3` to it. The
    #       result will be a new *itemcount* attribute in the item, with a
    #       value of `3`.
    #
    #        </note>
    #
    #     * If the existing data type is a set, and if the `Value` is also a
    #       set, then the `Value` is added to the existing set. (This is a
    #       *set* operation, not mathematical addition.) For example, if the
    #       attribute value was the set `[1,2]`, and the `ADD` action
    #       specified `[3]`, then the final attribute value would be
    #       `[1,2,3]`. An error occurs if an Add action is specified for a
    #       set attribute and the attribute type specified does not match
    #       the existing set type.
    #
    #       Both sets must have the same primitive data type. For example,
    #       if the existing data type is a set of strings, the `Value` must
    #       also be a set of strings. The same holds true for number sets
    #       and binary sets.
    #
    #     This action is only valid for an existing attribute whose data
    #     type is number or is a set. Do not use `ADD` for any other data
    #     types.
    #
    #   **If no item with the specified *Key* is found:**
    #
    #   * `PUT` - DynamoDB creates a new item with the specified primary
    #     key, and then adds the attribute.
    #
    #   * `DELETE` - Nothing happens; there is no attribute to delete.
    #
    #   * `ADD` - DynamoDB creates a new item with the supplied primary key
    #     and number (or set) for the attribute value. The only data types
    #     allowed are number, number set, string set or binary set.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AttributeValueUpdate AWS API Documentation
    #
    class AttributeValueUpdate < Struct.new(
      :value,
      :action)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of the scaling policy.
    #
    # @!attribute [rw] policy_name
    #   The name of the scaling policy.
    #   @return [String]
    #
    # @!attribute [rw] target_tracking_scaling_policy_configuration
    #   Represents a target tracking scaling policy configuration.
    #   @return [Types::AutoScalingTargetTrackingScalingPolicyConfigurationDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AutoScalingPolicyDescription AWS API Documentation
    #
    class AutoScalingPolicyDescription < Struct.new(
      :policy_name,
      :target_tracking_scaling_policy_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling policy to be modified.
    #
    # @note When making an API call, you may pass AutoScalingPolicyUpdate
    #   data as a hash:
    #
    #       {
    #         policy_name: "AutoScalingPolicyName",
    #         target_tracking_scaling_policy_configuration: { # required
    #           disable_scale_in: false,
    #           scale_in_cooldown: 1,
    #           scale_out_cooldown: 1,
    #           target_value: 1.0, # required
    #         },
    #       }
    #
    # @!attribute [rw] policy_name
    #   The name of the scaling policy.
    #   @return [String]
    #
    # @!attribute [rw] target_tracking_scaling_policy_configuration
    #   Represents a target tracking scaling policy configuration.
    #   @return [Types::AutoScalingTargetTrackingScalingPolicyConfigurationUpdate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AutoScalingPolicyUpdate AWS API Documentation
    #
    class AutoScalingPolicyUpdate < Struct.new(
      :policy_name,
      :target_tracking_scaling_policy_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling settings for a global table or global
    # secondary index.
    #
    # @!attribute [rw] minimum_units
    #   The minimum capacity units that a global table or global secondary
    #   index should be scaled down to.
    #   @return [Integer]
    #
    # @!attribute [rw] maximum_units
    #   The maximum capacity units that a global table or global secondary
    #   index should be scaled up to.
    #   @return [Integer]
    #
    # @!attribute [rw] auto_scaling_disabled
    #   Disabled auto scaling for this global table or global secondary
    #   index.
    #   @return [Boolean]
    #
    # @!attribute [rw] auto_scaling_role_arn
    #   Role ARN used for configuring the auto scaling policy.
    #   @return [String]
    #
    # @!attribute [rw] scaling_policies
    #   Information about the scaling policies.
    #   @return [Array<Types::AutoScalingPolicyDescription>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AutoScalingSettingsDescription AWS API Documentation
    #
    class AutoScalingSettingsDescription < Struct.new(
      :minimum_units,
      :maximum_units,
      :auto_scaling_disabled,
      :auto_scaling_role_arn,
      :scaling_policies)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling settings to be modified for a global table
    # or global secondary index.
    #
    # @note When making an API call, you may pass AutoScalingSettingsUpdate
    #   data as a hash:
    #
    #       {
    #         minimum_units: 1,
    #         maximum_units: 1,
    #         auto_scaling_disabled: false,
    #         auto_scaling_role_arn: "AutoScalingRoleArn",
    #         scaling_policy_update: {
    #           policy_name: "AutoScalingPolicyName",
    #           target_tracking_scaling_policy_configuration: { # required
    #             disable_scale_in: false,
    #             scale_in_cooldown: 1,
    #             scale_out_cooldown: 1,
    #             target_value: 1.0, # required
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] minimum_units
    #   The minimum capacity units that a global table or global secondary
    #   index should be scaled down to.
    #   @return [Integer]
    #
    # @!attribute [rw] maximum_units
    #   The maximum capacity units that a global table or global secondary
    #   index should be scaled up to.
    #   @return [Integer]
    #
    # @!attribute [rw] auto_scaling_disabled
    #   Disabled auto scaling for this global table or global secondary
    #   index.
    #   @return [Boolean]
    #
    # @!attribute [rw] auto_scaling_role_arn
    #   Role ARN used for configuring auto scaling policy.
    #   @return [String]
    #
    # @!attribute [rw] scaling_policy_update
    #   The scaling policy to apply for scaling target global table or
    #   global secondary index capacity units.
    #   @return [Types::AutoScalingPolicyUpdate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AutoScalingSettingsUpdate AWS API Documentation
    #
    class AutoScalingSettingsUpdate < Struct.new(
      :minimum_units,
      :maximum_units,
      :auto_scaling_disabled,
      :auto_scaling_role_arn,
      :scaling_policy_update)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a target tracking scaling policy.
    #
    # @!attribute [rw] disable_scale_in
    #   Indicates whether scale in by the target tracking policy is
    #   disabled. If the value is true, scale in is disabled and the target
    #   tracking policy won't remove capacity from the scalable resource.
    #   Otherwise, scale in is enabled and the target tracking policy can
    #   remove capacity from the scalable resource. The default value is
    #   false.
    #   @return [Boolean]
    #
    # @!attribute [rw] scale_in_cooldown
    #   The amount of time, in seconds, after a scale in activity completes
    #   before another scale in activity can start. The cooldown period is
    #   used to block subsequent scale in requests until it has expired. You
    #   should scale in conservatively to protect your application's
    #   availability. However, if another alarm triggers a scale out policy
    #   during the cooldown period after a scale-in, application auto
    #   scaling scales out your scalable target immediately.
    #   @return [Integer]
    #
    # @!attribute [rw] scale_out_cooldown
    #   The amount of time, in seconds, after a scale out activity completes
    #   before another scale out activity can start. While the cooldown
    #   period is in effect, the capacity that has been added by the
    #   previous scale out event that initiated the cooldown is calculated
    #   as part of the desired capacity for the next scale out. You should
    #   continuously (but not excessively) scale out.
    #   @return [Integer]
    #
    # @!attribute [rw] target_value
    #   The target value for the metric. The range is 8.515920e-109 to
    #   1.174271e+108 (Base 10) or 2e-360 to 2e360 (Base 2).
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AutoScalingTargetTrackingScalingPolicyConfigurationDescription AWS API Documentation
    #
    class AutoScalingTargetTrackingScalingPolicyConfigurationDescription < Struct.new(
      :disable_scale_in,
      :scale_in_cooldown,
      :scale_out_cooldown,
      :target_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the settings of a target tracking scaling policy that will
    # be modified.
    #
    # @note When making an API call, you may pass AutoScalingTargetTrackingScalingPolicyConfigurationUpdate
    #   data as a hash:
    #
    #       {
    #         disable_scale_in: false,
    #         scale_in_cooldown: 1,
    #         scale_out_cooldown: 1,
    #         target_value: 1.0, # required
    #       }
    #
    # @!attribute [rw] disable_scale_in
    #   Indicates whether scale in by the target tracking policy is
    #   disabled. If the value is true, scale in is disabled and the target
    #   tracking policy won't remove capacity from the scalable resource.
    #   Otherwise, scale in is enabled and the target tracking policy can
    #   remove capacity from the scalable resource. The default value is
    #   false.
    #   @return [Boolean]
    #
    # @!attribute [rw] scale_in_cooldown
    #   The amount of time, in seconds, after a scale in activity completes
    #   before another scale in activity can start. The cooldown period is
    #   used to block subsequent scale in requests until it has expired. You
    #   should scale in conservatively to protect your application's
    #   availability. However, if another alarm triggers a scale out policy
    #   during the cooldown period after a scale-in, application auto
    #   scaling scales out your scalable target immediately.
    #   @return [Integer]
    #
    # @!attribute [rw] scale_out_cooldown
    #   The amount of time, in seconds, after a scale out activity completes
    #   before another scale out activity can start. While the cooldown
    #   period is in effect, the capacity that has been added by the
    #   previous scale out event that initiated the cooldown is calculated
    #   as part of the desired capacity for the next scale out. You should
    #   continuously (but not excessively) scale out.
    #   @return [Integer]
    #
    # @!attribute [rw] target_value
    #   The target value for the metric. The range is 8.515920e-109 to
    #   1.174271e+108 (Base 10) or 2e-360 to 2e360 (Base 2).
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/AutoScalingTargetTrackingScalingPolicyConfigurationUpdate AWS API Documentation
    #
    class AutoScalingTargetTrackingScalingPolicyConfigurationUpdate < Struct.new(
      :disable_scale_in,
      :scale_in_cooldown,
      :scale_out_cooldown,
      :target_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the description of the backup created for the table.
    #
    # @!attribute [rw] backup_details
    #   Contains the details of the backup created for the table.
    #   @return [Types::BackupDetails]
    #
    # @!attribute [rw] source_table_details
    #   Contains the details of the table when the backup was created.
    #   @return [Types::SourceTableDetails]
    #
    # @!attribute [rw] source_table_feature_details
    #   Contains the details of the features enabled on the table when the
    #   backup was created. For example, LSIs, GSIs, streams, TTL.
    #   @return [Types::SourceTableFeatureDetails]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BackupDescription AWS API Documentation
    #
    class BackupDescription < Struct.new(
      :backup_details,
      :source_table_details,
      :source_table_feature_details)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the details of the backup created for the table.
    #
    # @!attribute [rw] backup_arn
    #   ARN associated with the backup.
    #   @return [String]
    #
    # @!attribute [rw] backup_name
    #   Name of the requested backup.
    #   @return [String]
    #
    # @!attribute [rw] backup_size_bytes
    #   Size of the backup in bytes. DynamoDB updates this value
    #   approximately every six hours. Recent changes might not be reflected
    #   in this value.
    #   @return [Integer]
    #
    # @!attribute [rw] backup_status
    #   Backup can be in one of the following states: CREATING, ACTIVE,
    #   DELETED.
    #   @return [String]
    #
    # @!attribute [rw] backup_type
    #   BackupType:
    #
    #   * `USER` - You create and manage these using the on-demand backup
    #     feature.
    #
    #   * `SYSTEM` - If you delete a table with point-in-time recovery
    #     enabled, a `SYSTEM` backup is automatically created and is
    #     retained for 35 days (at no additional cost). System backups allow
    #     you to restore the deleted table to the state it was in just
    #     before the point of deletion.
    #
    #   * `AWS_BACKUP` - On-demand backup created by you from Backup
    #     service.
    #   @return [String]
    #
    # @!attribute [rw] backup_creation_date_time
    #   Time at which the backup was created. This is the request time of
    #   the backup.
    #   @return [Time]
    #
    # @!attribute [rw] backup_expiry_date_time
    #   Time at which the automatic on-demand backup created by DynamoDB
    #   will expire. This `SYSTEM` on-demand backup expires automatically 35
    #   days after its creation.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BackupDetails AWS API Documentation
    #
    class BackupDetails < Struct.new(
      :backup_arn,
      :backup_name,
      :backup_size_bytes,
      :backup_status,
      :backup_type,
      :backup_creation_date_time,
      :backup_expiry_date_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # There is another ongoing conflicting backup control plane operation on
    # the table. The backup is either being created, deleted or restored to
    # a table.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BackupInUseException AWS API Documentation
    #
    class BackupInUseException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Backup not found for the given BackupARN.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BackupNotFoundException AWS API Documentation
    #
    class BackupNotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains details for the backup.
    #
    # @!attribute [rw] table_name
    #   Name of the table.
    #   @return [String]
    #
    # @!attribute [rw] table_id
    #   Unique identifier for the table.
    #   @return [String]
    #
    # @!attribute [rw] table_arn
    #   ARN associated with the table.
    #   @return [String]
    #
    # @!attribute [rw] backup_arn
    #   ARN associated with the backup.
    #   @return [String]
    #
    # @!attribute [rw] backup_name
    #   Name of the specified backup.
    #   @return [String]
    #
    # @!attribute [rw] backup_creation_date_time
    #   Time at which the backup was created.
    #   @return [Time]
    #
    # @!attribute [rw] backup_expiry_date_time
    #   Time at which the automatic on-demand backup created by DynamoDB
    #   will expire. This `SYSTEM` on-demand backup expires automatically 35
    #   days after its creation.
    #   @return [Time]
    #
    # @!attribute [rw] backup_status
    #   Backup can be in one of the following states: CREATING, ACTIVE,
    #   DELETED.
    #   @return [String]
    #
    # @!attribute [rw] backup_type
    #   BackupType:
    #
    #   * `USER` - You create and manage these using the on-demand backup
    #     feature.
    #
    #   * `SYSTEM` - If you delete a table with point-in-time recovery
    #     enabled, a `SYSTEM` backup is automatically created and is
    #     retained for 35 days (at no additional cost). System backups allow
    #     you to restore the deleted table to the state it was in just
    #     before the point of deletion.
    #
    #   * `AWS_BACKUP` - On-demand backup created by you from Backup
    #     service.
    #   @return [String]
    #
    # @!attribute [rw] backup_size_bytes
    #   Size of the backup in bytes.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BackupSummary AWS API Documentation
    #
    class BackupSummary < Struct.new(
      :table_name,
      :table_id,
      :table_arn,
      :backup_arn,
      :backup_name,
      :backup_creation_date_time,
      :backup_expiry_date_time,
      :backup_status,
      :backup_type,
      :backup_size_bytes)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass BatchExecuteStatementInput
    #   data as a hash:
    #
    #       {
    #         statements: [ # required
    #           {
    #             statement: "PartiQLStatement", # required
    #             parameters: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #             consistent_read: false,
    #           },
    #         ],
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #       }
    #
    # @!attribute [rw] statements
    #   The list of PartiQL statements representing the batch to run.
    #   @return [Array<Types::BatchStatementRequest>]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchExecuteStatementInput AWS API Documentation
    #
    class BatchExecuteStatementInput < Struct.new(
      :statements,
      :return_consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] responses
    #   The response to each PartiQL statement in the batch.
    #   @return [Array<Types::BatchStatementResponse>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the entire operation. The values of
    #   the list are ordered according to the ordering of the statements.
    #   @return [Array<Types::ConsumedCapacity>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchExecuteStatementOutput AWS API Documentation
    #
    class BatchExecuteStatementOutput < Struct.new(
      :responses,
      :consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `BatchGetItem` operation.
    #
    # @note When making an API call, you may pass BatchGetItemInput
    #   data as a hash:
    #
    #       {
    #         request_items: { # required
    #           "TableName" => {
    #             keys: [ # required
    #               {
    #                 "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #             ],
    #             attributes_to_get: ["AttributeName"],
    #             consistent_read: false,
    #             projection_expression: "ProjectionExpression",
    #             expression_attribute_names: {
    #               "ExpressionAttributeNameVariable" => "AttributeName",
    #             },
    #           },
    #         },
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #       }
    #
    # @!attribute [rw] request_items
    #   A map of one or more table names and, for each table, a map that
    #   describes one or more items to retrieve from that table. Each table
    #   name can be used only once per `BatchGetItem` request.
    #
    #   Each element in the map of items to retrieve consists of the
    #   following:
    #
    #   * `ConsistentRead` - If `true`, a strongly consistent read is used;
    #     if `false` (the default), an eventually consistent read is used.
    #
    #   * `ExpressionAttributeNames` - One or more substitution tokens for
    #     attribute names in the `ProjectionExpression` parameter. The
    #     following are some use cases for using
    #     `ExpressionAttributeNames`\:
    #
    #     * To access an attribute whose name conflicts with a DynamoDB
    #       reserved word.
    #
    #     * To create a placeholder for repeating occurrences of an
    #       attribute name in an expression.
    #
    #     * To prevent special characters in an attribute name from being
    #       misinterpreted in an expression.
    #
    #     Use the **#** character in an expression to dereference an
    #     attribute name. For example, consider the following attribute
    #     name:
    #
    #     * `Percentile`
    #
    #     ^
    #
    #     The name of this attribute conflicts with a reserved word, so it
    #     cannot be used directly in an expression. (For the complete list
    #     of reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
    #     Developer Guide*). To work around this, you could specify the
    #     following for `ExpressionAttributeNames`\:
    #
    #     * `\{"#P":"Percentile"\}`
    #
    #     ^
    #
    #     You could then use this substitution in an expression, as in this
    #     example:
    #
    #     * `#P = :val`
    #
    #     ^
    #
    #     <note markdown="1"> Tokens that begin with the **\:** character are *expression
    #     attribute values*, which are placeholders for the actual value at
    #     runtime.
    #
    #      </note>
    #
    #     For more information about expression attribute names, see
    #     [Accessing Item Attributes][2] in the *Amazon DynamoDB Developer
    #     Guide*.
    #
    #   * `Keys` - An array of primary key attribute values that define
    #     specific items in the table. For each primary key, you must
    #     provide *all* of the key attributes. For example, with a simple
    #     primary key, you only need to provide the partition key value. For
    #     a composite key, you must provide *both* the partition key value
    #     and the sort key value.
    #
    #   * `ProjectionExpression` - A string that identifies one or more
    #     attributes to retrieve from the table. These attributes can
    #     include scalars, sets, or elements of a JSON document. The
    #     attributes in the expression must be separated by commas.
    #
    #     If no attribute names are specified, then all attributes are
    #     returned. If any of the requested attributes are not found, they
    #     do not appear in the result.
    #
    #     For more information, see [Accessing Item Attributes][2] in the
    #     *Amazon DynamoDB Developer Guide*.
    #
    #   * `AttributesToGet` - This is a legacy parameter. Use
    #     `ProjectionExpression` instead. For more information, see
    #     [AttributesToGet][3] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   [3]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.AttributesToGet.html
    #   @return [Hash<String,Types::KeysAndAttributes>]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchGetItemInput AWS API Documentation
    #
    class BatchGetItemInput < Struct.new(
      :request_items,
      :return_consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `BatchGetItem` operation.
    #
    # @!attribute [rw] responses
    #   A map of table name to a list of items. Each object in `Responses`
    #   consists of a table name, along with a map of attribute data
    #   consisting of the data type and attribute value.
    #   @return [Hash<String,Array<Hash<String,Types::AttributeValue>>>]
    #
    # @!attribute [rw] unprocessed_keys
    #   A map of tables and their respective keys that were not processed
    #   with the current response. The `UnprocessedKeys` value is in the
    #   same form as `RequestItems`, so the value can be provided directly
    #   to a subsequent `BatchGetItem` operation. For more information, see
    #   `RequestItems` in the Request Parameters section.
    #
    #   Each element consists of:
    #
    #   * `Keys` - An array of primary key attribute values that define
    #     specific items in the table.
    #
    #   * `ProjectionExpression` - One or more attributes to be retrieved
    #     from the table or index. By default, all attributes are returned.
    #     If a requested attribute is not found, it does not appear in the
    #     result.
    #
    #   * `ConsistentRead` - The consistency of a read operation. If set to
    #     `true`, then a strongly consistent read is used; otherwise, an
    #     eventually consistent read is used.
    #
    #   If there are no unprocessed keys remaining, the response contains an
    #   empty `UnprocessedKeys` map.
    #   @return [Hash<String,Types::KeysAndAttributes>]
    #
    # @!attribute [rw] consumed_capacity
    #   The read capacity units consumed by the entire `BatchGetItem`
    #   operation.
    #
    #   Each element consists of:
    #
    #   * `TableName` - The table that consumed the provisioned throughput.
    #
    #   * `CapacityUnits` - The total number of capacity units consumed.
    #   @return [Array<Types::ConsumedCapacity>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchGetItemOutput AWS API Documentation
    #
    class BatchGetItemOutput < Struct.new(
      :responses,
      :unprocessed_keys,
      :consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # An error associated with a statement in a PartiQL batch that was run.
    #
    # @!attribute [rw] code
    #   The error code associated with the failed PartiQL batch statement.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message associated with the PartiQL batch resposne.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchStatementError AWS API Documentation
    #
    class BatchStatementError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # A PartiQL batch statement request.
    #
    # @note When making an API call, you may pass BatchStatementRequest
    #   data as a hash:
    #
    #       {
    #         statement: "PartiQLStatement", # required
    #         parameters: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         consistent_read: false,
    #       }
    #
    # @!attribute [rw] statement
    #   A valid PartiQL statement.
    #   @return [String]
    #
    # @!attribute [rw] parameters
    #   The parameters associated with a PartiQL statement in the batch
    #   request.
    #   @return [Array<Types::AttributeValue>]
    #
    # @!attribute [rw] consistent_read
    #   The read consistency of the PartiQL batch request.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchStatementRequest AWS API Documentation
    #
    class BatchStatementRequest < Struct.new(
      :statement,
      :parameters,
      :consistent_read)
      SENSITIVE = []
      include Aws::Structure
    end

    # A PartiQL batch statement response..
    #
    # @!attribute [rw] error
    #   The error associated with a failed PartiQL batch statement.
    #   @return [Types::BatchStatementError]
    #
    # @!attribute [rw] table_name
    #   The table name associated with a failed PartiQL batch statement.
    #   @return [String]
    #
    # @!attribute [rw] item
    #   A DynamoDB item associated with a BatchStatementResponse
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchStatementResponse AWS API Documentation
    #
    class BatchStatementResponse < Struct.new(
      :error,
      :table_name,
      :item)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `BatchWriteItem` operation.
    #
    # @note When making an API call, you may pass BatchWriteItemInput
    #   data as a hash:
    #
    #       {
    #         request_items: { # required
    #           "TableName" => [
    #             {
    #               put_request: {
    #                 item: { # required
    #                   "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #                 },
    #               },
    #               delete_request: {
    #                 key: { # required
    #                   "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #                 },
    #               },
    #             },
    #           ],
    #         },
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
    #       }
    #
    # @!attribute [rw] request_items
    #   A map of one or more table names and, for each table, a list of
    #   operations to be performed (`DeleteRequest` or `PutRequest`). Each
    #   element in the map consists of the following:
    #
    #   * `DeleteRequest` - Perform a `DeleteItem` operation on the
    #     specified item. The item to be deleted is identified by a `Key`
    #     subelement:
    #
    #     * `Key` - A map of primary key attribute values that uniquely
    #       identify the item. Each entry in this map consists of an
    #       attribute name and an attribute value. For each primary key, you
    #       must provide *all* of the key attributes. For example, with a
    #       simple primary key, you only need to provide a value for the
    #       partition key. For a composite primary key, you must provide
    #       values for *both* the partition key and the sort key.
    #
    #     ^
    #
    #   * `PutRequest` - Perform a `PutItem` operation on the specified
    #     item. The item to be put is identified by an `Item` subelement:
    #
    #     * `Item` - A map of attributes and their values. Each entry in
    #       this map consists of an attribute name and an attribute value.
    #       Attribute values must not be null; string and binary type
    #       attributes must have lengths greater than zero; and set type
    #       attributes must not be empty. Requests that contain empty values
    #       are rejected with a `ValidationException` exception.
    #
    #       If you specify any attributes that are part of an index key,
    #       then the data types for those attributes must match those of the
    #       schema in the table's attribute definition.
    #   @return [Hash<String,Array<Types::WriteRequest>>]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] return_item_collection_metrics
    #   Determines whether item collection metrics are returned. If set to
    #   `SIZE`, the response includes statistics about item collections, if
    #   any, that were modified during the operation are returned in the
    #   response. If set to `NONE` (the default), no statistics are
    #   returned.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchWriteItemInput AWS API Documentation
    #
    class BatchWriteItemInput < Struct.new(
      :request_items,
      :return_consumed_capacity,
      :return_item_collection_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `BatchWriteItem` operation.
    #
    # @!attribute [rw] unprocessed_items
    #   A map of tables and requests against those tables that were not
    #   processed. The `UnprocessedItems` value is in the same form as
    #   `RequestItems`, so you can provide this value directly to a
    #   subsequent `BatchGetItem` operation. For more information, see
    #   `RequestItems` in the Request Parameters section.
    #
    #   Each `UnprocessedItems` entry consists of a table name and, for that
    #   table, a list of operations to perform (`DeleteRequest` or
    #   `PutRequest`).
    #
    #   * `DeleteRequest` - Perform a `DeleteItem` operation on the
    #     specified item. The item to be deleted is identified by a `Key`
    #     subelement:
    #
    #     * `Key` - A map of primary key attribute values that uniquely
    #       identify the item. Each entry in this map consists of an
    #       attribute name and an attribute value.
    #
    #     ^
    #
    #   * `PutRequest` - Perform a `PutItem` operation on the specified
    #     item. The item to be put is identified by an `Item` subelement:
    #
    #     * `Item` - A map of attributes and their values. Each entry in
    #       this map consists of an attribute name and an attribute value.
    #       Attribute values must not be null; string and binary type
    #       attributes must have lengths greater than zero; and set type
    #       attributes must not be empty. Requests that contain empty values
    #       will be rejected with a `ValidationException` exception.
    #
    #       If you specify any attributes that are part of an index key,
    #       then the data types for those attributes must match those of the
    #       schema in the table's attribute definition.
    #
    #   If there are no unprocessed items remaining, the response contains
    #   an empty `UnprocessedItems` map.
    #   @return [Hash<String,Array<Types::WriteRequest>>]
    #
    # @!attribute [rw] item_collection_metrics
    #   A list of tables that were processed by `BatchWriteItem` and, for
    #   each table, information about any item collections that were
    #   affected by individual `DeleteItem` or `PutItem` operations.
    #
    #   Each entry consists of the following subelements:
    #
    #   * `ItemCollectionKey` - The partition key value of the item
    #     collection. This is the same as the partition key value of the
    #     item.
    #
    #   * `SizeEstimateRangeGB` - An estimate of item collection size,
    #     expressed in GB. This is a two-element array containing a lower
    #     bound and an upper bound for the estimate. The estimate includes
    #     the size of all the items in the table, plus the size of all
    #     attributes projected into all of the local secondary indexes on
    #     the table. Use this estimate to measure whether a local secondary
    #     index is approaching its size limit.
    #
    #     The estimate is subject to change over time; therefore, do not
    #     rely on the precision or accuracy of the estimate.
    #   @return [Hash<String,Array<Types::ItemCollectionMetrics>>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the entire `BatchWriteItem`
    #   operation.
    #
    #   Each element consists of:
    #
    #   * `TableName` - The table that consumed the provisioned throughput.
    #
    #   * `CapacityUnits` - The total number of capacity units consumed.
    #   @return [Array<Types::ConsumedCapacity>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchWriteItemOutput AWS API Documentation
    #
    class BatchWriteItemOutput < Struct.new(
      :unprocessed_items,
      :item_collection_metrics,
      :consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the details for the read/write capacity mode.
    #
    # @!attribute [rw] billing_mode
    #   Controls how you are charged for read and write throughput and how
    #   you manage capacity. This setting can be changed later.
    #
    #   * `PROVISIONED` - Sets the read/write capacity mode to
    #     `PROVISIONED`. We recommend using `PROVISIONED` for predictable
    #     workloads.
    #
    #   * `PAY_PER_REQUEST` - Sets the read/write capacity mode to
    #     `PAY_PER_REQUEST`. We recommend using `PAY_PER_REQUEST` for
    #     unpredictable workloads.
    #   @return [String]
    #
    # @!attribute [rw] last_update_to_pay_per_request_date_time
    #   Represents the time when `PAY_PER_REQUEST` was last set as the
    #   read/write capacity mode.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BillingModeSummary AWS API Documentation
    #
    class BillingModeSummary < Struct.new(
      :billing_mode,
      :last_update_to_pay_per_request_date_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # An ordered list of errors for each item in the request which caused
    # the transaction to get cancelled. The values of the list are ordered
    # according to the ordering of the `TransactWriteItems` request
    # parameter. If no error occurred for the associated item an error with
    # a Null code and Null message will be present.
    #
    # @!attribute [rw] item
    #   Item in the request which caused the transaction to get cancelled.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] code
    #   Status code for the result of the cancelled transaction.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   Cancellation reason message description.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CancellationReason AWS API Documentation
    #
    class CancellationReason < Struct.new(
      :item,
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the amount of provisioned throughput capacity consumed on a
    # table or an index.
    #
    # @!attribute [rw] read_capacity_units
    #   The total number of read capacity units consumed on a table or an
    #   index.
    #   @return [Float]
    #
    # @!attribute [rw] write_capacity_units
    #   The total number of write capacity units consumed on a table or an
    #   index.
    #   @return [Float]
    #
    # @!attribute [rw] capacity_units
    #   The total number of capacity units consumed on a table or an index.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Capacity AWS API Documentation
    #
    class Capacity < Struct.new(
      :read_capacity_units,
      :write_capacity_units,
      :capacity_units)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the selection criteria for a `Query` or `Scan` operation:
    #
    # * For a `Query` operation, `Condition` is used for specifying the
    #   `KeyConditions` to use when querying a table or an index. For
    #   `KeyConditions`, only the following comparison operators are
    #   supported:
    #
    #   `EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN`
    #
    #   `Condition` is also used in a `QueryFilter`, which evaluates the
    #   query results and returns only the desired values.
    #
    # * For a `Scan` operation, `Condition` is used in a `ScanFilter`, which
    #   evaluates the scan results and returns only the desired values.
    #
    # @note When making an API call, you may pass Condition
    #   data as a hash:
    #
    #       {
    #         attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         comparison_operator: "EQ", # required, accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
    #       }
    #
    # @!attribute [rw] attribute_value_list
    #   One or more values to evaluate against the supplied attribute. The
    #   number of values in the list depends on the `ComparisonOperator`
    #   being used.
    #
    #   For type Number, value comparisons are numeric.
    #
    #   String value comparisons for greater than, equals, or less than are
    #   based on ASCII character code values. For example, `a` is greater
    #   than `A`, and `a` is greater than `B`. For a list of code values,
    #   see
    #   [http://en.wikipedia.org/wiki/ASCII#ASCII\_printable\_characters][1].
    #
    #   For Binary, DynamoDB treats each byte of the binary data as unsigned
    #   when it compares binary values.
    #
    #
    #
    #   [1]: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
    #   @return [Array<Types::AttributeValue>]
    #
    # @!attribute [rw] comparison_operator
    #   A comparator for evaluating attributes. For example, equals, greater
    #   than, less than, etc.
    #
    #   The following comparison operators are available:
    #
    #   `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS |
    #   NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN`
    #
    #   The following are descriptions of each comparison operator.
    #
    #   * `EQ`\: Equal. `EQ` is supported for all data types, including
    #     lists and maps.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, Binary, String Set, Number Set, or Binary
    #     Set. If an item contains an `AttributeValue` element of a
    #     different type than the one provided in the request, the value
    #     does not match. For example, `\{"S":"6"\}` does not equal
    #     `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not equal `\{"NS":["6",
    #     "2", "1"]\}`.
    #
    #
    #
    #   * `NE`\: Not equal. `NE` is supported for all data types, including
    #     lists and maps.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` of type
    #     String, Number, Binary, String Set, Number Set, or Binary Set. If
    #     an item contains an `AttributeValue` of a different type than the
    #     one provided in the request, the value does not match. For
    #     example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
    #     `\{"N":"6"\}` does not equal `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `LE`\: Less than or equal.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If an item
    #     contains an `AttributeValue` element of a different type than the
    #     one provided in the request, the value does not match. For
    #     example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
    #     `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `LT`\: Less than.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` of type
    #     String, Number, or Binary (not a set type). If an item contains an
    #     `AttributeValue` element of a different type than the one provided
    #     in the request, the value does not match. For example,
    #     `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also, `\{"N":"6"\}`
    #     does not compare to `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `GE`\: Greater than or equal.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If an item
    #     contains an `AttributeValue` element of a different type than the
    #     one provided in the request, the value does not match. For
    #     example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
    #     `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `GT`\: Greater than.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If an item
    #     contains an `AttributeValue` element of a different type than the
    #     one provided in the request, the value does not match. For
    #     example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
    #     `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `NOT_NULL`\: The attribute exists. `NOT_NULL` is supported for all
    #     data types, including lists and maps.
    #
    #     <note markdown="1"> This operator tests for the existence of an attribute, not its
    #     data type. If the data type of attribute "`a`" is null, and you
    #     evaluate it using `NOT_NULL`, the result is a Boolean `true`. This
    #     result is because the attribute "`a`" exists; its data type is
    #     not relevant to the `NOT_NULL` comparison operator.
    #
    #      </note>
    #
    #   * `NULL`\: The attribute does not exist. `NULL` is supported for all
    #     data types, including lists and maps.
    #
    #     <note markdown="1"> This operator tests for the nonexistence of an attribute, not its
    #     data type. If the data type of attribute "`a`" is null, and you
    #     evaluate it using `NULL`, the result is a Boolean `false`. This is
    #     because the attribute "`a`" exists; its data type is not
    #     relevant to the `NULL` comparison operator.
    #
    #      </note>
    #
    #   * `CONTAINS`\: Checks for a subsequence, or value in a set.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If the target
    #     attribute of the comparison is of type String, then the operator
    #     checks for a substring match. If the target attribute of the
    #     comparison is of type Binary, then the operator looks for a
    #     subsequence of the target that matches the input. If the target
    #     attribute of the comparison is a set ("`SS`", "`NS`", or
    #     "`BS`"), then the operator evaluates to true if it finds an
    #     exact match with any member of the set.
    #
    #     CONTAINS is supported for lists: When evaluating "`a CONTAINS
    #     b`", "`a`" can be a list; however, "`b`" cannot be a set, a
    #     map, or a list.
    #
    #   * `NOT_CONTAINS`\: Checks for absence of a subsequence, or absence
    #     of a value in a set.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If the target
    #     attribute of the comparison is a String, then the operator checks
    #     for the absence of a substring match. If the target attribute of
    #     the comparison is Binary, then the operator checks for the absence
    #     of a subsequence of the target that matches the input. If the
    #     target attribute of the comparison is a set ("`SS`", "`NS`",
    #     or "`BS`"), then the operator evaluates to true if it *does not*
    #     find an exact match with any member of the set.
    #
    #     NOT\_CONTAINS is supported for lists: When evaluating "`a NOT
    #     CONTAINS b`", "`a`" can be a list; however, "`b`" cannot be a
    #     set, a map, or a list.
    #
    #   * `BEGINS_WITH`\: Checks for a prefix.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` of type
    #     String or Binary (not a Number or a set type). The target
    #     attribute of the comparison must be of type String or Binary (not
    #     a Number or a set type).
    #
    #
    #
    #   * `IN`\: Checks for matching elements in a list.
    #
    #     `AttributeValueList` can contain one or more `AttributeValue`
    #     elements of type String, Number, or Binary. These attributes are
    #     compared against an existing attribute of an item. If any elements
    #     of the input are equal to the item attribute, the expression
    #     evaluates to true.
    #
    #   * `BETWEEN`\: Greater than or equal to the first value, and less
    #     than or equal to the second value.
    #
    #     `AttributeValueList` must contain two `AttributeValue` elements of
    #     the same type, either String, Number, or Binary (not a set type).
    #     A target attribute matches if the target value is greater than, or
    #     equal to, the first element and less than, or equal to, the second
    #     element. If an item contains an `AttributeValue` element of a
    #     different type than the one provided in the request, the value
    #     does not match. For example, `\{"S":"6"\}` does not compare to
    #     `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not compare to
    #     `\{"NS":["6", "2", "1"]\}`
    #
    #   For usage examples of `AttributeValueList` and `ComparisonOperator`,
    #   see [Legacy Conditional Parameters][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Condition AWS API Documentation
    #
    class Condition < Struct.new(
      :attribute_value_list,
      :comparison_operator)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to perform a check that an item exists or to
    # check the condition of specific attributes of the item.
    #
    # @note When making an API call, you may pass ConditionCheck
    #   data as a hash:
    #
    #       {
    #         key: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         table_name: "TableName", # required
    #         condition_expression: "ConditionExpression", # required
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #       }
    #
    # @!attribute [rw] key
    #   The primary key of the item to be checked. Each element consists of
    #   an attribute name and a value for that attribute.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] table_name
    #   Name of the table for the check item request.
    #   @return [String]
    #
    # @!attribute [rw] condition_expression
    #   A condition that must be satisfied in order for a conditional update
    #   to succeed.
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] return_values_on_condition_check_failure
    #   Use `ReturnValuesOnConditionCheckFailure` to get the item attributes
    #   if the `ConditionCheck` condition fails. For
    #   `ReturnValuesOnConditionCheckFailure`, the valid values are: NONE
    #   and ALL\_OLD.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ConditionCheck AWS API Documentation
    #
    class ConditionCheck < Struct.new(
      :key,
      :table_name,
      :condition_expression,
      :expression_attribute_names,
      :expression_attribute_values,
      :return_values_on_condition_check_failure)
      SENSITIVE = []
      include Aws::Structure
    end

    # A condition specified in the operation could not be evaluated.
    #
    # @!attribute [rw] message
    #   The conditional request failed.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ConditionalCheckFailedException AWS API Documentation
    #
    class ConditionalCheckFailedException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The capacity units consumed by an operation. The data returned
    # includes the total provisioned throughput consumed, along with
    # statistics for the table and any indexes involved in the operation.
    # `ConsumedCapacity` is only returned if the request asked for it. For
    # more information, see [Provisioned Throughput][1] in the *Amazon
    # DynamoDB Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
    #
    # @!attribute [rw] table_name
    #   The name of the table that was affected by the operation.
    #   @return [String]
    #
    # @!attribute [rw] capacity_units
    #   The total number of capacity units consumed by the operation.
    #   @return [Float]
    #
    # @!attribute [rw] read_capacity_units
    #   The total number of read capacity units consumed by the operation.
    #   @return [Float]
    #
    # @!attribute [rw] write_capacity_units
    #   The total number of write capacity units consumed by the operation.
    #   @return [Float]
    #
    # @!attribute [rw] table
    #   The amount of throughput consumed on the table affected by the
    #   operation.
    #   @return [Types::Capacity]
    #
    # @!attribute [rw] local_secondary_indexes
    #   The amount of throughput consumed on each local index affected by
    #   the operation.
    #   @return [Hash<String,Types::Capacity>]
    #
    # @!attribute [rw] global_secondary_indexes
    #   The amount of throughput consumed on each global index affected by
    #   the operation.
    #   @return [Hash<String,Types::Capacity>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ConsumedCapacity AWS API Documentation
    #
    class ConsumedCapacity < Struct.new(
      :table_name,
      :capacity_units,
      :read_capacity_units,
      :write_capacity_units,
      :table,
      :local_secondary_indexes,
      :global_secondary_indexes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the continuous backups and point in time recovery settings
    # on the table.
    #
    # @!attribute [rw] continuous_backups_status
    #   `ContinuousBackupsStatus` can be one of the following states:
    #   ENABLED, DISABLED
    #   @return [String]
    #
    # @!attribute [rw] point_in_time_recovery_description
    #   The description of the point in time recovery settings applied to
    #   the table.
    #   @return [Types::PointInTimeRecoveryDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ContinuousBackupsDescription AWS API Documentation
    #
    class ContinuousBackupsDescription < Struct.new(
      :continuous_backups_status,
      :point_in_time_recovery_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Backups have not yet been enabled for this table.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ContinuousBackupsUnavailableException AWS API Documentation
    #
    class ContinuousBackupsUnavailableException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a Contributor Insights summary entry.
    #
    # @!attribute [rw] table_name
    #   Name of the table associated with the summary.
    #   @return [String]
    #
    # @!attribute [rw] index_name
    #   Name of the index associated with the summary, if any.
    #   @return [String]
    #
    # @!attribute [rw] contributor_insights_status
    #   Describes the current status for contributor insights for the given
    #   table and index, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ContributorInsightsSummary AWS API Documentation
    #
    class ContributorInsightsSummary < Struct.new(
      :table_name,
      :index_name,
      :contributor_insights_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass CreateBackupInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         backup_name: "BackupName", # required
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table.
    #   @return [String]
    #
    # @!attribute [rw] backup_name
    #   Specified name for the backup.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateBackupInput AWS API Documentation
    #
    class CreateBackupInput < Struct.new(
      :table_name,
      :backup_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] backup_details
    #   Contains the details of the backup created for the table.
    #   @return [Types::BackupDetails]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateBackupOutput AWS API Documentation
    #
    class CreateBackupOutput < Struct.new(
      :backup_details)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a new global secondary index to be added to an existing
    # table.
    #
    # @note When making an API call, you may pass CreateGlobalSecondaryIndexAction
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName", # required
    #         key_schema: [ # required
    #           {
    #             attribute_name: "KeySchemaAttributeName", # required
    #             key_type: "HASH", # required, accepts HASH, RANGE
    #           },
    #         ],
    #         projection: { # required
    #           projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #           non_key_attributes: ["NonKeyAttributeName"],
    #         },
    #         provisioned_throughput: {
    #           read_capacity_units: 1, # required
    #           write_capacity_units: 1, # required
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index to be created.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   The key schema for the global secondary index.
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] projection
    #   Represents attributes that are copied (projected) from the table
    #   into an index. These are in addition to the primary key attributes
    #   and index key attributes, which are automatically projected.
    #   @return [Types::Projection]
    #
    # @!attribute [rw] provisioned_throughput
    #   Represents the provisioned throughput settings for the specified
    #   global secondary index.
    #
    #   For current minimum and maximum provisioned throughput values, see
    #   [Service, Account, and Table Quotas][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
    #   @return [Types::ProvisionedThroughput]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateGlobalSecondaryIndexAction AWS API Documentation
    #
    class CreateGlobalSecondaryIndexAction < Struct.new(
      :index_name,
      :key_schema,
      :projection,
      :provisioned_throughput)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass CreateGlobalTableInput
    #   data as a hash:
    #
    #       {
    #         global_table_name: "TableName", # required
    #         replication_group: [ # required
    #           {
    #             region_name: "RegionName",
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] global_table_name
    #   The global table name.
    #   @return [String]
    #
    # @!attribute [rw] replication_group
    #   The Regions where the global table needs to be created.
    #   @return [Array<Types::Replica>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateGlobalTableInput AWS API Documentation
    #
    class CreateGlobalTableInput < Struct.new(
      :global_table_name,
      :replication_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] global_table_description
    #   Contains the details of the global table.
    #   @return [Types::GlobalTableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateGlobalTableOutput AWS API Documentation
    #
    class CreateGlobalTableOutput < Struct.new(
      :global_table_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a replica to be added.
    #
    # @note When making an API call, you may pass CreateReplicaAction
    #   data as a hash:
    #
    #       {
    #         region_name: "RegionName", # required
    #       }
    #
    # @!attribute [rw] region_name
    #   The Region of the replica to be added.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateReplicaAction AWS API Documentation
    #
    class CreateReplicaAction < Struct.new(
      :region_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a replica to be created.
    #
    # @note When making an API call, you may pass CreateReplicationGroupMemberAction
    #   data as a hash:
    #
    #       {
    #         region_name: "RegionName", # required
    #         kms_master_key_id: "KMSMasterKeyId",
    #         provisioned_throughput_override: {
    #           read_capacity_units: 1,
    #         },
    #         global_secondary_indexes: [
    #           {
    #             index_name: "IndexName", # required
    #             provisioned_throughput_override: {
    #               read_capacity_units: 1,
    #             },
    #           },
    #         ],
    #         table_class_override: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #       }
    #
    # @!attribute [rw] region_name
    #   The Region where the new replica will be created.
    #   @return [String]
    #
    # @!attribute [rw] kms_master_key_id
    #   The KMS key that should be used for KMS encryption in the new
    #   replica. To specify a key, use its key ID, Amazon Resource Name
    #   (ARN), alias name, or alias ARN. Note that you should only provide
    #   this parameter if the key is different from the default DynamoDB KMS
    #   key `alias/aws/dynamodb`.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_throughput_override
    #   Replica-specific provisioned throughput. If not specified, uses the
    #   source table's provisioned throughput settings.
    #   @return [Types::ProvisionedThroughputOverride]
    #
    # @!attribute [rw] global_secondary_indexes
    #   Replica-specific global secondary index settings.
    #   @return [Array<Types::ReplicaGlobalSecondaryIndex>]
    #
    # @!attribute [rw] table_class_override
    #   Replica-specific table class. If not specified, uses the source
    #   table's table class.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateReplicationGroupMemberAction AWS API Documentation
    #
    class CreateReplicationGroupMemberAction < Struct.new(
      :region_name,
      :kms_master_key_id,
      :provisioned_throughput_override,
      :global_secondary_indexes,
      :table_class_override)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `CreateTable` operation.
    #
    # @note When making an API call, you may pass CreateTableInput
    #   data as a hash:
    #
    #       {
    #         attribute_definitions: [ # required
    #           {
    #             attribute_name: "KeySchemaAttributeName", # required
    #             attribute_type: "S", # required, accepts S, N, B
    #           },
    #         ],
    #         table_name: "TableName", # required
    #         key_schema: [ # required
    #           {
    #             attribute_name: "KeySchemaAttributeName", # required
    #             key_type: "HASH", # required, accepts HASH, RANGE
    #           },
    #         ],
    #         local_secondary_indexes: [
    #           {
    #             index_name: "IndexName", # required
    #             key_schema: [ # required
    #               {
    #                 attribute_name: "KeySchemaAttributeName", # required
    #                 key_type: "HASH", # required, accepts HASH, RANGE
    #               },
    #             ],
    #             projection: { # required
    #               projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #               non_key_attributes: ["NonKeyAttributeName"],
    #             },
    #           },
    #         ],
    #         global_secondary_indexes: [
    #           {
    #             index_name: "IndexName", # required
    #             key_schema: [ # required
    #               {
    #                 attribute_name: "KeySchemaAttributeName", # required
    #                 key_type: "HASH", # required, accepts HASH, RANGE
    #               },
    #             ],
    #             projection: { # required
    #               projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #               non_key_attributes: ["NonKeyAttributeName"],
    #             },
    #             provisioned_throughput: {
    #               read_capacity_units: 1, # required
    #               write_capacity_units: 1, # required
    #             },
    #           },
    #         ],
    #         billing_mode: "PROVISIONED", # accepts PROVISIONED, PAY_PER_REQUEST
    #         provisioned_throughput: {
    #           read_capacity_units: 1, # required
    #           write_capacity_units: 1, # required
    #         },
    #         stream_specification: {
    #           stream_enabled: false, # required
    #           stream_view_type: "NEW_IMAGE", # accepts NEW_IMAGE, OLD_IMAGE, NEW_AND_OLD_IMAGES, KEYS_ONLY
    #         },
    #         sse_specification: {
    #           enabled: false,
    #           sse_type: "AES256", # accepts AES256, KMS
    #           kms_master_key_id: "KMSMasterKeyId",
    #         },
    #         tags: [
    #           {
    #             key: "TagKeyString", # required
    #             value: "TagValueString", # required
    #           },
    #         ],
    #         table_class: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #       }
    #
    # @!attribute [rw] attribute_definitions
    #   An array of attributes that describe the key schema for the table
    #   and indexes.
    #   @return [Array<Types::AttributeDefinition>]
    #
    # @!attribute [rw] table_name
    #   The name of the table to create.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   Specifies the attributes that make up the primary key for a table or
    #   an index. The attributes in `KeySchema` must also be defined in the
    #   `AttributeDefinitions` array. For more information, see [Data
    #   Model][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #   Each `KeySchemaElement` in the array is composed of:
    #
    #   * `AttributeName` - The name of this key attribute.
    #
    #   * `KeyType` - The role that the key attribute will assume:
    #
    #     * `HASH` - partition key
    #
    #     * `RANGE` - sort key
    #
    #   <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
    #   The term "hash attribute" derives from the DynamoDB usage of an
    #   internal hash function to evenly distribute data items across
    #   partitions, based on their partition key values.
    #
    #    The sort key of an item is also known as its *range attribute*. The
    #   term "range attribute" derives from the way DynamoDB stores items
    #   with the same partition key physically close together, in sorted
    #   order by the sort key value.
    #
    #    </note>
    #
    #   For a simple primary key (partition key), you must provide exactly
    #   one element with a `KeyType` of `HASH`.
    #
    #   For a composite primary key (partition key and sort key), you must
    #   provide exactly two elements, in this order: The first element must
    #   have a `KeyType` of `HASH`, and the second element must have a
    #   `KeyType` of `RANGE`.
    #
    #   For more information, see [Working with Tables][2] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] local_secondary_indexes
    #   One or more local secondary indexes (the maximum is 5) to be created
    #   on the table. Each index is scoped to a given partition key value.
    #   There is a 10 GB size limit per partition key value; otherwise, the
    #   size of a local secondary index is unconstrained.
    #
    #   Each local secondary index in the array includes the following:
    #
    #   * `IndexName` - The name of the local secondary index. Must be
    #     unique only for this table.
    #
    #
    #
    #   * `KeySchema` - Specifies the key schema for the local secondary
    #     index. The key schema must begin with the same partition key as
    #     the table.
    #
    #   * `Projection` - Specifies attributes that are copied (projected)
    #     from the table into the index. These are in addition to the
    #     primary key attributes and index key attributes, which are
    #     automatically projected. Each attribute specification is composed
    #     of:
    #
    #     * `ProjectionType` - One of the following:
    #
    #       * `KEYS_ONLY` - Only the index and primary keys are projected
    #         into the index.
    #
    #       * `INCLUDE` - Only the specified table attributes are projected
    #         into the index. The list of projected attributes is in
    #         `NonKeyAttributes`.
    #
    #       * `ALL` - All of the table attributes are projected into the
    #         index.
    #
    #     * `NonKeyAttributes` - A list of one or more non-key attribute
    #       names that are projected into the secondary index. The total
    #       count of attributes provided in `NonKeyAttributes`, summed
    #       across all of the secondary indexes, must not exceed 100. If you
    #       project the same attribute into two different indexes, this
    #       counts as two distinct attributes when determining the total.
    #   @return [Array<Types::LocalSecondaryIndex>]
    #
    # @!attribute [rw] global_secondary_indexes
    #   One or more global secondary indexes (the maximum is 20) to be
    #   created on the table. Each global secondary index in the array
    #   includes the following:
    #
    #   * `IndexName` - The name of the global secondary index. Must be
    #     unique only for this table.
    #
    #
    #
    #   * `KeySchema` - Specifies the key schema for the global secondary
    #     index.
    #
    #   * `Projection` - Specifies attributes that are copied (projected)
    #     from the table into the index. These are in addition to the
    #     primary key attributes and index key attributes, which are
    #     automatically projected. Each attribute specification is composed
    #     of:
    #
    #     * `ProjectionType` - One of the following:
    #
    #       * `KEYS_ONLY` - Only the index and primary keys are projected
    #         into the index.
    #
    #       * `INCLUDE` - Only the specified table attributes are projected
    #         into the index. The list of projected attributes is in
    #         `NonKeyAttributes`.
    #
    #       * `ALL` - All of the table attributes are projected into the
    #         index.
    #
    #     * `NonKeyAttributes` - A list of one or more non-key attribute
    #       names that are projected into the secondary index. The total
    #       count of attributes provided in `NonKeyAttributes`, summed
    #       across all of the secondary indexes, must not exceed 100. If you
    #       project the same attribute into two different indexes, this
    #       counts as two distinct attributes when determining the total.
    #
    #   * `ProvisionedThroughput` - The provisioned throughput settings for
    #     the global secondary index, consisting of read and write capacity
    #     units.
    #   @return [Array<Types::GlobalSecondaryIndex>]
    #
    # @!attribute [rw] billing_mode
    #   Controls how you are charged for read and write throughput and how
    #   you manage capacity. This setting can be changed later.
    #
    #   * `PROVISIONED` - We recommend using `PROVISIONED` for predictable
    #     workloads. `PROVISIONED` sets the billing mode to [Provisioned
    #     Mode][1].
    #
    #   * `PAY_PER_REQUEST` - We recommend using `PAY_PER_REQUEST` for
    #     unpredictable workloads. `PAY_PER_REQUEST` sets the billing mode
    #     to [On-Demand Mode][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand
    #   @return [String]
    #
    # @!attribute [rw] provisioned_throughput
    #   Represents the provisioned throughput settings for a specified table
    #   or index. The settings can be modified using the `UpdateTable`
    #   operation.
    #
    #   If you set BillingMode as `PROVISIONED`, you must specify this
    #   property. If you set BillingMode as `PAY_PER_REQUEST`, you cannot
    #   specify this property.
    #
    #   For current minimum and maximum provisioned throughput values, see
    #   [Service, Account, and Table Quotas][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
    #   @return [Types::ProvisionedThroughput]
    #
    # @!attribute [rw] stream_specification
    #   The settings for DynamoDB Streams on the table. These settings
    #   consist of:
    #
    #   * `StreamEnabled` - Indicates whether DynamoDB Streams is to be
    #     enabled (true) or disabled (false).
    #
    #   * `StreamViewType` - When an item in the table is modified,
    #     `StreamViewType` determines what information is written to the
    #     table's stream. Valid values for `StreamViewType` are:
    #
    #     * `KEYS_ONLY` - Only the key attributes of the modified item are
    #       written to the stream.
    #
    #     * `NEW_IMAGE` - The entire item, as it appears after it was
    #       modified, is written to the stream.
    #
    #     * `OLD_IMAGE` - The entire item, as it appeared before it was
    #       modified, is written to the stream.
    #
    #     * `NEW_AND_OLD_IMAGES` - Both the new and the old item images of
    #       the item are written to the stream.
    #   @return [Types::StreamSpecification]
    #
    # @!attribute [rw] sse_specification
    #   Represents the settings used to enable server-side encryption.
    #   @return [Types::SSESpecification]
    #
    # @!attribute [rw] tags
    #   A list of key-value pairs to label the table. For more information,
    #   see [Tagging for DynamoDB][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] table_class
    #   The table class of the new table. Valid values are `STANDARD` and
    #   `STANDARD_INFREQUENT_ACCESS`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateTableInput AWS API Documentation
    #
    class CreateTableInput < Struct.new(
      :attribute_definitions,
      :table_name,
      :key_schema,
      :local_secondary_indexes,
      :global_secondary_indexes,
      :billing_mode,
      :provisioned_throughput,
      :stream_specification,
      :sse_specification,
      :tags,
      :table_class)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `CreateTable` operation.
    #
    # @!attribute [rw] table_description
    #   Represents the properties of the table.
    #   @return [Types::TableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateTableOutput AWS API Documentation
    #
    class CreateTableOutput < Struct.new(
      :table_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to perform a `DeleteItem` operation.
    #
    # @note When making an API call, you may pass Delete
    #   data as a hash:
    #
    #       {
    #         key: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         table_name: "TableName", # required
    #         condition_expression: "ConditionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #       }
    #
    # @!attribute [rw] key
    #   The primary key of the item to be deleted. Each element consists of
    #   an attribute name and a value for that attribute.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] table_name
    #   Name of the table in which the item to be deleted resides.
    #   @return [String]
    #
    # @!attribute [rw] condition_expression
    #   A condition that must be satisfied in order for a conditional delete
    #   to succeed.
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] return_values_on_condition_check_failure
    #   Use `ReturnValuesOnConditionCheckFailure` to get the item attributes
    #   if the `Delete` condition fails. For
    #   `ReturnValuesOnConditionCheckFailure`, the valid values are: NONE
    #   and ALL\_OLD.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Delete AWS API Documentation
    #
    class Delete < Struct.new(
      :key,
      :table_name,
      :condition_expression,
      :expression_attribute_names,
      :expression_attribute_values,
      :return_values_on_condition_check_failure)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBackupInput
    #   data as a hash:
    #
    #       {
    #         backup_arn: "BackupArn", # required
    #       }
    #
    # @!attribute [rw] backup_arn
    #   The ARN associated with the backup.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteBackupInput AWS API Documentation
    #
    class DeleteBackupInput < Struct.new(
      :backup_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] backup_description
    #   Contains the description of the backup created for the table.
    #   @return [Types::BackupDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteBackupOutput AWS API Documentation
    #
    class DeleteBackupOutput < Struct.new(
      :backup_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a global secondary index to be deleted from an existing
    # table.
    #
    # @note When making an API call, you may pass DeleteGlobalSecondaryIndexAction
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName", # required
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index to be deleted.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteGlobalSecondaryIndexAction AWS API Documentation
    #
    class DeleteGlobalSecondaryIndexAction < Struct.new(
      :index_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `DeleteItem` operation.
    #
    # @note When making an API call, you may pass DeleteItemInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         key: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         expected: {
    #           "AttributeName" => {
    #             value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #             exists: false,
    #             comparison_operator: "EQ", # accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
    #             attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #         },
    #         conditional_operator: "AND", # accepts AND, OR
    #         return_values: "NONE", # accepts NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
    #         condition_expression: "ConditionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table from which to delete the item.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   A map of attribute names to `AttributeValue` objects, representing
    #   the primary key of the item to delete.
    #
    #   For the primary key, you must provide all of the attributes. For
    #   example, with a simple primary key, you only need to provide a value
    #   for the partition key. For a composite primary key, you must provide
    #   values for both the partition key and the sort key.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] expected
    #   This is a legacy parameter. Use `ConditionExpression` instead. For
    #   more information, see [Expected][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.Expected.html
    #   @return [Hash<String,Types::ExpectedAttributeValue>]
    #
    # @!attribute [rw] conditional_operator
    #   This is a legacy parameter. Use `ConditionExpression` instead. For
    #   more information, see [ConditionalOperator][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.ConditionalOperator.html
    #   @return [String]
    #
    # @!attribute [rw] return_values
    #   Use `ReturnValues` if you want to get the item attributes as they
    #   appeared before they were deleted. For `DeleteItem`, the valid
    #   values are:
    #
    #   * `NONE` - If `ReturnValues` is not specified, or if its value is
    #     `NONE`, then nothing is returned. (This setting is the default for
    #     `ReturnValues`.)
    #
    #   * `ALL_OLD` - The content of the old item is returned.
    #
    #   There is no additional cost associated with requesting a return
    #   value aside from the small network and processing overhead of
    #   receiving a larger response. No read capacity units are consumed.
    #
    #   <note markdown="1"> The `ReturnValues` parameter is used by several DynamoDB operations;
    #   however, `DeleteItem` does not recognize any values other than
    #   `NONE` or `ALL_OLD`.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] return_item_collection_metrics
    #   Determines whether item collection metrics are returned. If set to
    #   `SIZE`, the response includes statistics about item collections, if
    #   any, that were modified during the operation are returned in the
    #   response. If set to `NONE` (the default), no statistics are
    #   returned.
    #   @return [String]
    #
    # @!attribute [rw] condition_expression
    #   A condition that must be satisfied in order for a conditional
    #   `DeleteItem` to succeed.
    #
    #   An expression can contain any of the following:
    #
    #   * Functions: `attribute_exists | attribute_not_exists |
    #     attribute_type | contains | begins_with | size`
    #
    #     These function names are case-sensitive.
    #
    #   * Comparison operators: `= | <> | < | > | <= | >= | BETWEEN | IN `
    #
    #   * Logical operators: `AND | OR | NOT`
    #
    #   For more information about condition expressions, see [Condition
    #   Expressions][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression. The following are some use cases for using
    #   `ExpressionAttributeNames`\:
    #
    #   * To access an attribute whose name conflicts with a DynamoDB
    #     reserved word.
    #
    #   * To create a placeholder for repeating occurrences of an attribute
    #     name in an expression.
    #
    #   * To prevent special characters in an attribute name from being
    #     misinterpreted in an expression.
    #
    #   Use the **#** character in an expression to dereference an attribute
    #   name. For example, consider the following attribute name:
    #
    #   * `Percentile`
    #
    #   ^
    #
    #   The name of this attribute conflicts with a reserved word, so it
    #   cannot be used directly in an expression. (For the complete list of
    #   reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
    #   Developer Guide*). To work around this, you could specify the
    #   following for `ExpressionAttributeNames`\:
    #
    #   * `\{"#P":"Percentile"\}`
    #
    #   ^
    #
    #   You could then use this substitution in an expression, as in this
    #   example:
    #
    #   * `#P = :val`
    #
    #   ^
    #
    #   <note markdown="1"> Tokens that begin with the **\:** character are *expression
    #   attribute values*, which are placeholders for the actual value at
    #   runtime.
    #
    #    </note>
    #
    #   For more information on expression attribute names, see [Specifying
    #   Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #
    #   Use the **\:** (colon) character in an expression to dereference an
    #   attribute value. For example, suppose that you wanted to check
    #   whether the value of the *ProductStatus* attribute was one of the
    #   following:
    #
    #   `Available | Backordered | Discontinued`
    #
    #   You would first need to specify `ExpressionAttributeValues` as
    #   follows:
    #
    #   `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
    #   ":disc":\{"S":"Discontinued"\} \}`
    #
    #   You could then use these values in an expression, such as this:
    #
    #   `ProductStatus IN (:avail, :back, :disc)`
    #
    #   For more information on expression attribute values, see [Condition
    #   Expressions][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteItemInput AWS API Documentation
    #
    class DeleteItemInput < Struct.new(
      :table_name,
      :key,
      :expected,
      :conditional_operator,
      :return_values,
      :return_consumed_capacity,
      :return_item_collection_metrics,
      :condition_expression,
      :expression_attribute_names,
      :expression_attribute_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `DeleteItem` operation.
    #
    # @!attribute [rw] attributes
    #   A map of attribute names to `AttributeValue` objects, representing
    #   the item as it appeared before the `DeleteItem` operation. This map
    #   appears in the response only if `ReturnValues` was specified as
    #   `ALL_OLD` in the request.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the `DeleteItem` operation. The data
    #   returned includes the total provisioned throughput consumed, along
    #   with statistics for the table and any indexes involved in the
    #   operation. `ConsumedCapacity` is only returned if the
    #   `ReturnConsumedCapacity` parameter was specified. For more
    #   information, see [Provisioned Mode][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
    #   @return [Types::ConsumedCapacity]
    #
    # @!attribute [rw] item_collection_metrics
    #   Information about item collections, if any, that were affected by
    #   the `DeleteItem` operation. `ItemCollectionMetrics` is only returned
    #   if the `ReturnItemCollectionMetrics` parameter was specified. If the
    #   table does not have any local secondary indexes, this information is
    #   not returned in the response.
    #
    #   Each `ItemCollectionMetrics` element consists of:
    #
    #   * `ItemCollectionKey` - The partition key value of the item
    #     collection. This is the same as the partition key value of the
    #     item itself.
    #
    #   * `SizeEstimateRangeGB` - An estimate of item collection size, in
    #     gigabytes. This value is a two-element array containing a lower
    #     bound and an upper bound for the estimate. The estimate includes
    #     the size of all the items in the table, plus the size of all
    #     attributes projected into all of the local secondary indexes on
    #     that table. Use this estimate to measure whether a local secondary
    #     index is approaching its size limit.
    #
    #     The estimate is subject to change over time; therefore, do not
    #     rely on the precision or accuracy of the estimate.
    #   @return [Types::ItemCollectionMetrics]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteItemOutput AWS API Documentation
    #
    class DeleteItemOutput < Struct.new(
      :attributes,
      :consumed_capacity,
      :item_collection_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a replica to be removed.
    #
    # @note When making an API call, you may pass DeleteReplicaAction
    #   data as a hash:
    #
    #       {
    #         region_name: "RegionName", # required
    #       }
    #
    # @!attribute [rw] region_name
    #   The Region of the replica to be removed.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteReplicaAction AWS API Documentation
    #
    class DeleteReplicaAction < Struct.new(
      :region_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a replica to be deleted.
    #
    # @note When making an API call, you may pass DeleteReplicationGroupMemberAction
    #   data as a hash:
    #
    #       {
    #         region_name: "RegionName", # required
    #       }
    #
    # @!attribute [rw] region_name
    #   The Region where the replica exists.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteReplicationGroupMemberAction AWS API Documentation
    #
    class DeleteReplicationGroupMemberAction < Struct.new(
      :region_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to perform a `DeleteItem` operation on an item.
    #
    # @note When making an API call, you may pass DeleteRequest
    #   data as a hash:
    #
    #       {
    #         key: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #       }
    #
    # @!attribute [rw] key
    #   A map of attribute name to attribute values, representing the
    #   primary key of the item to delete. All of the table's primary key
    #   attributes must be specified, and their data types must match those
    #   of the table's key schema.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteRequest AWS API Documentation
    #
    class DeleteRequest < Struct.new(
      :key)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `DeleteTable` operation.
    #
    # @note When making an API call, you may pass DeleteTableInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteTableInput AWS API Documentation
    #
    class DeleteTableInput < Struct.new(
      :table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `DeleteTable` operation.
    #
    # @!attribute [rw] table_description
    #   Represents the properties of a table.
    #   @return [Types::TableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DeleteTableOutput AWS API Documentation
    #
    class DeleteTableOutput < Struct.new(
      :table_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeBackupInput
    #   data as a hash:
    #
    #       {
    #         backup_arn: "BackupArn", # required
    #       }
    #
    # @!attribute [rw] backup_arn
    #   The Amazon Resource Name (ARN) associated with the backup.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeBackupInput AWS API Documentation
    #
    class DescribeBackupInput < Struct.new(
      :backup_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] backup_description
    #   Contains the description of the backup created for the table.
    #   @return [Types::BackupDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeBackupOutput AWS API Documentation
    #
    class DescribeBackupOutput < Struct.new(
      :backup_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeContinuousBackupsInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #       }
    #
    # @!attribute [rw] table_name
    #   Name of the table for which the customer wants to check the
    #   continuous backups and point in time recovery settings.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeContinuousBackupsInput AWS API Documentation
    #
    class DescribeContinuousBackupsInput < Struct.new(
      :table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] continuous_backups_description
    #   Represents the continuous backups and point in time recovery
    #   settings on the table.
    #   @return [Types::ContinuousBackupsDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeContinuousBackupsOutput AWS API Documentation
    #
    class DescribeContinuousBackupsOutput < Struct.new(
      :continuous_backups_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeContributorInsightsInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         index_name: "IndexName",
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table to describe.
    #   @return [String]
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index to describe, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeContributorInsightsInput AWS API Documentation
    #
    class DescribeContributorInsightsInput < Struct.new(
      :table_name,
      :index_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] table_name
    #   The name of the table being described.
    #   @return [String]
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index being described.
    #   @return [String]
    #
    # @!attribute [rw] contributor_insights_rule_list
    #   List of names of the associated contributor insights rules.
    #   @return [Array<String>]
    #
    # @!attribute [rw] contributor_insights_status
    #   Current status of contributor insights.
    #   @return [String]
    #
    # @!attribute [rw] last_update_date_time
    #   Timestamp of the last time the status was changed.
    #   @return [Time]
    #
    # @!attribute [rw] failure_exception
    #   Returns information about the last failure that was encountered.
    #
    #   The most common exceptions for a FAILED status are:
    #
    #   * LimitExceededException - Per-account Amazon CloudWatch Contributor
    #     Insights rule limit reached. Please disable Contributor Insights
    #     for other tables/indexes OR disable Contributor Insights rules
    #     before retrying.
    #
    #   * AccessDeniedException - Amazon CloudWatch Contributor Insights
    #     rules cannot be modified due to insufficient permissions.
    #
    #   * AccessDeniedException - Failed to create service-linked role for
    #     Contributor Insights due to insufficient permissions.
    #
    #   * InternalServerError - Failed to create Amazon CloudWatch
    #     Contributor Insights rules. Please retry request.
    #   @return [Types::FailureException]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeContributorInsightsOutput AWS API Documentation
    #
    class DescribeContributorInsightsOutput < Struct.new(
      :table_name,
      :index_name,
      :contributor_insights_rule_list,
      :contributor_insights_status,
      :last_update_date_time,
      :failure_exception)
      SENSITIVE = []
      include Aws::Structure
    end

    # @api private
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeEndpointsRequest AWS API Documentation
    #
    class DescribeEndpointsRequest < Aws::EmptyStructure; end

    # @!attribute [rw] endpoints
    #   List of endpoints.
    #   @return [Array<Types::Endpoint>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeEndpointsResponse AWS API Documentation
    #
    class DescribeEndpointsResponse < Struct.new(
      :endpoints)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeExportInput
    #   data as a hash:
    #
    #       {
    #         export_arn: "ExportArn", # required
    #       }
    #
    # @!attribute [rw] export_arn
    #   The Amazon Resource Name (ARN) associated with the export.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeExportInput AWS API Documentation
    #
    class DescribeExportInput < Struct.new(
      :export_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] export_description
    #   Represents the properties of the export.
    #   @return [Types::ExportDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeExportOutput AWS API Documentation
    #
    class DescribeExportOutput < Struct.new(
      :export_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeGlobalTableInput
    #   data as a hash:
    #
    #       {
    #         global_table_name: "TableName", # required
    #       }
    #
    # @!attribute [rw] global_table_name
    #   The name of the global table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeGlobalTableInput AWS API Documentation
    #
    class DescribeGlobalTableInput < Struct.new(
      :global_table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] global_table_description
    #   Contains the details of the global table.
    #   @return [Types::GlobalTableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeGlobalTableOutput AWS API Documentation
    #
    class DescribeGlobalTableOutput < Struct.new(
      :global_table_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeGlobalTableSettingsInput
    #   data as a hash:
    #
    #       {
    #         global_table_name: "TableName", # required
    #       }
    #
    # @!attribute [rw] global_table_name
    #   The name of the global table to describe.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeGlobalTableSettingsInput AWS API Documentation
    #
    class DescribeGlobalTableSettingsInput < Struct.new(
      :global_table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] global_table_name
    #   The name of the global table.
    #   @return [String]
    #
    # @!attribute [rw] replica_settings
    #   The Region-specific settings for the global table.
    #   @return [Array<Types::ReplicaSettingsDescription>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeGlobalTableSettingsOutput AWS API Documentation
    #
    class DescribeGlobalTableSettingsOutput < Struct.new(
      :global_table_name,
      :replica_settings)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeKinesisStreamingDestinationInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table being described.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeKinesisStreamingDestinationInput AWS API Documentation
    #
    class DescribeKinesisStreamingDestinationInput < Struct.new(
      :table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] table_name
    #   The name of the table being described.
    #   @return [String]
    #
    # @!attribute [rw] kinesis_data_stream_destinations
    #   The list of replica structures for the table being described.
    #   @return [Array<Types::KinesisDataStreamDestination>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeKinesisStreamingDestinationOutput AWS API Documentation
    #
    class DescribeKinesisStreamingDestinationOutput < Struct.new(
      :table_name,
      :kinesis_data_stream_destinations)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `DescribeLimits` operation. Has no content.
    #
    # @api private
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeLimitsInput AWS API Documentation
    #
    class DescribeLimitsInput < Aws::EmptyStructure; end

    # Represents the output of a `DescribeLimits` operation.
    #
    # @!attribute [rw] account_max_read_capacity_units
    #   The maximum total read capacity units that your account allows you
    #   to provision across all of your tables in this Region.
    #   @return [Integer]
    #
    # @!attribute [rw] account_max_write_capacity_units
    #   The maximum total write capacity units that your account allows you
    #   to provision across all of your tables in this Region.
    #   @return [Integer]
    #
    # @!attribute [rw] table_max_read_capacity_units
    #   The maximum read capacity units that your account allows you to
    #   provision for a new table that you are creating in this Region,
    #   including the read capacity units provisioned for its global
    #   secondary indexes (GSIs).
    #   @return [Integer]
    #
    # @!attribute [rw] table_max_write_capacity_units
    #   The maximum write capacity units that your account allows you to
    #   provision for a new table that you are creating in this Region,
    #   including the write capacity units provisioned for its global
    #   secondary indexes (GSIs).
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeLimitsOutput AWS API Documentation
    #
    class DescribeLimitsOutput < Struct.new(
      :account_max_read_capacity_units,
      :account_max_write_capacity_units,
      :table_max_read_capacity_units,
      :table_max_write_capacity_units)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `DescribeTable` operation.
    #
    # @note When making an API call, you may pass DescribeTableInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table to describe.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeTableInput AWS API Documentation
    #
    class DescribeTableInput < Struct.new(
      :table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `DescribeTable` operation.
    #
    # @!attribute [rw] table
    #   The properties of the table.
    #   @return [Types::TableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeTableOutput AWS API Documentation
    #
    class DescribeTableOutput < Struct.new(
      :table)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeTableReplicaAutoScalingInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeTableReplicaAutoScalingInput AWS API Documentation
    #
    class DescribeTableReplicaAutoScalingInput < Struct.new(
      :table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] table_auto_scaling_description
    #   Represents the auto scaling properties of the table.
    #   @return [Types::TableAutoScalingDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeTableReplicaAutoScalingOutput AWS API Documentation
    #
    class DescribeTableReplicaAutoScalingOutput < Struct.new(
      :table_auto_scaling_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass DescribeTimeToLiveInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table to be described.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeTimeToLiveInput AWS API Documentation
    #
    class DescribeTimeToLiveInput < Struct.new(
      :table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] time_to_live_description
    #   @return [Types::TimeToLiveDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DescribeTimeToLiveOutput AWS API Documentation
    #
    class DescribeTimeToLiveOutput < Struct.new(
      :time_to_live_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # There was an attempt to insert an item with the same primary key as an
    # item that already exists in the DynamoDB table.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/DuplicateItemException AWS API Documentation
    #
    class DuplicateItemException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # An endpoint information details.
    #
    # @!attribute [rw] address
    #   IP address of the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] cache_period_in_minutes
    #   Endpoint cache time to live (TTL) value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Endpoint AWS API Documentation
    #
    class Endpoint < Struct.new(
      :address,
      :cache_period_in_minutes)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass ExecuteStatementInput
    #   data as a hash:
    #
    #       {
    #         statement: "PartiQLStatement", # required
    #         parameters: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         consistent_read: false,
    #         next_token: "PartiQLNextToken",
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         limit: 1,
    #       }
    #
    # @!attribute [rw] statement
    #   The PartiQL statement representing the operation to run.
    #   @return [String]
    #
    # @!attribute [rw] parameters
    #   The parameters for the PartiQL statement, if any.
    #   @return [Array<Types::AttributeValue>]
    #
    # @!attribute [rw] consistent_read
    #   The consistency of a read operation. If set to `true`, then a
    #   strongly consistent read is used; otherwise, an eventually
    #   consistent read is used.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   Set this value to get remaining results, if `NextToken` was returned
    #   in the statement response.
    #   @return [String]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] limit
    #   The maximum number of items to evaluate (not necessarily the number
    #   of matching items). If DynamoDB processes the number of items up to
    #   the limit while processing the results, it stops the operation and
    #   returns the matching values up to that point, along with a key in
    #   `LastEvaluatedKey` to apply in a subsequent operation so you can
    #   pick up where you left off. Also, if the processed dataset size
    #   exceeds 1 MB before DynamoDB reaches this limit, it stops the
    #   operation and returns the matching values up to the limit, and a key
    #   in `LastEvaluatedKey` to apply in a subsequent operation to continue
    #   the operation.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExecuteStatementInput AWS API Documentation
    #
    class ExecuteStatementInput < Struct.new(
      :statement,
      :parameters,
      :consistent_read,
      :next_token,
      :return_consumed_capacity,
      :limit)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] items
    #   If a read operation was used, this property will contain the result
    #   of the read operation; a map of attribute names and their values.
    #   For the write operations this value will be empty.
    #   @return [Array<Hash<String,Types::AttributeValue>>]
    #
    # @!attribute [rw] next_token
    #   If the response of a read request exceeds the response payload limit
    #   DynamoDB will set this value in the response. If set, you can use
    #   that this value in the subsequent request to get the remaining
    #   results.
    #   @return [String]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by an operation. The data returned
    #   includes the total provisioned throughput consumed, along with
    #   statistics for the table and any indexes involved in the operation.
    #   `ConsumedCapacity` is only returned if the request asked for it. For
    #   more information, see [Provisioned Throughput][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
    #   @return [Types::ConsumedCapacity]
    #
    # @!attribute [rw] last_evaluated_key
    #   The primary key of the item where the operation stopped, inclusive
    #   of the previous result set. Use this value to start a new operation,
    #   excluding this value in the new request. If `LastEvaluatedKey` is
    #   empty, then the "last page" of results has been processed and
    #   there is no more data to be retrieved. If `LastEvaluatedKey` is not
    #   empty, it does not necessarily mean that there is more data in the
    #   result set. The only way to know when you have reached the end of
    #   the result set is when `LastEvaluatedKey` is empty.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExecuteStatementOutput AWS API Documentation
    #
    class ExecuteStatementOutput < Struct.new(
      :items,
      :next_token,
      :consumed_capacity,
      :last_evaluated_key)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass ExecuteTransactionInput
    #   data as a hash:
    #
    #       {
    #         transact_statements: [ # required
    #           {
    #             statement: "PartiQLStatement", # required
    #             parameters: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #         ],
    #         client_request_token: "ClientRequestToken",
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #       }
    #
    # @!attribute [rw] transact_statements
    #   The list of PartiQL statements representing the transaction to run.
    #   @return [Array<Types::ParameterizedStatement>]
    #
    # @!attribute [rw] client_request_token
    #   Set this value to get remaining results, if `NextToken` was returned
    #   in the statement response.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response. For more
    #   information, see [TransactGetItems][1] and [TransactWriteItems][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactGetItems.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExecuteTransactionInput AWS API Documentation
    #
    class ExecuteTransactionInput < Struct.new(
      :transact_statements,
      :client_request_token,
      :return_consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] responses
    #   The response to a PartiQL transaction.
    #   @return [Array<Types::ItemResponse>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the entire operation. The values of
    #   the list are ordered according to the ordering of the statements.
    #   @return [Array<Types::ConsumedCapacity>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExecuteTransactionOutput AWS API Documentation
    #
    class ExecuteTransactionOutput < Struct.new(
      :responses,
      :consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a condition to be compared with an attribute value. This
    # condition can be used with `DeleteItem`, `PutItem`, or `UpdateItem`
    # operations; if the comparison evaluates to true, the operation
    # succeeds; if not, the operation fails. You can use
    # `ExpectedAttributeValue` in one of two different ways:
    #
    # * Use `AttributeValueList` to specify one or more values to compare
    #   against an attribute. Use `ComparisonOperator` to specify how you
    #   want to perform the comparison. If the comparison evaluates to true,
    #   then the conditional operation succeeds.
    #
    # * Use `Value` to specify a value that DynamoDB will compare against an
    #   attribute. If the values match, then `ExpectedAttributeValue`
    #   evaluates to true and the conditional operation succeeds.
    #   Optionally, you can also set `Exists` to false, indicating that you
    #   *do not* expect to find the attribute value in the table. In this
    #   case, the conditional operation succeeds only if the comparison
    #   evaluates to false.
    #
    # `Value` and `Exists` are incompatible with `AttributeValueList` and
    # `ComparisonOperator`. Note that if you use both sets of parameters at
    # once, DynamoDB will return a `ValidationException` exception.
    #
    # @note When making an API call, you may pass ExpectedAttributeValue
    #   data as a hash:
    #
    #       {
    #         value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         exists: false,
    #         comparison_operator: "EQ", # accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
    #         attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #       }
    #
    # @!attribute [rw] value
    #   Represents the data for the expected attribute.
    #
    #   Each attribute value is described as a name-value pair. The name is
    #   the data type, and the value is the data itself.
    #
    #   For more information, see [Data Types][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] exists
    #   Causes DynamoDB to evaluate the value before attempting a
    #   conditional operation:
    #
    #   * If `Exists` is `true`, DynamoDB will check to see if that
    #     attribute value already exists in the table. If it is found, then
    #     the operation succeeds. If it is not found, the operation fails
    #     with a `ConditionCheckFailedException`.
    #
    #   * If `Exists` is `false`, DynamoDB assumes that the attribute value
    #     does not exist in the table. If in fact the value does not exist,
    #     then the assumption is valid and the operation succeeds. If the
    #     value is found, despite the assumption that it does not exist, the
    #     operation fails with a `ConditionCheckFailedException`.
    #
    #   The default setting for `Exists` is `true`. If you supply a `Value`
    #   all by itself, DynamoDB assumes the attribute exists: You don't
    #   have to set `Exists` to `true`, because it is implied.
    #
    #   DynamoDB returns a `ValidationException` if:
    #
    #   * `Exists` is `true` but there is no `Value` to check. (You expect a
    #     value to exist, but don't specify what that value is.)
    #
    #   * `Exists` is `false` but you also provide a `Value`. (You cannot
    #     expect an attribute to have a value, while also expecting it not
    #     to exist.)
    #   @return [Boolean]
    #
    # @!attribute [rw] comparison_operator
    #   A comparator for evaluating attributes in the `AttributeValueList`.
    #   For example, equals, greater than, less than, etc.
    #
    #   The following comparison operators are available:
    #
    #   `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS |
    #   NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN`
    #
    #   The following are descriptions of each comparison operator.
    #
    #   * `EQ`\: Equal. `EQ` is supported for all data types, including
    #     lists and maps.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, Binary, String Set, Number Set, or Binary
    #     Set. If an item contains an `AttributeValue` element of a
    #     different type than the one provided in the request, the value
    #     does not match. For example, `\{"S":"6"\}` does not equal
    #     `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not equal `\{"NS":["6",
    #     "2", "1"]\}`.
    #
    #
    #
    #   * `NE`\: Not equal. `NE` is supported for all data types, including
    #     lists and maps.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` of type
    #     String, Number, Binary, String Set, Number Set, or Binary Set. If
    #     an item contains an `AttributeValue` of a different type than the
    #     one provided in the request, the value does not match. For
    #     example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
    #     `\{"N":"6"\}` does not equal `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `LE`\: Less than or equal.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If an item
    #     contains an `AttributeValue` element of a different type than the
    #     one provided in the request, the value does not match. For
    #     example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
    #     `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `LT`\: Less than.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` of type
    #     String, Number, or Binary (not a set type). If an item contains an
    #     `AttributeValue` element of a different type than the one provided
    #     in the request, the value does not match. For example,
    #     `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also, `\{"N":"6"\}`
    #     does not compare to `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `GE`\: Greater than or equal.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If an item
    #     contains an `AttributeValue` element of a different type than the
    #     one provided in the request, the value does not match. For
    #     example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
    #     `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `GT`\: Greater than.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If an item
    #     contains an `AttributeValue` element of a different type than the
    #     one provided in the request, the value does not match. For
    #     example, `\{"S":"6"\}` does not equal `\{"N":"6"\}`. Also,
    #     `\{"N":"6"\}` does not compare to `\{"NS":["6", "2", "1"]\}`.
    #
    #
    #
    #   * `NOT_NULL`\: The attribute exists. `NOT_NULL` is supported for all
    #     data types, including lists and maps.
    #
    #     <note markdown="1"> This operator tests for the existence of an attribute, not its
    #     data type. If the data type of attribute "`a`" is null, and you
    #     evaluate it using `NOT_NULL`, the result is a Boolean `true`. This
    #     result is because the attribute "`a`" exists; its data type is
    #     not relevant to the `NOT_NULL` comparison operator.
    #
    #      </note>
    #
    #   * `NULL`\: The attribute does not exist. `NULL` is supported for all
    #     data types, including lists and maps.
    #
    #     <note markdown="1"> This operator tests for the nonexistence of an attribute, not its
    #     data type. If the data type of attribute "`a`" is null, and you
    #     evaluate it using `NULL`, the result is a Boolean `false`. This is
    #     because the attribute "`a`" exists; its data type is not
    #     relevant to the `NULL` comparison operator.
    #
    #      </note>
    #
    #   * `CONTAINS`\: Checks for a subsequence, or value in a set.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If the target
    #     attribute of the comparison is of type String, then the operator
    #     checks for a substring match. If the target attribute of the
    #     comparison is of type Binary, then the operator looks for a
    #     subsequence of the target that matches the input. If the target
    #     attribute of the comparison is a set ("`SS`", "`NS`", or
    #     "`BS`"), then the operator evaluates to true if it finds an
    #     exact match with any member of the set.
    #
    #     CONTAINS is supported for lists: When evaluating "`a CONTAINS
    #     b`", "`a`" can be a list; however, "`b`" cannot be a set, a
    #     map, or a list.
    #
    #   * `NOT_CONTAINS`\: Checks for absence of a subsequence, or absence
    #     of a value in a set.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` element
    #     of type String, Number, or Binary (not a set type). If the target
    #     attribute of the comparison is a String, then the operator checks
    #     for the absence of a substring match. If the target attribute of
    #     the comparison is Binary, then the operator checks for the absence
    #     of a subsequence of the target that matches the input. If the
    #     target attribute of the comparison is a set ("`SS`", "`NS`",
    #     or "`BS`"), then the operator evaluates to true if it *does not*
    #     find an exact match with any member of the set.
    #
    #     NOT\_CONTAINS is supported for lists: When evaluating "`a NOT
    #     CONTAINS b`", "`a`" can be a list; however, "`b`" cannot be a
    #     set, a map, or a list.
    #
    #   * `BEGINS_WITH`\: Checks for a prefix.
    #
    #     `AttributeValueList` can contain only one `AttributeValue` of type
    #     String or Binary (not a Number or a set type). The target
    #     attribute of the comparison must be of type String or Binary (not
    #     a Number or a set type).
    #
    #
    #
    #   * `IN`\: Checks for matching elements in a list.
    #
    #     `AttributeValueList` can contain one or more `AttributeValue`
    #     elements of type String, Number, or Binary. These attributes are
    #     compared against an existing attribute of an item. If any elements
    #     of the input are equal to the item attribute, the expression
    #     evaluates to true.
    #
    #   * `BETWEEN`\: Greater than or equal to the first value, and less
    #     than or equal to the second value.
    #
    #     `AttributeValueList` must contain two `AttributeValue` elements of
    #     the same type, either String, Number, or Binary (not a set type).
    #     A target attribute matches if the target value is greater than, or
    #     equal to, the first element and less than, or equal to, the second
    #     element. If an item contains an `AttributeValue` element of a
    #     different type than the one provided in the request, the value
    #     does not match. For example, `\{"S":"6"\}` does not compare to
    #     `\{"N":"6"\}`. Also, `\{"N":"6"\}` does not compare to
    #     `\{"NS":["6", "2", "1"]\}`
    #   @return [String]
    #
    # @!attribute [rw] attribute_value_list
    #   One or more values to evaluate against the supplied attribute. The
    #   number of values in the list depends on the `ComparisonOperator`
    #   being used.
    #
    #   For type Number, value comparisons are numeric.
    #
    #   String value comparisons for greater than, equals, or less than are
    #   based on ASCII character code values. For example, `a` is greater
    #   than `A`, and `a` is greater than `B`. For a list of code values,
    #   see
    #   [http://en.wikipedia.org/wiki/ASCII#ASCII\_printable\_characters][1].
    #
    #   For Binary, DynamoDB treats each byte of the binary data as unsigned
    #   when it compares binary values.
    #
    #   For information on specifying data types in JSON, see [JSON Data
    #   Format][2] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataFormat.html
    #   @return [Array<Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExpectedAttributeValue AWS API Documentation
    #
    class ExpectedAttributeValue < Struct.new(
      :value,
      :exists,
      :comparison_operator,
      :attribute_value_list)
      SENSITIVE = []
      include Aws::Structure
    end

    # There was a conflict when writing to the specified S3 bucket.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExportConflictException AWS API Documentation
    #
    class ExportConflictException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of the exported table.
    #
    # @!attribute [rw] export_arn
    #   The Amazon Resource Name (ARN) of the table export.
    #   @return [String]
    #
    # @!attribute [rw] export_status
    #   Export can be in one of the following states: IN\_PROGRESS,
    #   COMPLETED, or FAILED.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The time at which the export task began.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The time at which the export task completed.
    #   @return [Time]
    #
    # @!attribute [rw] export_manifest
    #   The name of the manifest file for the export task.
    #   @return [String]
    #
    # @!attribute [rw] table_arn
    #   The Amazon Resource Name (ARN) of the table that was exported.
    #   @return [String]
    #
    # @!attribute [rw] table_id
    #   Unique ID of the table that was exported.
    #   @return [String]
    #
    # @!attribute [rw] export_time
    #   Point in time from which table data was exported.
    #   @return [Time]
    #
    # @!attribute [rw] client_token
    #   The client token that was provided for the export task. A client
    #   token makes calls to `ExportTableToPointInTimeInput` idempotent,
    #   meaning that multiple identical calls have the same effect as one
    #   single call.
    #   @return [String]
    #
    # @!attribute [rw] s3_bucket
    #   The name of the Amazon S3 bucket containing the export.
    #   @return [String]
    #
    # @!attribute [rw] s3_bucket_owner
    #   The ID of the Amazon Web Services account that owns the bucket
    #   containing the export.
    #   @return [String]
    #
    # @!attribute [rw] s3_prefix
    #   The Amazon S3 bucket prefix used as the file name and path of the
    #   exported snapshot.
    #   @return [String]
    #
    # @!attribute [rw] s3_sse_algorithm
    #   Type of encryption used on the bucket where export data is stored.
    #   Valid values for `S3SseAlgorithm` are:
    #
    #   * `AES256` - server-side encryption with Amazon S3 managed keys
    #
    #   * `KMS` - server-side encryption with KMS managed keys
    #   @return [String]
    #
    # @!attribute [rw] s3_sse_kms_key_id
    #   The ID of the KMS managed key used to encrypt the S3 bucket where
    #   export data is stored (if applicable).
    #   @return [String]
    #
    # @!attribute [rw] failure_code
    #   Status code for the result of the failed export.
    #   @return [String]
    #
    # @!attribute [rw] failure_message
    #   Export failure reason description.
    #   @return [String]
    #
    # @!attribute [rw] export_format
    #   The format of the exported data. Valid values for `ExportFormat` are
    #   `DYNAMODB_JSON` or `ION`.
    #   @return [String]
    #
    # @!attribute [rw] billed_size_bytes
    #   The billable size of the table export.
    #   @return [Integer]
    #
    # @!attribute [rw] item_count
    #   The number of items exported.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExportDescription AWS API Documentation
    #
    class ExportDescription < Struct.new(
      :export_arn,
      :export_status,
      :start_time,
      :end_time,
      :export_manifest,
      :table_arn,
      :table_id,
      :export_time,
      :client_token,
      :s3_bucket,
      :s3_bucket_owner,
      :s3_prefix,
      :s3_sse_algorithm,
      :s3_sse_kms_key_id,
      :failure_code,
      :failure_message,
      :export_format,
      :billed_size_bytes,
      :item_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # The specified export was not found.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExportNotFoundException AWS API Documentation
    #
    class ExportNotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Summary information about an export task.
    #
    # @!attribute [rw] export_arn
    #   The Amazon Resource Name (ARN) of the export.
    #   @return [String]
    #
    # @!attribute [rw] export_status
    #   Export can be in one of the following states: IN\_PROGRESS,
    #   COMPLETED, or FAILED.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExportSummary AWS API Documentation
    #
    class ExportSummary < Struct.new(
      :export_arn,
      :export_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass ExportTableToPointInTimeInput
    #   data as a hash:
    #
    #       {
    #         table_arn: "TableArn", # required
    #         export_time: Time.now,
    #         client_token: "ClientToken",
    #         s3_bucket: "S3Bucket", # required
    #         s3_bucket_owner: "S3BucketOwner",
    #         s3_prefix: "S3Prefix",
    #         s3_sse_algorithm: "AES256", # accepts AES256, KMS
    #         s3_sse_kms_key_id: "S3SseKmsKeyId",
    #         export_format: "DYNAMODB_JSON", # accepts DYNAMODB_JSON, ION
    #       }
    #
    # @!attribute [rw] table_arn
    #   The Amazon Resource Name (ARN) associated with the table to export.
    #   @return [String]
    #
    # @!attribute [rw] export_time
    #   Time in the past from which to export table data, counted in seconds
    #   from the start of the Unix epoch. The table export will be a
    #   snapshot of the table's state at this point in time.
    #   @return [Time]
    #
    # @!attribute [rw] client_token
    #   Providing a `ClientToken` makes the call to
    #   `ExportTableToPointInTimeInput` idempotent, meaning that multiple
    #   identical calls have the same effect as one single call.
    #
    #   A client token is valid for 8 hours after the first request that
    #   uses it is completed. After 8 hours, any request with the same
    #   client token is treated as a new request. Do not resubmit the same
    #   request with the same client token for more than 8 hours, or the
    #   result might not be idempotent.
    #
    #   If you submit a request with the same client token but a change in
    #   other parameters within the 8-hour idempotency window, DynamoDB
    #   returns an `IdempotentParameterMismatch` exception.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @!attribute [rw] s3_bucket
    #   The name of the Amazon S3 bucket to export the snapshot to.
    #   @return [String]
    #
    # @!attribute [rw] s3_bucket_owner
    #   The ID of the Amazon Web Services account that owns the bucket the
    #   export will be stored in.
    #   @return [String]
    #
    # @!attribute [rw] s3_prefix
    #   The Amazon S3 bucket prefix to use as the file name and path of the
    #   exported snapshot.
    #   @return [String]
    #
    # @!attribute [rw] s3_sse_algorithm
    #   Type of encryption used on the bucket where export data will be
    #   stored. Valid values for `S3SseAlgorithm` are:
    #
    #   * `AES256` - server-side encryption with Amazon S3 managed keys
    #
    #   * `KMS` - server-side encryption with KMS managed keys
    #   @return [String]
    #
    # @!attribute [rw] s3_sse_kms_key_id
    #   The ID of the KMS managed key used to encrypt the S3 bucket where
    #   export data will be stored (if applicable).
    #   @return [String]
    #
    # @!attribute [rw] export_format
    #   The format for the exported data. Valid values for `ExportFormat`
    #   are `DYNAMODB_JSON` or `ION`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExportTableToPointInTimeInput AWS API Documentation
    #
    class ExportTableToPointInTimeInput < Struct.new(
      :table_arn,
      :export_time,
      :client_token,
      :s3_bucket,
      :s3_bucket_owner,
      :s3_prefix,
      :s3_sse_algorithm,
      :s3_sse_kms_key_id,
      :export_format)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] export_description
    #   Contains a description of the table export.
    #   @return [Types::ExportDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ExportTableToPointInTimeOutput AWS API Documentation
    #
    class ExportTableToPointInTimeOutput < Struct.new(
      :export_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a failure a contributor insights operation.
    #
    # @!attribute [rw] exception_name
    #   Exception name.
    #   @return [String]
    #
    # @!attribute [rw] exception_description
    #   Description of the failure.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/FailureException AWS API Documentation
    #
    class FailureException < Struct.new(
      :exception_name,
      :exception_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies an item and related attribute values to retrieve in a
    # `TransactGetItem` object.
    #
    # @note When making an API call, you may pass Get
    #   data as a hash:
    #
    #       {
    #         key: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         table_name: "TableName", # required
    #         projection_expression: "ProjectionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #       }
    #
    # @!attribute [rw] key
    #   A map of attribute names to `AttributeValue` objects that specifies
    #   the primary key of the item to retrieve.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] table_name
    #   The name of the table from which to retrieve the specified item.
    #   @return [String]
    #
    # @!attribute [rw] projection_expression
    #   A string that identifies one or more attributes of the specified
    #   item to retrieve from the table. The attributes in the expression
    #   must be separated by commas. If no attribute names are specified,
    #   then all attributes of the specified item are returned. If any of
    #   the requested attributes are not found, they do not appear in the
    #   result.
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in the
    #   ProjectionExpression parameter.
    #   @return [Hash<String,String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Get AWS API Documentation
    #
    class Get < Struct.new(
      :key,
      :table_name,
      :projection_expression,
      :expression_attribute_names)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `GetItem` operation.
    #
    # @note When making an API call, you may pass GetItemInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         key: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         attributes_to_get: ["AttributeName"],
    #         consistent_read: false,
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         projection_expression: "ProjectionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table containing the requested item.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   A map of attribute names to `AttributeValue` objects, representing
    #   the primary key of the item to retrieve.
    #
    #   For the primary key, you must provide all of the attributes. For
    #   example, with a simple primary key, you only need to provide a value
    #   for the partition key. For a composite primary key, you must provide
    #   values for both the partition key and the sort key.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] attributes_to_get
    #   This is a legacy parameter. Use `ProjectionExpression` instead. For
    #   more information, see [AttributesToGet][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.AttributesToGet.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] consistent_read
    #   Determines the read consistency model: If set to `true`, then the
    #   operation uses strongly consistent reads; otherwise, the operation
    #   uses eventually consistent reads.
    #   @return [Boolean]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] projection_expression
    #   A string that identifies one or more attributes to retrieve from the
    #   table. These attributes can include scalars, sets, or elements of a
    #   JSON document. The attributes in the expression must be separated by
    #   commas.
    #
    #   If no attribute names are specified, then all attributes are
    #   returned. If any of the requested attributes are not found, they do
    #   not appear in the result.
    #
    #   For more information, see [Specifying Item Attributes][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression. The following are some use cases for using
    #   `ExpressionAttributeNames`\:
    #
    #   * To access an attribute whose name conflicts with a DynamoDB
    #     reserved word.
    #
    #   * To create a placeholder for repeating occurrences of an attribute
    #     name in an expression.
    #
    #   * To prevent special characters in an attribute name from being
    #     misinterpreted in an expression.
    #
    #   Use the **#** character in an expression to dereference an attribute
    #   name. For example, consider the following attribute name:
    #
    #   * `Percentile`
    #
    #   ^
    #
    #   The name of this attribute conflicts with a reserved word, so it
    #   cannot be used directly in an expression. (For the complete list of
    #   reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
    #   Developer Guide*). To work around this, you could specify the
    #   following for `ExpressionAttributeNames`\:
    #
    #   * `\{"#P":"Percentile"\}`
    #
    #   ^
    #
    #   You could then use this substitution in an expression, as in this
    #   example:
    #
    #   * `#P = :val`
    #
    #   ^
    #
    #   <note markdown="1"> Tokens that begin with the **\:** character are *expression
    #   attribute values*, which are placeholders for the actual value at
    #   runtime.
    #
    #    </note>
    #
    #   For more information on expression attribute names, see [Specifying
    #   Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [Hash<String,String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GetItemInput AWS API Documentation
    #
    class GetItemInput < Struct.new(
      :table_name,
      :key,
      :attributes_to_get,
      :consistent_read,
      :return_consumed_capacity,
      :projection_expression,
      :expression_attribute_names)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `GetItem` operation.
    #
    # @!attribute [rw] item
    #   A map of attribute names to `AttributeValue` objects, as specified
    #   by `ProjectionExpression`.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the `GetItem` operation. The data
    #   returned includes the total provisioned throughput consumed, along
    #   with statistics for the table and any indexes involved in the
    #   operation. `ConsumedCapacity` is only returned if the
    #   `ReturnConsumedCapacity` parameter was specified. For more
    #   information, see [Read/Write Capacity Mode][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
    #   @return [Types::ConsumedCapacity]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GetItemOutput AWS API Documentation
    #
    class GetItemOutput < Struct.new(
      :item,
      :consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a global secondary index.
    #
    # @note When making an API call, you may pass GlobalSecondaryIndex
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName", # required
    #         key_schema: [ # required
    #           {
    #             attribute_name: "KeySchemaAttributeName", # required
    #             key_type: "HASH", # required, accepts HASH, RANGE
    #           },
    #         ],
    #         projection: { # required
    #           projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #           non_key_attributes: ["NonKeyAttributeName"],
    #         },
    #         provisioned_throughput: {
    #           read_capacity_units: 1, # required
    #           write_capacity_units: 1, # required
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index. The name must be unique
    #   among all other indexes on this table.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   The complete key schema for a global secondary index, which consists
    #   of one or more pairs of attribute names and key types:
    #
    #   * `HASH` - partition key
    #
    #   * `RANGE` - sort key
    #
    #   <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
    #   The term "hash attribute" derives from DynamoDB's usage of an
    #   internal hash function to evenly distribute data items across
    #   partitions, based on their partition key values.
    #
    #    The sort key of an item is also known as its *range attribute*. The
    #   term "range attribute" derives from the way DynamoDB stores items
    #   with the same partition key physically close together, in sorted
    #   order by the sort key value.
    #
    #    </note>
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] projection
    #   Represents attributes that are copied (projected) from the table
    #   into the global secondary index. These are in addition to the
    #   primary key attributes and index key attributes, which are
    #   automatically projected.
    #   @return [Types::Projection]
    #
    # @!attribute [rw] provisioned_throughput
    #   Represents the provisioned throughput settings for the specified
    #   global secondary index.
    #
    #   For current minimum and maximum provisioned throughput values, see
    #   [Service, Account, and Table Quotas][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
    #   @return [Types::ProvisionedThroughput]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalSecondaryIndex AWS API Documentation
    #
    class GlobalSecondaryIndex < Struct.new(
      :index_name,
      :key_schema,
      :projection,
      :provisioned_throughput)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling settings of a global secondary index for a
    # global table that will be modified.
    #
    # @note When making an API call, you may pass GlobalSecondaryIndexAutoScalingUpdate
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName",
    #         provisioned_write_capacity_auto_scaling_update: {
    #           minimum_units: 1,
    #           maximum_units: 1,
    #           auto_scaling_disabled: false,
    #           auto_scaling_role_arn: "AutoScalingRoleArn",
    #           scaling_policy_update: {
    #             policy_name: "AutoScalingPolicyName",
    #             target_tracking_scaling_policy_configuration: { # required
    #               disable_scale_in: false,
    #               scale_in_cooldown: 1,
    #               scale_out_cooldown: 1,
    #               target_value: 1.0, # required
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_write_capacity_auto_scaling_update
    #   Represents the auto scaling settings to be modified for a global
    #   table or global secondary index.
    #   @return [Types::AutoScalingSettingsUpdate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalSecondaryIndexAutoScalingUpdate AWS API Documentation
    #
    class GlobalSecondaryIndexAutoScalingUpdate < Struct.new(
      :index_name,
      :provisioned_write_capacity_auto_scaling_update)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a global secondary index.
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   The complete key schema for a global secondary index, which consists
    #   of one or more pairs of attribute names and key types:
    #
    #   * `HASH` - partition key
    #
    #   * `RANGE` - sort key
    #
    #   <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
    #   The term "hash attribute" derives from DynamoDB's usage of an
    #   internal hash function to evenly distribute data items across
    #   partitions, based on their partition key values.
    #
    #    The sort key of an item is also known as its *range attribute*. The
    #   term "range attribute" derives from the way DynamoDB stores items
    #   with the same partition key physically close together, in sorted
    #   order by the sort key value.
    #
    #    </note>
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] projection
    #   Represents attributes that are copied (projected) from the table
    #   into the global secondary index. These are in addition to the
    #   primary key attributes and index key attributes, which are
    #   automatically projected.
    #   @return [Types::Projection]
    #
    # @!attribute [rw] index_status
    #   The current state of the global secondary index:
    #
    #   * `CREATING` - The index is being created.
    #
    #   * `UPDATING` - The index is being updated.
    #
    #   * `DELETING` - The index is being deleted.
    #
    #   * `ACTIVE` - The index is ready for use.
    #   @return [String]
    #
    # @!attribute [rw] backfilling
    #   Indicates whether the index is currently backfilling. *Backfilling*
    #   is the process of reading items from the table and determining
    #   whether they can be added to the index. (Not all items will qualify:
    #   For example, a partition key cannot have any duplicate values.) If
    #   an item can be added to the index, DynamoDB will do so. After all
    #   items have been processed, the backfilling operation is complete and
    #   `Backfilling` is false.
    #
    #   You can delete an index that is being created during the
    #   `Backfilling` phase when `IndexStatus` is set to CREATING and
    #   `Backfilling` is true. You can't delete the index that is being
    #   created when `IndexStatus` is set to CREATING and `Backfilling` is
    #   false.
    #
    #   <note markdown="1"> For indexes that were created during a `CreateTable` operation, the
    #   `Backfilling` attribute does not appear in the `DescribeTable`
    #   output.
    #
    #    </note>
    #   @return [Boolean]
    #
    # @!attribute [rw] provisioned_throughput
    #   Represents the provisioned throughput settings for the specified
    #   global secondary index.
    #
    #   For current minimum and maximum provisioned throughput values, see
    #   [Service, Account, and Table Quotas][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
    #   @return [Types::ProvisionedThroughputDescription]
    #
    # @!attribute [rw] index_size_bytes
    #   The total size of the specified index, in bytes. DynamoDB updates
    #   this value approximately every six hours. Recent changes might not
    #   be reflected in this value.
    #   @return [Integer]
    #
    # @!attribute [rw] item_count
    #   The number of items in the specified index. DynamoDB updates this
    #   value approximately every six hours. Recent changes might not be
    #   reflected in this value.
    #   @return [Integer]
    #
    # @!attribute [rw] index_arn
    #   The Amazon Resource Name (ARN) that uniquely identifies the index.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalSecondaryIndexDescription AWS API Documentation
    #
    class GlobalSecondaryIndexDescription < Struct.new(
      :index_name,
      :key_schema,
      :projection,
      :index_status,
      :backfilling,
      :provisioned_throughput,
      :index_size_bytes,
      :item_count,
      :index_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a global secondary index for the table
    # when the backup was created.
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   The complete key schema for a global secondary index, which consists
    #   of one or more pairs of attribute names and key types:
    #
    #   * `HASH` - partition key
    #
    #   * `RANGE` - sort key
    #
    #   <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
    #   The term "hash attribute" derives from DynamoDB's usage of an
    #   internal hash function to evenly distribute data items across
    #   partitions, based on their partition key values.
    #
    #    The sort key of an item is also known as its *range attribute*. The
    #   term "range attribute" derives from the way DynamoDB stores items
    #   with the same partition key physically close together, in sorted
    #   order by the sort key value.
    #
    #    </note>
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] projection
    #   Represents attributes that are copied (projected) from the table
    #   into the global secondary index. These are in addition to the
    #   primary key attributes and index key attributes, which are
    #   automatically projected.
    #   @return [Types::Projection]
    #
    # @!attribute [rw] provisioned_throughput
    #   Represents the provisioned throughput settings for the specified
    #   global secondary index.
    #   @return [Types::ProvisionedThroughput]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalSecondaryIndexInfo AWS API Documentation
    #
    class GlobalSecondaryIndexInfo < Struct.new(
      :index_name,
      :key_schema,
      :projection,
      :provisioned_throughput)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents one of the following:
    #
    # * A new global secondary index to be added to an existing table.
    #
    # * New provisioned throughput parameters for an existing global
    #   secondary index.
    #
    # * An existing global secondary index to be removed from an existing
    #   table.
    #
    # @note When making an API call, you may pass GlobalSecondaryIndexUpdate
    #   data as a hash:
    #
    #       {
    #         update: {
    #           index_name: "IndexName", # required
    #           provisioned_throughput: { # required
    #             read_capacity_units: 1, # required
    #             write_capacity_units: 1, # required
    #           },
    #         },
    #         create: {
    #           index_name: "IndexName", # required
    #           key_schema: [ # required
    #             {
    #               attribute_name: "KeySchemaAttributeName", # required
    #               key_type: "HASH", # required, accepts HASH, RANGE
    #             },
    #           ],
    #           projection: { # required
    #             projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #             non_key_attributes: ["NonKeyAttributeName"],
    #           },
    #           provisioned_throughput: {
    #             read_capacity_units: 1, # required
    #             write_capacity_units: 1, # required
    #           },
    #         },
    #         delete: {
    #           index_name: "IndexName", # required
    #         },
    #       }
    #
    # @!attribute [rw] update
    #   The name of an existing global secondary index, along with new
    #   provisioned throughput settings to be applied to that index.
    #   @return [Types::UpdateGlobalSecondaryIndexAction]
    #
    # @!attribute [rw] create
    #   The parameters required for creating a global secondary index on an
    #   existing table:
    #
    #   * `IndexName `
    #
    #   * `KeySchema `
    #
    #   * `AttributeDefinitions `
    #
    #   * `Projection `
    #
    #   * `ProvisionedThroughput `
    #   @return [Types::CreateGlobalSecondaryIndexAction]
    #
    # @!attribute [rw] delete
    #   The name of an existing global secondary index to be removed.
    #   @return [Types::DeleteGlobalSecondaryIndexAction]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalSecondaryIndexUpdate AWS API Documentation
    #
    class GlobalSecondaryIndexUpdate < Struct.new(
      :update,
      :create,
      :delete)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a global table.
    #
    # @!attribute [rw] global_table_name
    #   The global table name.
    #   @return [String]
    #
    # @!attribute [rw] replication_group
    #   The Regions where the global table has replicas.
    #   @return [Array<Types::Replica>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalTable AWS API Documentation
    #
    class GlobalTable < Struct.new(
      :global_table_name,
      :replication_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # The specified global table already exists.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalTableAlreadyExistsException AWS API Documentation
    #
    class GlobalTableAlreadyExistsException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains details about the global table.
    #
    # @!attribute [rw] replication_group
    #   The Regions where the global table has replicas.
    #   @return [Array<Types::ReplicaDescription>]
    #
    # @!attribute [rw] global_table_arn
    #   The unique identifier of the global table.
    #   @return [String]
    #
    # @!attribute [rw] creation_date_time
    #   The creation time of the global table.
    #   @return [Time]
    #
    # @!attribute [rw] global_table_status
    #   The current state of the global table:
    #
    #   * `CREATING` - The global table is being created.
    #
    #   * `UPDATING` - The global table is being updated.
    #
    #   * `DELETING` - The global table is being deleted.
    #
    #   * `ACTIVE` - The global table is ready for use.
    #   @return [String]
    #
    # @!attribute [rw] global_table_name
    #   The global table name.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalTableDescription AWS API Documentation
    #
    class GlobalTableDescription < Struct.new(
      :replication_group,
      :global_table_arn,
      :creation_date_time,
      :global_table_status,
      :global_table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the settings of a global secondary index for a global table
    # that will be modified.
    #
    # @note When making an API call, you may pass GlobalTableGlobalSecondaryIndexSettingsUpdate
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName", # required
    #         provisioned_write_capacity_units: 1,
    #         provisioned_write_capacity_auto_scaling_settings_update: {
    #           minimum_units: 1,
    #           maximum_units: 1,
    #           auto_scaling_disabled: false,
    #           auto_scaling_role_arn: "AutoScalingRoleArn",
    #           scaling_policy_update: {
    #             policy_name: "AutoScalingPolicyName",
    #             target_tracking_scaling_policy_configuration: { # required
    #               disable_scale_in: false,
    #               scale_in_cooldown: 1,
    #               scale_out_cooldown: 1,
    #               target_value: 1.0, # required
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index. The name must be unique
    #   among all other indexes on this table.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_write_capacity_units
    #   The maximum number of writes consumed per second before DynamoDB
    #   returns a `ThrottlingException.`
    #   @return [Integer]
    #
    # @!attribute [rw] provisioned_write_capacity_auto_scaling_settings_update
    #   Auto scaling settings for managing a global secondary index's write
    #   capacity units.
    #   @return [Types::AutoScalingSettingsUpdate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalTableGlobalSecondaryIndexSettingsUpdate AWS API Documentation
    #
    class GlobalTableGlobalSecondaryIndexSettingsUpdate < Struct.new(
      :index_name,
      :provisioned_write_capacity_units,
      :provisioned_write_capacity_auto_scaling_settings_update)
      SENSITIVE = []
      include Aws::Structure
    end

    # The specified global table does not exist.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/GlobalTableNotFoundException AWS API Documentation
    #
    class GlobalTableNotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # DynamoDB rejected the request because you retried a request with a
    # different payload but with an idempotent token that was already used.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/IdempotentParameterMismatchException AWS API Documentation
    #
    class IdempotentParameterMismatchException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The operation tried to access a nonexistent index.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/IndexNotFoundException AWS API Documentation
    #
    class IndexNotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # An error occurred on the server side.
    #
    # @!attribute [rw] message
    #   The server encountered an internal error trying to fulfill the
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/InternalServerError AWS API Documentation
    #
    class InternalServerError < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The specified `ExportTime` is outside of the point in time recovery
    # window.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/InvalidExportTimeException AWS API Documentation
    #
    class InvalidExportTimeException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # An invalid restore time was specified. RestoreDateTime must be between
    # EarliestRestorableDateTime and LatestRestorableDateTime.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/InvalidRestoreTimeException AWS API Documentation
    #
    class InvalidRestoreTimeException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about item collections, if any, that were affected by the
    # operation. `ItemCollectionMetrics` is only returned if the request
    # asked for it. If the table does not have any local secondary indexes,
    # this information is not returned in the response.
    #
    # @!attribute [rw] item_collection_key
    #   The partition key value of the item collection. This value is the
    #   same as the partition key value of the item.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] size_estimate_range_gb
    #   An estimate of item collection size, in gigabytes. This value is a
    #   two-element array containing a lower bound and an upper bound for
    #   the estimate. The estimate includes the size of all the items in the
    #   table, plus the size of all attributes projected into all of the
    #   local secondary indexes on that table. Use this estimate to measure
    #   whether a local secondary index is approaching its size limit.
    #
    #   The estimate is subject to change over time; therefore, do not rely
    #   on the precision or accuracy of the estimate.
    #   @return [Array<Float>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ItemCollectionMetrics AWS API Documentation
    #
    class ItemCollectionMetrics < Struct.new(
      :item_collection_key,
      :size_estimate_range_gb)
      SENSITIVE = []
      include Aws::Structure
    end

    # An item collection is too large. This exception is only returned for
    # tables that have one or more local secondary indexes.
    #
    # @!attribute [rw] message
    #   The total size of an item collection has exceeded the maximum limit
    #   of 10 gigabytes.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ItemCollectionSizeLimitExceededException AWS API Documentation
    #
    class ItemCollectionSizeLimitExceededException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Details for the requested item.
    #
    # @!attribute [rw] item
    #   Map of attribute data consisting of the data type and attribute
    #   value.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ItemResponse AWS API Documentation
    #
    class ItemResponse < Struct.new(
      :item)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents *a single element* of a key schema. A key schema specifies
    # the attributes that make up the primary key of a table, or the key
    # attributes of an index.
    #
    # A `KeySchemaElement` represents exactly one attribute of the primary
    # key. For example, a simple primary key would be represented by one
    # `KeySchemaElement` (for the partition key). A composite primary key
    # would require one `KeySchemaElement` for the partition key, and
    # another `KeySchemaElement` for the sort key.
    #
    # A `KeySchemaElement` must be a scalar, top-level attribute (not a
    # nested attribute). The data type must be one of String, Number, or
    # Binary. The attribute cannot be nested within a List or a Map.
    #
    # @note When making an API call, you may pass KeySchemaElement
    #   data as a hash:
    #
    #       {
    #         attribute_name: "KeySchemaAttributeName", # required
    #         key_type: "HASH", # required, accepts HASH, RANGE
    #       }
    #
    # @!attribute [rw] attribute_name
    #   The name of a key attribute.
    #   @return [String]
    #
    # @!attribute [rw] key_type
    #   The role that this key attribute will assume:
    #
    #   * `HASH` - partition key
    #
    #   * `RANGE` - sort key
    #
    #   <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
    #   The term "hash attribute" derives from DynamoDB's usage of an
    #   internal hash function to evenly distribute data items across
    #   partitions, based on their partition key values.
    #
    #    The sort key of an item is also known as its *range attribute*. The
    #   term "range attribute" derives from the way DynamoDB stores items
    #   with the same partition key physically close together, in sorted
    #   order by the sort key value.
    #
    #    </note>
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/KeySchemaElement AWS API Documentation
    #
    class KeySchemaElement < Struct.new(
      :attribute_name,
      :key_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a set of primary keys and, for each key, the attributes to
    # retrieve from the table.
    #
    # For each primary key, you must provide *all* of the key attributes.
    # For example, with a simple primary key, you only need to provide the
    # partition key. For a composite primary key, you must provide *both*
    # the partition key and the sort key.
    #
    # @note When making an API call, you may pass KeysAndAttributes
    #   data as a hash:
    #
    #       {
    #         keys: [ # required
    #           {
    #             "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #         ],
    #         attributes_to_get: ["AttributeName"],
    #         consistent_read: false,
    #         projection_expression: "ProjectionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #       }
    #
    # @!attribute [rw] keys
    #   The primary key attribute values that define the items and the
    #   attributes associated with the items.
    #   @return [Array<Hash<String,Types::AttributeValue>>]
    #
    # @!attribute [rw] attributes_to_get
    #   This is a legacy parameter. Use `ProjectionExpression` instead. For
    #   more information, see [Legacy Conditional Parameters][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] consistent_read
    #   The consistency of a read operation. If set to `true`, then a
    #   strongly consistent read is used; otherwise, an eventually
    #   consistent read is used.
    #   @return [Boolean]
    #
    # @!attribute [rw] projection_expression
    #   A string that identifies one or more attributes to retrieve from the
    #   table. These attributes can include scalars, sets, or elements of a
    #   JSON document. The attributes in the `ProjectionExpression` must be
    #   separated by commas.
    #
    #   If no attribute names are specified, then all attributes will be
    #   returned. If any of the requested attributes are not found, they
    #   will not appear in the result.
    #
    #   For more information, see [Accessing Item Attributes][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression. The following are some use cases for using
    #   `ExpressionAttributeNames`\:
    #
    #   * To access an attribute whose name conflicts with a DynamoDB
    #     reserved word.
    #
    #   * To create a placeholder for repeating occurrences of an attribute
    #     name in an expression.
    #
    #   * To prevent special characters in an attribute name from being
    #     misinterpreted in an expression.
    #
    #   Use the **#** character in an expression to dereference an attribute
    #   name. For example, consider the following attribute name:
    #
    #   * `Percentile`
    #
    #   ^
    #
    #   The name of this attribute conflicts with a reserved word, so it
    #   cannot be used directly in an expression. (For the complete list of
    #   reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
    #   Developer Guide*). To work around this, you could specify the
    #   following for `ExpressionAttributeNames`\:
    #
    #   * `\{"#P":"Percentile"\}`
    #
    #   ^
    #
    #   You could then use this substitution in an expression, as in this
    #   example:
    #
    #   * `#P = :val`
    #
    #   ^
    #
    #   <note markdown="1"> Tokens that begin with the **\:** character are *expression
    #   attribute values*, which are placeholders for the actual value at
    #   runtime.
    #
    #    </note>
    #
    #   For more information on expression attribute names, see [Accessing
    #   Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [Hash<String,String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/KeysAndAttributes AWS API Documentation
    #
    class KeysAndAttributes < Struct.new(
      :keys,
      :attributes_to_get,
      :consistent_read,
      :projection_expression,
      :expression_attribute_names)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Kinesis data stream destination.
    #
    # @!attribute [rw] stream_arn
    #   The ARN for a specific Kinesis data stream.
    #   @return [String]
    #
    # @!attribute [rw] destination_status
    #   The current status of replication.
    #   @return [String]
    #
    # @!attribute [rw] destination_status_description
    #   The human-readable string that corresponds to the replica status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/KinesisDataStreamDestination AWS API Documentation
    #
    class KinesisDataStreamDestination < Struct.new(
      :stream_arn,
      :destination_status,
      :destination_status_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass KinesisStreamingDestinationInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         stream_arn: "StreamArn", # required
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the DynamoDB table.
    #   @return [String]
    #
    # @!attribute [rw] stream_arn
    #   The ARN for a Kinesis data stream.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/KinesisStreamingDestinationInput AWS API Documentation
    #
    class KinesisStreamingDestinationInput < Struct.new(
      :table_name,
      :stream_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] table_name
    #   The name of the table being modified.
    #   @return [String]
    #
    # @!attribute [rw] stream_arn
    #   The ARN for the specific Kinesis data stream.
    #   @return [String]
    #
    # @!attribute [rw] destination_status
    #   The current status of the replication.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/KinesisStreamingDestinationOutput AWS API Documentation
    #
    class KinesisStreamingDestinationOutput < Struct.new(
      :table_name,
      :stream_arn,
      :destination_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # There is no limit to the number of daily on-demand backups that can be
    # taken.
    #
    # Up to 500 simultaneous table operations are allowed per account. These
    # operations include `CreateTable`, `UpdateTable`,
    # `DeleteTable`,`UpdateTimeToLive`, `RestoreTableFromBackup`, and
    # `RestoreTableToPointInTime`.
    #
    # The only exception is when you are creating a table with one or more
    # secondary indexes. You can have up to 250 such requests running at a
    # time; however, if the table or index specifications are complex,
    # DynamoDB might temporarily reduce the number of concurrent operations.
    #
    # There is a soft account quota of 2,500 tables.
    #
    # @!attribute [rw] message
    #   Too many operations for a given subscriber.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/LimitExceededException AWS API Documentation
    #
    class LimitExceededException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListBackupsInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName",
    #         limit: 1,
    #         time_range_lower_bound: Time.now,
    #         time_range_upper_bound: Time.now,
    #         exclusive_start_backup_arn: "BackupArn",
    #         backup_type: "USER", # accepts USER, SYSTEM, AWS_BACKUP, ALL
    #       }
    #
    # @!attribute [rw] table_name
    #   The backups from the table specified by `TableName` are listed.
    #   @return [String]
    #
    # @!attribute [rw] limit
    #   Maximum number of backups to return at once.
    #   @return [Integer]
    #
    # @!attribute [rw] time_range_lower_bound
    #   Only backups created after this time are listed.
    #   `TimeRangeLowerBound` is inclusive.
    #   @return [Time]
    #
    # @!attribute [rw] time_range_upper_bound
    #   Only backups created before this time are listed.
    #   `TimeRangeUpperBound` is exclusive.
    #   @return [Time]
    #
    # @!attribute [rw] exclusive_start_backup_arn
    #   `LastEvaluatedBackupArn` is the Amazon Resource Name (ARN) of the
    #   backup last evaluated when the current page of results was returned,
    #   inclusive of the current page of results. This value may be
    #   specified as the `ExclusiveStartBackupArn` of a new `ListBackups`
    #   operation in order to fetch the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] backup_type
    #   The backups from the table specified by `BackupType` are listed.
    #
    #   Where `BackupType` can be:
    #
    #   * `USER` - On-demand backup created by you. (The default setting if
    #     no other backup types are specified.)
    #
    #   * `SYSTEM` - On-demand backup automatically created by DynamoDB.
    #
    #   * `ALL` - All types of on-demand backups (USER and SYSTEM).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListBackupsInput AWS API Documentation
    #
    class ListBackupsInput < Struct.new(
      :table_name,
      :limit,
      :time_range_lower_bound,
      :time_range_upper_bound,
      :exclusive_start_backup_arn,
      :backup_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] backup_summaries
    #   List of `BackupSummary` objects.
    #   @return [Array<Types::BackupSummary>]
    #
    # @!attribute [rw] last_evaluated_backup_arn
    #   The ARN of the backup last evaluated when the current page of
    #   results was returned, inclusive of the current page of results. This
    #   value may be specified as the `ExclusiveStartBackupArn` of a new
    #   `ListBackups` operation in order to fetch the next page of results.
    #
    #   If `LastEvaluatedBackupArn` is empty, then the last page of results
    #   has been processed and there are no more results to be retrieved.
    #
    #   If `LastEvaluatedBackupArn` is not empty, this may or may not
    #   indicate that there is more data to be returned. All results are
    #   guaranteed to have been returned if and only if no value for
    #   `LastEvaluatedBackupArn` is returned.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListBackupsOutput AWS API Documentation
    #
    class ListBackupsOutput < Struct.new(
      :backup_summaries,
      :last_evaluated_backup_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListContributorInsightsInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName",
    #         next_token: "NextTokenString",
    #         max_results: 1,
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   A token to for the desired page, if there is one.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   Maximum number of results to return per page.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListContributorInsightsInput AWS API Documentation
    #
    class ListContributorInsightsInput < Struct.new(
      :table_name,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] contributor_insights_summaries
    #   A list of ContributorInsightsSummary.
    #   @return [Array<Types::ContributorInsightsSummary>]
    #
    # @!attribute [rw] next_token
    #   A token to go to the next page if there is one.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListContributorInsightsOutput AWS API Documentation
    #
    class ListContributorInsightsOutput < Struct.new(
      :contributor_insights_summaries,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListExportsInput
    #   data as a hash:
    #
    #       {
    #         table_arn: "TableArn",
    #         max_results: 1,
    #         next_token: "ExportNextToken",
    #       }
    #
    # @!attribute [rw] table_arn
    #   The Amazon Resource Name (ARN) associated with the exported table.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   Maximum number of results to return per page.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   An optional string that, if supplied, must be copied from the output
    #   of a previous call to `ListExports`. When provided in this manner,
    #   the API fetches the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListExportsInput AWS API Documentation
    #
    class ListExportsInput < Struct.new(
      :table_arn,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] export_summaries
    #   A list of `ExportSummary` objects.
    #   @return [Array<Types::ExportSummary>]
    #
    # @!attribute [rw] next_token
    #   If this value is returned, there are additional results to be
    #   displayed. To retrieve them, call `ListExports` again, with
    #   `NextToken` set to this value.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListExportsOutput AWS API Documentation
    #
    class ListExportsOutput < Struct.new(
      :export_summaries,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListGlobalTablesInput
    #   data as a hash:
    #
    #       {
    #         exclusive_start_global_table_name: "TableName",
    #         limit: 1,
    #         region_name: "RegionName",
    #       }
    #
    # @!attribute [rw] exclusive_start_global_table_name
    #   The first global table name that this operation will evaluate.
    #   @return [String]
    #
    # @!attribute [rw] limit
    #   The maximum number of table names to return, if the parameter is not
    #   specified DynamoDB defaults to 100.
    #
    #   If the number of global tables DynamoDB finds reaches this limit, it
    #   stops the operation and returns the table names collected up to that
    #   point, with a table name in the `LastEvaluatedGlobalTableName` to
    #   apply in a subsequent operation to the
    #   `ExclusiveStartGlobalTableName` parameter.
    #   @return [Integer]
    #
    # @!attribute [rw] region_name
    #   Lists the global tables in a specific Region.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListGlobalTablesInput AWS API Documentation
    #
    class ListGlobalTablesInput < Struct.new(
      :exclusive_start_global_table_name,
      :limit,
      :region_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] global_tables
    #   List of global table names.
    #   @return [Array<Types::GlobalTable>]
    #
    # @!attribute [rw] last_evaluated_global_table_name
    #   Last evaluated global table name.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListGlobalTablesOutput AWS API Documentation
    #
    class ListGlobalTablesOutput < Struct.new(
      :global_tables,
      :last_evaluated_global_table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `ListTables` operation.
    #
    # @note When making an API call, you may pass ListTablesInput
    #   data as a hash:
    #
    #       {
    #         exclusive_start_table_name: "TableName",
    #         limit: 1,
    #       }
    #
    # @!attribute [rw] exclusive_start_table_name
    #   The first table name that this operation will evaluate. Use the
    #   value that was returned for `LastEvaluatedTableName` in a previous
    #   operation, so that you can obtain the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] limit
    #   A maximum number of table names to return. If this parameter is not
    #   specified, the limit is 100.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListTablesInput AWS API Documentation
    #
    class ListTablesInput < Struct.new(
      :exclusive_start_table_name,
      :limit)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `ListTables` operation.
    #
    # @!attribute [rw] table_names
    #   The names of the tables associated with the current account at the
    #   current endpoint. The maximum size of this array is 100.
    #
    #   If `LastEvaluatedTableName` also appears in the output, you can use
    #   this value as the `ExclusiveStartTableName` parameter in a
    #   subsequent `ListTables` request and obtain the next page of results.
    #   @return [Array<String>]
    #
    # @!attribute [rw] last_evaluated_table_name
    #   The name of the last table in the current page of results. Use this
    #   value as the `ExclusiveStartTableName` in a new request to obtain
    #   the next page of results, until all the table names are returned.
    #
    #   If you do not receive a `LastEvaluatedTableName` value in the
    #   response, this means that there are no more table names to be
    #   retrieved.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListTablesOutput AWS API Documentation
    #
    class ListTablesOutput < Struct.new(
      :table_names,
      :last_evaluated_table_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListTagsOfResourceInput
    #   data as a hash:
    #
    #       {
    #         resource_arn: "ResourceArnString", # required
    #         next_token: "NextTokenString",
    #       }
    #
    # @!attribute [rw] resource_arn
    #   The Amazon DynamoDB resource with tags to be listed. This value is
    #   an Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An optional string that, if supplied, must be copied from the output
    #   of a previous call to ListTagOfResource. When provided in this
    #   manner, this API fetches the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListTagsOfResourceInput AWS API Documentation
    #
    class ListTagsOfResourceInput < Struct.new(
      :resource_arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tags
    #   The tags currently associated with the Amazon DynamoDB resource.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] next_token
    #   If this value is returned, there are additional results to be
    #   displayed. To retrieve them, call ListTagsOfResource again, with
    #   NextToken set to this value.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ListTagsOfResourceOutput AWS API Documentation
    #
    class ListTagsOfResourceOutput < Struct.new(
      :tags,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a local secondary index.
    #
    # @note When making an API call, you may pass LocalSecondaryIndex
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName", # required
    #         key_schema: [ # required
    #           {
    #             attribute_name: "KeySchemaAttributeName", # required
    #             key_type: "HASH", # required, accepts HASH, RANGE
    #           },
    #         ],
    #         projection: { # required
    #           projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #           non_key_attributes: ["NonKeyAttributeName"],
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the local secondary index. The name must be unique among
    #   all other indexes on this table.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   The complete key schema for the local secondary index, consisting of
    #   one or more pairs of attribute names and key types:
    #
    #   * `HASH` - partition key
    #
    #   * `RANGE` - sort key
    #
    #   <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
    #   The term "hash attribute" derives from DynamoDB's usage of an
    #   internal hash function to evenly distribute data items across
    #   partitions, based on their partition key values.
    #
    #    The sort key of an item is also known as its *range attribute*. The
    #   term "range attribute" derives from the way DynamoDB stores items
    #   with the same partition key physically close together, in sorted
    #   order by the sort key value.
    #
    #    </note>
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] projection
    #   Represents attributes that are copied (projected) from the table
    #   into the local secondary index. These are in addition to the primary
    #   key attributes and index key attributes, which are automatically
    #   projected.
    #   @return [Types::Projection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/LocalSecondaryIndex AWS API Documentation
    #
    class LocalSecondaryIndex < Struct.new(
      :index_name,
      :key_schema,
      :projection)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a local secondary index.
    #
    # @!attribute [rw] index_name
    #   Represents the name of the local secondary index.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   The complete key schema for the local secondary index, consisting of
    #   one or more pairs of attribute names and key types:
    #
    #   * `HASH` - partition key
    #
    #   * `RANGE` - sort key
    #
    #   <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
    #   The term "hash attribute" derives from DynamoDB's usage of an
    #   internal hash function to evenly distribute data items across
    #   partitions, based on their partition key values.
    #
    #    The sort key of an item is also known as its *range attribute*. The
    #   term "range attribute" derives from the way DynamoDB stores items
    #   with the same partition key physically close together, in sorted
    #   order by the sort key value.
    #
    #    </note>
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] projection
    #   Represents attributes that are copied (projected) from the table
    #   into the global secondary index. These are in addition to the
    #   primary key attributes and index key attributes, which are
    #   automatically projected.
    #   @return [Types::Projection]
    #
    # @!attribute [rw] index_size_bytes
    #   The total size of the specified index, in bytes. DynamoDB updates
    #   this value approximately every six hours. Recent changes might not
    #   be reflected in this value.
    #   @return [Integer]
    #
    # @!attribute [rw] item_count
    #   The number of items in the specified index. DynamoDB updates this
    #   value approximately every six hours. Recent changes might not be
    #   reflected in this value.
    #   @return [Integer]
    #
    # @!attribute [rw] index_arn
    #   The Amazon Resource Name (ARN) that uniquely identifies the index.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/LocalSecondaryIndexDescription AWS API Documentation
    #
    class LocalSecondaryIndexDescription < Struct.new(
      :index_name,
      :key_schema,
      :projection,
      :index_size_bytes,
      :item_count,
      :index_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a local secondary index for the table
    # when the backup was created.
    #
    # @!attribute [rw] index_name
    #   Represents the name of the local secondary index.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   The complete key schema for a local secondary index, which consists
    #   of one or more pairs of attribute names and key types:
    #
    #   * `HASH` - partition key
    #
    #   * `RANGE` - sort key
    #
    #   <note markdown="1"> The partition key of an item is also known as its *hash attribute*.
    #   The term "hash attribute" derives from DynamoDB's usage of an
    #   internal hash function to evenly distribute data items across
    #   partitions, based on their partition key values.
    #
    #    The sort key of an item is also known as its *range attribute*. The
    #   term "range attribute" derives from the way DynamoDB stores items
    #   with the same partition key physically close together, in sorted
    #   order by the sort key value.
    #
    #    </note>
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] projection
    #   Represents attributes that are copied (projected) from the table
    #   into the global secondary index. These are in addition to the
    #   primary key attributes and index key attributes, which are
    #   automatically projected.
    #   @return [Types::Projection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/LocalSecondaryIndexInfo AWS API Documentation
    #
    class LocalSecondaryIndexInfo < Struct.new(
      :index_name,
      :key_schema,
      :projection)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a PartiQL statment that uses parameters.
    #
    # @note When making an API call, you may pass ParameterizedStatement
    #   data as a hash:
    #
    #       {
    #         statement: "PartiQLStatement", # required
    #         parameters: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #       }
    #
    # @!attribute [rw] statement
    #   A PartiQL statment that uses parameters.
    #   @return [String]
    #
    # @!attribute [rw] parameters
    #   The parameter values.
    #   @return [Array<Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ParameterizedStatement AWS API Documentation
    #
    class ParameterizedStatement < Struct.new(
      :statement,
      :parameters)
      SENSITIVE = []
      include Aws::Structure
    end

    # The description of the point in time settings applied to the table.
    #
    # @!attribute [rw] point_in_time_recovery_status
    #   The current state of point in time recovery:
    #
    #   * `ENABLED` - Point in time recovery is enabled.
    #
    #   * `DISABLED` - Point in time recovery is disabled.
    #   @return [String]
    #
    # @!attribute [rw] earliest_restorable_date_time
    #   Specifies the earliest point in time you can restore your table to.
    #   You can restore your table to any point in time during the last 35
    #   days.
    #   @return [Time]
    #
    # @!attribute [rw] latest_restorable_date_time
    #   `LatestRestorableDateTime` is typically 5 minutes before the current
    #   time.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/PointInTimeRecoveryDescription AWS API Documentation
    #
    class PointInTimeRecoveryDescription < Struct.new(
      :point_in_time_recovery_status,
      :earliest_restorable_date_time,
      :latest_restorable_date_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the settings used to enable point in time recovery.
    #
    # @note When making an API call, you may pass PointInTimeRecoverySpecification
    #   data as a hash:
    #
    #       {
    #         point_in_time_recovery_enabled: false, # required
    #       }
    #
    # @!attribute [rw] point_in_time_recovery_enabled
    #   Indicates whether point in time recovery is enabled (true) or
    #   disabled (false) on the table.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/PointInTimeRecoverySpecification AWS API Documentation
    #
    class PointInTimeRecoverySpecification < Struct.new(
      :point_in_time_recovery_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Point in time recovery has not yet been enabled for this source table.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/PointInTimeRecoveryUnavailableException AWS API Documentation
    #
    class PointInTimeRecoveryUnavailableException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents attributes that are copied (projected) from the table into
    # an index. These are in addition to the primary key attributes and
    # index key attributes, which are automatically projected.
    #
    # @note When making an API call, you may pass Projection
    #   data as a hash:
    #
    #       {
    #         projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #         non_key_attributes: ["NonKeyAttributeName"],
    #       }
    #
    # @!attribute [rw] projection_type
    #   The set of attributes that are projected into the index:
    #
    #   * `KEYS_ONLY` - Only the index and primary keys are projected into
    #     the index.
    #
    #   * `INCLUDE` - In addition to the attributes described in
    #     `KEYS_ONLY`, the secondary index will include other non-key
    #     attributes that you specify.
    #
    #   * `ALL` - All of the table attributes are projected into the index.
    #   @return [String]
    #
    # @!attribute [rw] non_key_attributes
    #   Represents the non-key attribute names which will be projected into
    #   the index.
    #
    #   For local secondary indexes, the total count of `NonKeyAttributes`
    #   summed across all of the local secondary indexes, must not exceed
    #   100. If you project the same attribute into two different indexes,
    #   this counts as two distinct attributes when determining the total.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Projection AWS API Documentation
    #
    class Projection < Struct.new(
      :projection_type,
      :non_key_attributes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the provisioned throughput settings for a specified table
    # or index. The settings can be modified using the `UpdateTable`
    # operation.
    #
    # For current minimum and maximum provisioned throughput values, see
    # [Service, Account, and Table Quotas][1] in the *Amazon DynamoDB
    # Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
    #
    # @note When making an API call, you may pass ProvisionedThroughput
    #   data as a hash:
    #
    #       {
    #         read_capacity_units: 1, # required
    #         write_capacity_units: 1, # required
    #       }
    #
    # @!attribute [rw] read_capacity_units
    #   The maximum number of strongly consistent reads consumed per second
    #   before DynamoDB returns a `ThrottlingException`. For more
    #   information, see [Specifying Read and Write Requirements][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #   If read/write capacity mode is `PAY_PER_REQUEST` the value is set to
    #   0.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#ProvisionedThroughput
    #   @return [Integer]
    #
    # @!attribute [rw] write_capacity_units
    #   The maximum number of writes consumed per second before DynamoDB
    #   returns a `ThrottlingException`. For more information, see
    #   [Specifying Read and Write Requirements][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #   If read/write capacity mode is `PAY_PER_REQUEST` the value is set to
    #   0.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#ProvisionedThroughput
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ProvisionedThroughput AWS API Documentation
    #
    class ProvisionedThroughput < Struct.new(
      :read_capacity_units,
      :write_capacity_units)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the provisioned throughput settings for the table,
    # consisting of read and write capacity units, along with data about
    # increases and decreases.
    #
    # @!attribute [rw] last_increase_date_time
    #   The date and time of the last provisioned throughput increase for
    #   this table.
    #   @return [Time]
    #
    # @!attribute [rw] last_decrease_date_time
    #   The date and time of the last provisioned throughput decrease for
    #   this table.
    #   @return [Time]
    #
    # @!attribute [rw] number_of_decreases_today
    #   The number of provisioned throughput decreases for this table during
    #   this UTC calendar day. For current maximums on provisioned
    #   throughput decreases, see [Service, Account, and Table Quotas][1] in
    #   the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
    #   @return [Integer]
    #
    # @!attribute [rw] read_capacity_units
    #   The maximum number of strongly consistent reads consumed per second
    #   before DynamoDB returns a `ThrottlingException`. Eventually
    #   consistent reads require less effort than strongly consistent reads,
    #   so a setting of 50 `ReadCapacityUnits` per second provides 100
    #   eventually consistent `ReadCapacityUnits` per second.
    #   @return [Integer]
    #
    # @!attribute [rw] write_capacity_units
    #   The maximum number of writes consumed per second before DynamoDB
    #   returns a `ThrottlingException`.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ProvisionedThroughputDescription AWS API Documentation
    #
    class ProvisionedThroughputDescription < Struct.new(
      :last_increase_date_time,
      :last_decrease_date_time,
      :number_of_decreases_today,
      :read_capacity_units,
      :write_capacity_units)
      SENSITIVE = []
      include Aws::Structure
    end

    # Your request rate is too high. The Amazon Web Services SDKs for
    # DynamoDB automatically retry requests that receive this exception.
    # Your request is eventually successful, unless your retry queue is too
    # large to finish. Reduce the frequency of requests and use exponential
    # backoff. For more information, go to [Error Retries and Exponential
    # Backoff][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html#Programming.Errors.RetryAndBackoff
    #
    # @!attribute [rw] message
    #   You exceeded your maximum allowed provisioned throughput.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ProvisionedThroughputExceededException AWS API Documentation
    #
    class ProvisionedThroughputExceededException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Replica-specific provisioned throughput settings. If not specified,
    # uses the source table's provisioned throughput settings.
    #
    # @note When making an API call, you may pass ProvisionedThroughputOverride
    #   data as a hash:
    #
    #       {
    #         read_capacity_units: 1,
    #       }
    #
    # @!attribute [rw] read_capacity_units
    #   Replica-specific read capacity units. If not specified, uses the
    #   source table's read capacity settings.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ProvisionedThroughputOverride AWS API Documentation
    #
    class ProvisionedThroughputOverride < Struct.new(
      :read_capacity_units)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to perform a `PutItem` operation.
    #
    # @note When making an API call, you may pass Put
    #   data as a hash:
    #
    #       {
    #         item: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         table_name: "TableName", # required
    #         condition_expression: "ConditionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #       }
    #
    # @!attribute [rw] item
    #   A map of attribute name to attribute values, representing the
    #   primary key of the item to be written by `PutItem`. All of the
    #   table's primary key attributes must be specified, and their data
    #   types must match those of the table's key schema. If any attributes
    #   are present in the item that are part of an index key schema for the
    #   table, their types must match the index key schema.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] table_name
    #   Name of the table in which to write the item.
    #   @return [String]
    #
    # @!attribute [rw] condition_expression
    #   A condition that must be satisfied in order for a conditional update
    #   to succeed.
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] return_values_on_condition_check_failure
    #   Use `ReturnValuesOnConditionCheckFailure` to get the item attributes
    #   if the `Put` condition fails. For
    #   `ReturnValuesOnConditionCheckFailure`, the valid values are: NONE
    #   and ALL\_OLD.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Put AWS API Documentation
    #
    class Put < Struct.new(
      :item,
      :table_name,
      :condition_expression,
      :expression_attribute_names,
      :expression_attribute_values,
      :return_values_on_condition_check_failure)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `PutItem` operation.
    #
    # @note When making an API call, you may pass PutItemInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         item: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         expected: {
    #           "AttributeName" => {
    #             value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #             exists: false,
    #             comparison_operator: "EQ", # accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
    #             attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #         },
    #         return_values: "NONE", # accepts NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
    #         conditional_operator: "AND", # accepts AND, OR
    #         condition_expression: "ConditionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table to contain the item.
    #   @return [String]
    #
    # @!attribute [rw] item
    #   A map of attribute name/value pairs, one for each attribute. Only
    #   the primary key attributes are required; you can optionally provide
    #   other attribute name-value pairs for the item.
    #
    #   You must provide all of the attributes for the primary key. For
    #   example, with a simple primary key, you only need to provide a value
    #   for the partition key. For a composite primary key, you must provide
    #   both values for both the partition key and the sort key.
    #
    #   If you specify any attributes that are part of an index key, then
    #   the data types for those attributes must match those of the schema
    #   in the table's attribute definition.
    #
    #   Empty String and Binary attribute values are allowed. Attribute
    #   values of type String and Binary must have a length greater than
    #   zero if the attribute is used as a key attribute for a table or
    #   index.
    #
    #   For more information about primary keys, see [Primary Key][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #   Each element in the `Item` map is an `AttributeValue` object.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] expected
    #   This is a legacy parameter. Use `ConditionExpression` instead. For
    #   more information, see [Expected][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.Expected.html
    #   @return [Hash<String,Types::ExpectedAttributeValue>]
    #
    # @!attribute [rw] return_values
    #   Use `ReturnValues` if you want to get the item attributes as they
    #   appeared before they were updated with the `PutItem` request. For
    #   `PutItem`, the valid values are:
    #
    #   * `NONE` - If `ReturnValues` is not specified, or if its value is
    #     `NONE`, then nothing is returned. (This setting is the default for
    #     `ReturnValues`.)
    #
    #   * `ALL_OLD` - If `PutItem` overwrote an attribute name-value pair,
    #     then the content of the old item is returned.
    #
    #   The values returned are strongly consistent.
    #
    #   There is no additional cost associated with requesting a return
    #   value aside from the small network and processing overhead of
    #   receiving a larger response. No read capacity units are consumed.
    #
    #   <note markdown="1"> The `ReturnValues` parameter is used by several DynamoDB operations;
    #   however, `PutItem` does not recognize any values other than `NONE`
    #   or `ALL_OLD`.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] return_item_collection_metrics
    #   Determines whether item collection metrics are returned. If set to
    #   `SIZE`, the response includes statistics about item collections, if
    #   any, that were modified during the operation are returned in the
    #   response. If set to `NONE` (the default), no statistics are
    #   returned.
    #   @return [String]
    #
    # @!attribute [rw] conditional_operator
    #   This is a legacy parameter. Use `ConditionExpression` instead. For
    #   more information, see [ConditionalOperator][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.ConditionalOperator.html
    #   @return [String]
    #
    # @!attribute [rw] condition_expression
    #   A condition that must be satisfied in order for a conditional
    #   `PutItem` operation to succeed.
    #
    #   An expression can contain any of the following:
    #
    #   * Functions: `attribute_exists | attribute_not_exists |
    #     attribute_type | contains | begins_with | size`
    #
    #     These function names are case-sensitive.
    #
    #   * Comparison operators: `= | <> | < | > | <= | >= | BETWEEN | IN `
    #
    #   * Logical operators: `AND | OR | NOT`
    #
    #   For more information on condition expressions, see [Condition
    #   Expressions][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression. The following are some use cases for using
    #   `ExpressionAttributeNames`\:
    #
    #   * To access an attribute whose name conflicts with a DynamoDB
    #     reserved word.
    #
    #   * To create a placeholder for repeating occurrences of an attribute
    #     name in an expression.
    #
    #   * To prevent special characters in an attribute name from being
    #     misinterpreted in an expression.
    #
    #   Use the **#** character in an expression to dereference an attribute
    #   name. For example, consider the following attribute name:
    #
    #   * `Percentile`
    #
    #   ^
    #
    #   The name of this attribute conflicts with a reserved word, so it
    #   cannot be used directly in an expression. (For the complete list of
    #   reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
    #   Developer Guide*). To work around this, you could specify the
    #   following for `ExpressionAttributeNames`\:
    #
    #   * `\{"#P":"Percentile"\}`
    #
    #   ^
    #
    #   You could then use this substitution in an expression, as in this
    #   example:
    #
    #   * `#P = :val`
    #
    #   ^
    #
    #   <note markdown="1"> Tokens that begin with the **\:** character are *expression
    #   attribute values*, which are placeholders for the actual value at
    #   runtime.
    #
    #    </note>
    #
    #   For more information on expression attribute names, see [Specifying
    #   Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #
    #   Use the **\:** (colon) character in an expression to dereference an
    #   attribute value. For example, suppose that you wanted to check
    #   whether the value of the *ProductStatus* attribute was one of the
    #   following:
    #
    #   `Available | Backordered | Discontinued`
    #
    #   You would first need to specify `ExpressionAttributeValues` as
    #   follows:
    #
    #   `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
    #   ":disc":\{"S":"Discontinued"\} \}`
    #
    #   You could then use these values in an expression, such as this:
    #
    #   `ProductStatus IN (:avail, :back, :disc)`
    #
    #   For more information on expression attribute values, see [Condition
    #   Expressions][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/PutItemInput AWS API Documentation
    #
    class PutItemInput < Struct.new(
      :table_name,
      :item,
      :expected,
      :return_values,
      :return_consumed_capacity,
      :return_item_collection_metrics,
      :conditional_operator,
      :condition_expression,
      :expression_attribute_names,
      :expression_attribute_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `PutItem` operation.
    #
    # @!attribute [rw] attributes
    #   The attribute values as they appeared before the `PutItem`
    #   operation, but only if `ReturnValues` is specified as `ALL_OLD` in
    #   the request. Each element consists of an attribute name and an
    #   attribute value.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the `PutItem` operation. The data
    #   returned includes the total provisioned throughput consumed, along
    #   with statistics for the table and any indexes involved in the
    #   operation. `ConsumedCapacity` is only returned if the
    #   `ReturnConsumedCapacity` parameter was specified. For more
    #   information, see [Read/Write Capacity Mode][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
    #   @return [Types::ConsumedCapacity]
    #
    # @!attribute [rw] item_collection_metrics
    #   Information about item collections, if any, that were affected by
    #   the `PutItem` operation. `ItemCollectionMetrics` is only returned if
    #   the `ReturnItemCollectionMetrics` parameter was specified. If the
    #   table does not have any local secondary indexes, this information is
    #   not returned in the response.
    #
    #   Each `ItemCollectionMetrics` element consists of:
    #
    #   * `ItemCollectionKey` - The partition key value of the item
    #     collection. This is the same as the partition key value of the
    #     item itself.
    #
    #   * `SizeEstimateRangeGB` - An estimate of item collection size, in
    #     gigabytes. This value is a two-element array containing a lower
    #     bound and an upper bound for the estimate. The estimate includes
    #     the size of all the items in the table, plus the size of all
    #     attributes projected into all of the local secondary indexes on
    #     that table. Use this estimate to measure whether a local secondary
    #     index is approaching its size limit.
    #
    #     The estimate is subject to change over time; therefore, do not
    #     rely on the precision or accuracy of the estimate.
    #   @return [Types::ItemCollectionMetrics]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/PutItemOutput AWS API Documentation
    #
    class PutItemOutput < Struct.new(
      :attributes,
      :consumed_capacity,
      :item_collection_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to perform a `PutItem` operation on an item.
    #
    # @note When making an API call, you may pass PutRequest
    #   data as a hash:
    #
    #       {
    #         item: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #       }
    #
    # @!attribute [rw] item
    #   A map of attribute name to attribute values, representing the
    #   primary key of an item to be processed by `PutItem`. All of the
    #   table's primary key attributes must be specified, and their data
    #   types must match those of the table's key schema. If any attributes
    #   are present in the item that are part of an index key schema for the
    #   table, their types must match the index key schema.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/PutRequest AWS API Documentation
    #
    class PutRequest < Struct.new(
      :item)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `Query` operation.
    #
    # @note When making an API call, you may pass QueryInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         index_name: "IndexName",
    #         select: "ALL_ATTRIBUTES", # accepts ALL_ATTRIBUTES, ALL_PROJECTED_ATTRIBUTES, SPECIFIC_ATTRIBUTES, COUNT
    #         attributes_to_get: ["AttributeName"],
    #         limit: 1,
    #         consistent_read: false,
    #         key_conditions: {
    #           "AttributeName" => {
    #             attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #             comparison_operator: "EQ", # required, accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
    #           },
    #         },
    #         query_filter: {
    #           "AttributeName" => {
    #             attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #             comparison_operator: "EQ", # required, accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
    #           },
    #         },
    #         conditional_operator: "AND", # accepts AND, OR
    #         scan_index_forward: false,
    #         exclusive_start_key: {
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         projection_expression: "ProjectionExpression",
    #         filter_expression: "ConditionExpression",
    #         key_condition_expression: "KeyExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table containing the requested items.
    #   @return [String]
    #
    # @!attribute [rw] index_name
    #   The name of an index to query. This index can be any local secondary
    #   index or global secondary index on the table. Note that if you use
    #   the `IndexName` parameter, you must also provide `TableName.`
    #   @return [String]
    #
    # @!attribute [rw] select
    #   The attributes to be returned in the result. You can retrieve all
    #   item attributes, specific item attributes, the count of matching
    #   items, or in the case of an index, some or all of the attributes
    #   projected into the index.
    #
    #   * `ALL_ATTRIBUTES` - Returns all of the item attributes from the
    #     specified table or index. If you query a local secondary index,
    #     then for each matching item in the index, DynamoDB fetches the
    #     entire item from the parent table. If the index is configured to
    #     project all item attributes, then all of the data can be obtained
    #     from the local secondary index, and no fetching is required.
    #
    #   * `ALL_PROJECTED_ATTRIBUTES` - Allowed only when querying an index.
    #     Retrieves all attributes that have been projected into the index.
    #     If the index is configured to project all attributes, this return
    #     value is equivalent to specifying `ALL_ATTRIBUTES`.
    #
    #   * `COUNT` - Returns the number of matching items, rather than the
    #     matching items themselves.
    #
    #   * `SPECIFIC_ATTRIBUTES` - Returns only the attributes listed in
    #     `ProjectionExpression`. This return value is equivalent to
    #     specifying `ProjectionExpression` without specifying any value for
    #     `Select`.
    #
    #     If you query or scan a local secondary index and request only
    #     attributes that are projected into that index, the operation will
    #     read only the index and not the table. If any of the requested
    #     attributes are not projected into the local secondary index,
    #     DynamoDB fetches each of these attributes from the parent table.
    #     This extra fetching incurs additional throughput cost and latency.
    #
    #     If you query or scan a global secondary index, you can only
    #     request attributes that are projected into the index. Global
    #     secondary index queries cannot fetch attributes from the parent
    #     table.
    #
    #   If neither `Select` nor `ProjectionExpression` are specified,
    #   DynamoDB defaults to `ALL_ATTRIBUTES` when accessing a table, and
    #   `ALL_PROJECTED_ATTRIBUTES` when accessing an index. You cannot use
    #   both `Select` and `ProjectionExpression` together in a single
    #   request, unless the value for `Select` is `SPECIFIC_ATTRIBUTES`.
    #   (This usage is equivalent to specifying `ProjectionExpression`
    #   without any value for `Select`.)
    #
    #   <note markdown="1"> If you use the `ProjectionExpression` parameter, then the value for
    #   `Select` can only be `SPECIFIC_ATTRIBUTES`. Any other value for
    #   `Select` will return an error.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] attributes_to_get
    #   This is a legacy parameter. Use `ProjectionExpression` instead. For
    #   more information, see [AttributesToGet][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.AttributesToGet.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] limit
    #   The maximum number of items to evaluate (not necessarily the number
    #   of matching items). If DynamoDB processes the number of items up to
    #   the limit while processing the results, it stops the operation and
    #   returns the matching values up to that point, and a key in
    #   `LastEvaluatedKey` to apply in a subsequent operation, so that you
    #   can pick up where you left off. Also, if the processed dataset size
    #   exceeds 1 MB before DynamoDB reaches this limit, it stops the
    #   operation and returns the matching values up to the limit, and a key
    #   in `LastEvaluatedKey` to apply in a subsequent operation to continue
    #   the operation. For more information, see [Query and Scan][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
    #   @return [Integer]
    #
    # @!attribute [rw] consistent_read
    #   Determines the read consistency model: If set to `true`, then the
    #   operation uses strongly consistent reads; otherwise, the operation
    #   uses eventually consistent reads.
    #
    #   Strongly consistent reads are not supported on global secondary
    #   indexes. If you query a global secondary index with `ConsistentRead`
    #   set to `true`, you will receive a `ValidationException`.
    #   @return [Boolean]
    #
    # @!attribute [rw] key_conditions
    #   This is a legacy parameter. Use `KeyConditionExpression` instead.
    #   For more information, see [KeyConditions][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.KeyConditions.html
    #   @return [Hash<String,Types::Condition>]
    #
    # @!attribute [rw] query_filter
    #   This is a legacy parameter. Use `FilterExpression` instead. For more
    #   information, see [QueryFilter][1] in the *Amazon DynamoDB Developer
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.QueryFilter.html
    #   @return [Hash<String,Types::Condition>]
    #
    # @!attribute [rw] conditional_operator
    #   This is a legacy parameter. Use `FilterExpression` instead. For more
    #   information, see [ConditionalOperator][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.ConditionalOperator.html
    #   @return [String]
    #
    # @!attribute [rw] scan_index_forward
    #   Specifies the order for index traversal: If `true` (default), the
    #   traversal is performed in ascending order; if `false`, the traversal
    #   is performed in descending order.
    #
    #   Items with the same partition key value are stored in sorted order
    #   by sort key. If the sort key data type is Number, the results are
    #   stored in numeric order. For type String, the results are stored in
    #   order of UTF-8 bytes. For type Binary, DynamoDB treats each byte of
    #   the binary data as unsigned.
    #
    #   If `ScanIndexForward` is `true`, DynamoDB returns the results in the
    #   order in which they are stored (by sort key value). This is the
    #   default behavior. If `ScanIndexForward` is `false`, DynamoDB reads
    #   the results in reverse order by sort key value, and then returns the
    #   results to the client.
    #   @return [Boolean]
    #
    # @!attribute [rw] exclusive_start_key
    #   The primary key of the first item that this operation will evaluate.
    #   Use the value that was returned for `LastEvaluatedKey` in the
    #   previous operation.
    #
    #   The data type for `ExclusiveStartKey` must be String, Number, or
    #   Binary. No set data types are allowed.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] projection_expression
    #   A string that identifies one or more attributes to retrieve from the
    #   table. These attributes can include scalars, sets, or elements of a
    #   JSON document. The attributes in the expression must be separated by
    #   commas.
    #
    #   If no attribute names are specified, then all attributes will be
    #   returned. If any of the requested attributes are not found, they
    #   will not appear in the result.
    #
    #   For more information, see [Accessing Item Attributes][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [String]
    #
    # @!attribute [rw] filter_expression
    #   A string that contains conditions that DynamoDB applies after the
    #   `Query` operation, but before the data is returned to you. Items
    #   that do not satisfy the `FilterExpression` criteria are not
    #   returned.
    #
    #   A `FilterExpression` does not allow key attributes. You cannot
    #   define a filter expression based on a partition key or a sort key.
    #
    #   <note markdown="1"> A `FilterExpression` is applied after the items have already been
    #   read; the process of filtering does not consume any additional read
    #   capacity units.
    #
    #    </note>
    #
    #   For more information, see [Filter Expressions][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#Query.FilterExpression
    #   @return [String]
    #
    # @!attribute [rw] key_condition_expression
    #   The condition that specifies the key values for items to be
    #   retrieved by the `Query` action.
    #
    #   The condition must perform an equality test on a single partition
    #   key value.
    #
    #   The condition can optionally perform one of several comparison tests
    #   on a single sort key value. This allows `Query` to retrieve one item
    #   with a given partition key value and sort key value, or several
    #   items that have the same partition key value but different sort key
    #   values.
    #
    #   The partition key equality test is required, and must be specified
    #   in the following format:
    #
    #   `partitionKeyName` *=* `:partitionkeyval`
    #
    #   If you also want to provide a condition for the sort key, it must be
    #   combined using `AND` with the condition for the sort key. Following
    #   is an example, using the **=** comparison operator for the sort key:
    #
    #   `partitionKeyName` `=` `:partitionkeyval` `AND` `sortKeyName` `=`
    #   `:sortkeyval`
    #
    #   Valid comparisons for the sort key condition are as follows:
    #
    #   * `sortKeyName` `=` `:sortkeyval` - true if the sort key value is
    #     equal to `:sortkeyval`.
    #
    #   * `sortKeyName` `<` `:sortkeyval` - true if the sort key value is
    #     less than `:sortkeyval`.
    #
    #   * `sortKeyName` `<=` `:sortkeyval` - true if the sort key value is
    #     less than or equal to `:sortkeyval`.
    #
    #   * `sortKeyName` `>` `:sortkeyval` - true if the sort key value is
    #     greater than `:sortkeyval`.
    #
    #   * `sortKeyName` `>= ` `:sortkeyval` - true if the sort key value is
    #     greater than or equal to `:sortkeyval`.
    #
    #   * `sortKeyName` `BETWEEN` `:sortkeyval1` `AND` `:sortkeyval2` - true
    #     if the sort key value is greater than or equal to `:sortkeyval1`,
    #     and less than or equal to `:sortkeyval2`.
    #
    #   * `begins_with (` `sortKeyName`, `:sortkeyval` `)` - true if the
    #     sort key value begins with a particular operand. (You cannot use
    #     this function with a sort key that is of type Number.) Note that
    #     the function name `begins_with` is case-sensitive.
    #
    #   Use the `ExpressionAttributeValues` parameter to replace tokens such
    #   as `:partitionval` and `:sortval` with actual values at runtime.
    #
    #   You can optionally use the `ExpressionAttributeNames` parameter to
    #   replace the names of the partition key and sort key with placeholder
    #   tokens. This option might be necessary if an attribute name
    #   conflicts with a DynamoDB reserved word. For example, the following
    #   `KeyConditionExpression` parameter causes an error because *Size* is
    #   a reserved word:
    #
    #   * `Size = :myval`
    #
    #   ^
    #
    #   To work around this, define a placeholder (such a `#S`) to represent
    #   the attribute name *Size*. `KeyConditionExpression` then is as
    #   follows:
    #
    #   * `#S = :myval`
    #
    #   ^
    #
    #   For a list of reserved words, see [Reserved Words][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #   For more information on `ExpressionAttributeNames` and
    #   `ExpressionAttributeValues`, see [Using Placeholders for Attribute
    #   Names and Values][2] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ExpressionPlaceholders.html
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression. The following are some use cases for using
    #   `ExpressionAttributeNames`\:
    #
    #   * To access an attribute whose name conflicts with a DynamoDB
    #     reserved word.
    #
    #   * To create a placeholder for repeating occurrences of an attribute
    #     name in an expression.
    #
    #   * To prevent special characters in an attribute name from being
    #     misinterpreted in an expression.
    #
    #   Use the **#** character in an expression to dereference an attribute
    #   name. For example, consider the following attribute name:
    #
    #   * `Percentile`
    #
    #   ^
    #
    #   The name of this attribute conflicts with a reserved word, so it
    #   cannot be used directly in an expression. (For the complete list of
    #   reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
    #   Developer Guide*). To work around this, you could specify the
    #   following for `ExpressionAttributeNames`\:
    #
    #   * `\{"#P":"Percentile"\}`
    #
    #   ^
    #
    #   You could then use this substitution in an expression, as in this
    #   example:
    #
    #   * `#P = :val`
    #
    #   ^
    #
    #   <note markdown="1"> Tokens that begin with the **\:** character are *expression
    #   attribute values*, which are placeholders for the actual value at
    #   runtime.
    #
    #    </note>
    #
    #   For more information on expression attribute names, see [Specifying
    #   Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #
    #   Use the **\:** (colon) character in an expression to dereference an
    #   attribute value. For example, suppose that you wanted to check
    #   whether the value of the *ProductStatus* attribute was one of the
    #   following:
    #
    #   `Available | Backordered | Discontinued`
    #
    #   You would first need to specify `ExpressionAttributeValues` as
    #   follows:
    #
    #   `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
    #   ":disc":\{"S":"Discontinued"\} \}`
    #
    #   You could then use these values in an expression, such as this:
    #
    #   `ProductStatus IN (:avail, :back, :disc)`
    #
    #   For more information on expression attribute values, see [Specifying
    #   Conditions][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/QueryInput AWS API Documentation
    #
    class QueryInput < Struct.new(
      :table_name,
      :index_name,
      :select,
      :attributes_to_get,
      :limit,
      :consistent_read,
      :key_conditions,
      :query_filter,
      :conditional_operator,
      :scan_index_forward,
      :exclusive_start_key,
      :return_consumed_capacity,
      :projection_expression,
      :filter_expression,
      :key_condition_expression,
      :expression_attribute_names,
      :expression_attribute_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `Query` operation.
    #
    # @!attribute [rw] items
    #   An array of item attributes that match the query criteria. Each
    #   element in this array consists of an attribute name and the value
    #   for that attribute.
    #   @return [Array<Hash<String,Types::AttributeValue>>]
    #
    # @!attribute [rw] count
    #   The number of items in the response.
    #
    #   If you used a `QueryFilter` in the request, then `Count` is the
    #   number of items returned after the filter was applied, and
    #   `ScannedCount` is the number of matching items before the filter was
    #   applied.
    #
    #   If you did not use a filter in the request, then `Count` and
    #   `ScannedCount` are the same.
    #   @return [Integer]
    #
    # @!attribute [rw] scanned_count
    #   The number of items evaluated, before any `QueryFilter` is applied.
    #   A high `ScannedCount` value with few, or no, `Count` results
    #   indicates an inefficient `Query` operation. For more information,
    #   see [Count and ScannedCount][1] in the *Amazon DynamoDB Developer
    #   Guide*.
    #
    #   If you did not use a filter in the request, then `ScannedCount` is
    #   the same as `Count`.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#Count
    #   @return [Integer]
    #
    # @!attribute [rw] last_evaluated_key
    #   The primary key of the item where the operation stopped, inclusive
    #   of the previous result set. Use this value to start a new operation,
    #   excluding this value in the new request.
    #
    #   If `LastEvaluatedKey` is empty, then the "last page" of results
    #   has been processed and there is no more data to be retrieved.
    #
    #   If `LastEvaluatedKey` is not empty, it does not necessarily mean
    #   that there is more data in the result set. The only way to know when
    #   you have reached the end of the result set is when
    #   `LastEvaluatedKey` is empty.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the `Query` operation. The data
    #   returned includes the total provisioned throughput consumed, along
    #   with statistics for the table and any indexes involved in the
    #   operation. `ConsumedCapacity` is only returned if the
    #   `ReturnConsumedCapacity` parameter was specified. For more
    #   information, see [Provisioned Throughput][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
    #   @return [Types::ConsumedCapacity]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/QueryOutput AWS API Documentation
    #
    class QueryOutput < Struct.new(
      :items,
      :count,
      :scanned_count,
      :last_evaluated_key,
      :consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a replica.
    #
    # @note When making an API call, you may pass Replica
    #   data as a hash:
    #
    #       {
    #         region_name: "RegionName",
    #       }
    #
    # @!attribute [rw] region_name
    #   The Region where the replica needs to be created.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Replica AWS API Documentation
    #
    class Replica < Struct.new(
      :region_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # The specified replica is already part of the global table.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaAlreadyExistsException AWS API Documentation
    #
    class ReplicaAlreadyExistsException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling settings of the replica.
    #
    # @!attribute [rw] region_name
    #   The Region where the replica exists.
    #   @return [String]
    #
    # @!attribute [rw] global_secondary_indexes
    #   Replica-specific global secondary index auto scaling settings.
    #   @return [Array<Types::ReplicaGlobalSecondaryIndexAutoScalingDescription>]
    #
    # @!attribute [rw] replica_provisioned_read_capacity_auto_scaling_settings
    #   Represents the auto scaling settings for a global table or global
    #   secondary index.
    #   @return [Types::AutoScalingSettingsDescription]
    #
    # @!attribute [rw] replica_provisioned_write_capacity_auto_scaling_settings
    #   Represents the auto scaling settings for a global table or global
    #   secondary index.
    #   @return [Types::AutoScalingSettingsDescription]
    #
    # @!attribute [rw] replica_status
    #   The current state of the replica:
    #
    #   * `CREATING` - The replica is being created.
    #
    #   * `UPDATING` - The replica is being updated.
    #
    #   * `DELETING` - The replica is being deleted.
    #
    #   * `ACTIVE` - The replica is ready for use.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaAutoScalingDescription AWS API Documentation
    #
    class ReplicaAutoScalingDescription < Struct.new(
      :region_name,
      :global_secondary_indexes,
      :replica_provisioned_read_capacity_auto_scaling_settings,
      :replica_provisioned_write_capacity_auto_scaling_settings,
      :replica_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling settings of a replica that will be
    # modified.
    #
    # @note When making an API call, you may pass ReplicaAutoScalingUpdate
    #   data as a hash:
    #
    #       {
    #         region_name: "RegionName", # required
    #         replica_global_secondary_index_updates: [
    #           {
    #             index_name: "IndexName",
    #             provisioned_read_capacity_auto_scaling_update: {
    #               minimum_units: 1,
    #               maximum_units: 1,
    #               auto_scaling_disabled: false,
    #               auto_scaling_role_arn: "AutoScalingRoleArn",
    #               scaling_policy_update: {
    #                 policy_name: "AutoScalingPolicyName",
    #                 target_tracking_scaling_policy_configuration: { # required
    #                   disable_scale_in: false,
    #                   scale_in_cooldown: 1,
    #                   scale_out_cooldown: 1,
    #                   target_value: 1.0, # required
    #                 },
    #               },
    #             },
    #           },
    #         ],
    #         replica_provisioned_read_capacity_auto_scaling_update: {
    #           minimum_units: 1,
    #           maximum_units: 1,
    #           auto_scaling_disabled: false,
    #           auto_scaling_role_arn: "AutoScalingRoleArn",
    #           scaling_policy_update: {
    #             policy_name: "AutoScalingPolicyName",
    #             target_tracking_scaling_policy_configuration: { # required
    #               disable_scale_in: false,
    #               scale_in_cooldown: 1,
    #               scale_out_cooldown: 1,
    #               target_value: 1.0, # required
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] region_name
    #   The Region where the replica exists.
    #   @return [String]
    #
    # @!attribute [rw] replica_global_secondary_index_updates
    #   Represents the auto scaling settings of global secondary indexes
    #   that will be modified.
    #   @return [Array<Types::ReplicaGlobalSecondaryIndexAutoScalingUpdate>]
    #
    # @!attribute [rw] replica_provisioned_read_capacity_auto_scaling_update
    #   Represents the auto scaling settings to be modified for a global
    #   table or global secondary index.
    #   @return [Types::AutoScalingSettingsUpdate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaAutoScalingUpdate AWS API Documentation
    #
    class ReplicaAutoScalingUpdate < Struct.new(
      :region_name,
      :replica_global_secondary_index_updates,
      :replica_provisioned_read_capacity_auto_scaling_update)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the details of the replica.
    #
    # @!attribute [rw] region_name
    #   The name of the Region.
    #   @return [String]
    #
    # @!attribute [rw] replica_status
    #   The current state of the replica:
    #
    #   * `CREATING` - The replica is being created.
    #
    #   * `UPDATING` - The replica is being updated.
    #
    #   * `DELETING` - The replica is being deleted.
    #
    #   * `ACTIVE` - The replica is ready for use.
    #
    #   * `REGION_DISABLED` - The replica is inaccessible because the Amazon
    #     Web Services Region has been disabled.
    #
    #     <note markdown="1"> If the Amazon Web Services Region remains inaccessible for more
    #     than 20 hours, DynamoDB will remove this replica from the
    #     replication group. The replica will not be deleted and replication
    #     will stop from and to this region.
    #
    #      </note>
    #
    #   * `INACCESSIBLE_ENCRYPTION_CREDENTIALS ` - The KMS key used to
    #     encrypt the table is inaccessible.
    #
    #     <note markdown="1"> If the KMS key remains inaccessible for more than 20 hours,
    #     DynamoDB will remove this replica from the replication group. The
    #     replica will not be deleted and replication will stop from and to
    #     this region.
    #
    #      </note>
    #   @return [String]
    #
    # @!attribute [rw] replica_status_description
    #   Detailed information about the replica status.
    #   @return [String]
    #
    # @!attribute [rw] replica_status_percent_progress
    #   Specifies the progress of a Create, Update, or Delete action on the
    #   replica as a percentage.
    #   @return [String]
    #
    # @!attribute [rw] kms_master_key_id
    #   The KMS key of the replica that will be used for KMS encryption.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_throughput_override
    #   Replica-specific provisioned throughput. If not described, uses the
    #   source table's provisioned throughput settings.
    #   @return [Types::ProvisionedThroughputOverride]
    #
    # @!attribute [rw] global_secondary_indexes
    #   Replica-specific global secondary index settings.
    #   @return [Array<Types::ReplicaGlobalSecondaryIndexDescription>]
    #
    # @!attribute [rw] replica_inaccessible_date_time
    #   The time at which the replica was first detected as inaccessible. To
    #   determine cause of inaccessibility check the `ReplicaStatus`
    #   property.
    #   @return [Time]
    #
    # @!attribute [rw] replica_table_class_summary
    #   Contains details of the table class.
    #   @return [Types::TableClassSummary]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaDescription AWS API Documentation
    #
    class ReplicaDescription < Struct.new(
      :region_name,
      :replica_status,
      :replica_status_description,
      :replica_status_percent_progress,
      :kms_master_key_id,
      :provisioned_throughput_override,
      :global_secondary_indexes,
      :replica_inaccessible_date_time,
      :replica_table_class_summary)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a replica global secondary index.
    #
    # @note When making an API call, you may pass ReplicaGlobalSecondaryIndex
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName", # required
    #         provisioned_throughput_override: {
    #           read_capacity_units: 1,
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_throughput_override
    #   Replica table GSI-specific provisioned throughput. If not specified,
    #   uses the source table GSI's read capacity settings.
    #   @return [Types::ProvisionedThroughputOverride]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaGlobalSecondaryIndex AWS API Documentation
    #
    class ReplicaGlobalSecondaryIndex < Struct.new(
      :index_name,
      :provisioned_throughput_override)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling configuration for a replica global
    # secondary index.
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index.
    #   @return [String]
    #
    # @!attribute [rw] index_status
    #   The current state of the replica global secondary index:
    #
    #   * `CREATING` - The index is being created.
    #
    #   * `UPDATING` - The index is being updated.
    #
    #   * `DELETING` - The index is being deleted.
    #
    #   * `ACTIVE` - The index is ready for use.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_read_capacity_auto_scaling_settings
    #   Represents the auto scaling settings for a global table or global
    #   secondary index.
    #   @return [Types::AutoScalingSettingsDescription]
    #
    # @!attribute [rw] provisioned_write_capacity_auto_scaling_settings
    #   Represents the auto scaling settings for a global table or global
    #   secondary index.
    #   @return [Types::AutoScalingSettingsDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaGlobalSecondaryIndexAutoScalingDescription AWS API Documentation
    #
    class ReplicaGlobalSecondaryIndexAutoScalingDescription < Struct.new(
      :index_name,
      :index_status,
      :provisioned_read_capacity_auto_scaling_settings,
      :provisioned_write_capacity_auto_scaling_settings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling settings of a global secondary index for a
    # replica that will be modified.
    #
    # @note When making an API call, you may pass ReplicaGlobalSecondaryIndexAutoScalingUpdate
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName",
    #         provisioned_read_capacity_auto_scaling_update: {
    #           minimum_units: 1,
    #           maximum_units: 1,
    #           auto_scaling_disabled: false,
    #           auto_scaling_role_arn: "AutoScalingRoleArn",
    #           scaling_policy_update: {
    #             policy_name: "AutoScalingPolicyName",
    #             target_tracking_scaling_policy_configuration: { # required
    #               disable_scale_in: false,
    #               scale_in_cooldown: 1,
    #               scale_out_cooldown: 1,
    #               target_value: 1.0, # required
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_read_capacity_auto_scaling_update
    #   Represents the auto scaling settings to be modified for a global
    #   table or global secondary index.
    #   @return [Types::AutoScalingSettingsUpdate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaGlobalSecondaryIndexAutoScalingUpdate AWS API Documentation
    #
    class ReplicaGlobalSecondaryIndexAutoScalingUpdate < Struct.new(
      :index_name,
      :provisioned_read_capacity_auto_scaling_update)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a replica global secondary index.
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_throughput_override
    #   If not described, uses the source table GSI's read capacity
    #   settings.
    #   @return [Types::ProvisionedThroughputOverride]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaGlobalSecondaryIndexDescription AWS API Documentation
    #
    class ReplicaGlobalSecondaryIndexDescription < Struct.new(
      :index_name,
      :provisioned_throughput_override)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a global secondary index.
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index. The name must be unique
    #   among all other indexes on this table.
    #   @return [String]
    #
    # @!attribute [rw] index_status
    #   The current status of the global secondary index:
    #
    #   * `CREATING` - The global secondary index is being created.
    #
    #   * `UPDATING` - The global secondary index is being updated.
    #
    #   * `DELETING` - The global secondary index is being deleted.
    #
    #   * `ACTIVE` - The global secondary index is ready for use.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_read_capacity_units
    #   The maximum number of strongly consistent reads consumed per second
    #   before DynamoDB returns a `ThrottlingException`.
    #   @return [Integer]
    #
    # @!attribute [rw] provisioned_read_capacity_auto_scaling_settings
    #   Auto scaling settings for a global secondary index replica's read
    #   capacity units.
    #   @return [Types::AutoScalingSettingsDescription]
    #
    # @!attribute [rw] provisioned_write_capacity_units
    #   The maximum number of writes consumed per second before DynamoDB
    #   returns a `ThrottlingException`.
    #   @return [Integer]
    #
    # @!attribute [rw] provisioned_write_capacity_auto_scaling_settings
    #   Auto scaling settings for a global secondary index replica's write
    #   capacity units.
    #   @return [Types::AutoScalingSettingsDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaGlobalSecondaryIndexSettingsDescription AWS API Documentation
    #
    class ReplicaGlobalSecondaryIndexSettingsDescription < Struct.new(
      :index_name,
      :index_status,
      :provisioned_read_capacity_units,
      :provisioned_read_capacity_auto_scaling_settings,
      :provisioned_write_capacity_units,
      :provisioned_write_capacity_auto_scaling_settings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the settings of a global secondary index for a global table
    # that will be modified.
    #
    # @note When making an API call, you may pass ReplicaGlobalSecondaryIndexSettingsUpdate
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName", # required
    #         provisioned_read_capacity_units: 1,
    #         provisioned_read_capacity_auto_scaling_settings_update: {
    #           minimum_units: 1,
    #           maximum_units: 1,
    #           auto_scaling_disabled: false,
    #           auto_scaling_role_arn: "AutoScalingRoleArn",
    #           scaling_policy_update: {
    #             policy_name: "AutoScalingPolicyName",
    #             target_tracking_scaling_policy_configuration: { # required
    #               disable_scale_in: false,
    #               scale_in_cooldown: 1,
    #               scale_out_cooldown: 1,
    #               target_value: 1.0, # required
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index. The name must be unique
    #   among all other indexes on this table.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_read_capacity_units
    #   The maximum number of strongly consistent reads consumed per second
    #   before DynamoDB returns a `ThrottlingException`.
    #   @return [Integer]
    #
    # @!attribute [rw] provisioned_read_capacity_auto_scaling_settings_update
    #   Auto scaling settings for managing a global secondary index
    #   replica's read capacity units.
    #   @return [Types::AutoScalingSettingsUpdate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaGlobalSecondaryIndexSettingsUpdate AWS API Documentation
    #
    class ReplicaGlobalSecondaryIndexSettingsUpdate < Struct.new(
      :index_name,
      :provisioned_read_capacity_units,
      :provisioned_read_capacity_auto_scaling_settings_update)
      SENSITIVE = []
      include Aws::Structure
    end

    # The specified replica is no longer part of the global table.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaNotFoundException AWS API Documentation
    #
    class ReplicaNotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a replica.
    #
    # @!attribute [rw] region_name
    #   The Region name of the replica.
    #   @return [String]
    #
    # @!attribute [rw] replica_status
    #   The current state of the Region:
    #
    #   * `CREATING` - The Region is being created.
    #
    #   * `UPDATING` - The Region is being updated.
    #
    #   * `DELETING` - The Region is being deleted.
    #
    #   * `ACTIVE` - The Region is ready for use.
    #   @return [String]
    #
    # @!attribute [rw] replica_billing_mode_summary
    #   The read/write capacity mode of the replica.
    #   @return [Types::BillingModeSummary]
    #
    # @!attribute [rw] replica_provisioned_read_capacity_units
    #   The maximum number of strongly consistent reads consumed per second
    #   before DynamoDB returns a `ThrottlingException`. For more
    #   information, see [Specifying Read and Write Requirements][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#ProvisionedThroughput
    #   @return [Integer]
    #
    # @!attribute [rw] replica_provisioned_read_capacity_auto_scaling_settings
    #   Auto scaling settings for a global table replica's read capacity
    #   units.
    #   @return [Types::AutoScalingSettingsDescription]
    #
    # @!attribute [rw] replica_provisioned_write_capacity_units
    #   The maximum number of writes consumed per second before DynamoDB
    #   returns a `ThrottlingException`. For more information, see
    #   [Specifying Read and Write Requirements][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#ProvisionedThroughput
    #   @return [Integer]
    #
    # @!attribute [rw] replica_provisioned_write_capacity_auto_scaling_settings
    #   Auto scaling settings for a global table replica's write capacity
    #   units.
    #   @return [Types::AutoScalingSettingsDescription]
    #
    # @!attribute [rw] replica_global_secondary_index_settings
    #   Replica global secondary index settings for the global table.
    #   @return [Array<Types::ReplicaGlobalSecondaryIndexSettingsDescription>]
    #
    # @!attribute [rw] replica_table_class_summary
    #   Contains details of the table class.
    #   @return [Types::TableClassSummary]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaSettingsDescription AWS API Documentation
    #
    class ReplicaSettingsDescription < Struct.new(
      :region_name,
      :replica_status,
      :replica_billing_mode_summary,
      :replica_provisioned_read_capacity_units,
      :replica_provisioned_read_capacity_auto_scaling_settings,
      :replica_provisioned_write_capacity_units,
      :replica_provisioned_write_capacity_auto_scaling_settings,
      :replica_global_secondary_index_settings,
      :replica_table_class_summary)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the settings for a global table in a Region that will be
    # modified.
    #
    # @note When making an API call, you may pass ReplicaSettingsUpdate
    #   data as a hash:
    #
    #       {
    #         region_name: "RegionName", # required
    #         replica_provisioned_read_capacity_units: 1,
    #         replica_provisioned_read_capacity_auto_scaling_settings_update: {
    #           minimum_units: 1,
    #           maximum_units: 1,
    #           auto_scaling_disabled: false,
    #           auto_scaling_role_arn: "AutoScalingRoleArn",
    #           scaling_policy_update: {
    #             policy_name: "AutoScalingPolicyName",
    #             target_tracking_scaling_policy_configuration: { # required
    #               disable_scale_in: false,
    #               scale_in_cooldown: 1,
    #               scale_out_cooldown: 1,
    #               target_value: 1.0, # required
    #             },
    #           },
    #         },
    #         replica_global_secondary_index_settings_update: [
    #           {
    #             index_name: "IndexName", # required
    #             provisioned_read_capacity_units: 1,
    #             provisioned_read_capacity_auto_scaling_settings_update: {
    #               minimum_units: 1,
    #               maximum_units: 1,
    #               auto_scaling_disabled: false,
    #               auto_scaling_role_arn: "AutoScalingRoleArn",
    #               scaling_policy_update: {
    #                 policy_name: "AutoScalingPolicyName",
    #                 target_tracking_scaling_policy_configuration: { # required
    #                   disable_scale_in: false,
    #                   scale_in_cooldown: 1,
    #                   scale_out_cooldown: 1,
    #                   target_value: 1.0, # required
    #                 },
    #               },
    #             },
    #           },
    #         ],
    #         replica_table_class: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #       }
    #
    # @!attribute [rw] region_name
    #   The Region of the replica to be added.
    #   @return [String]
    #
    # @!attribute [rw] replica_provisioned_read_capacity_units
    #   The maximum number of strongly consistent reads consumed per second
    #   before DynamoDB returns a `ThrottlingException`. For more
    #   information, see [Specifying Read and Write Requirements][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#ProvisionedThroughput
    #   @return [Integer]
    #
    # @!attribute [rw] replica_provisioned_read_capacity_auto_scaling_settings_update
    #   Auto scaling settings for managing a global table replica's read
    #   capacity units.
    #   @return [Types::AutoScalingSettingsUpdate]
    #
    # @!attribute [rw] replica_global_secondary_index_settings_update
    #   Represents the settings of a global secondary index for a global
    #   table that will be modified.
    #   @return [Array<Types::ReplicaGlobalSecondaryIndexSettingsUpdate>]
    #
    # @!attribute [rw] replica_table_class
    #   Replica-specific table class. If not specified, uses the source
    #   table's table class.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaSettingsUpdate AWS API Documentation
    #
    class ReplicaSettingsUpdate < Struct.new(
      :region_name,
      :replica_provisioned_read_capacity_units,
      :replica_provisioned_read_capacity_auto_scaling_settings_update,
      :replica_global_secondary_index_settings_update,
      :replica_table_class)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents one of the following:
    #
    # * A new replica to be added to an existing global table.
    #
    # * New parameters for an existing replica.
    #
    # * An existing replica to be removed from an existing global table.
    #
    # @note When making an API call, you may pass ReplicaUpdate
    #   data as a hash:
    #
    #       {
    #         create: {
    #           region_name: "RegionName", # required
    #         },
    #         delete: {
    #           region_name: "RegionName", # required
    #         },
    #       }
    #
    # @!attribute [rw] create
    #   The parameters required for creating a replica on an existing global
    #   table.
    #   @return [Types::CreateReplicaAction]
    #
    # @!attribute [rw] delete
    #   The name of the existing replica to be removed.
    #   @return [Types::DeleteReplicaAction]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicaUpdate AWS API Documentation
    #
    class ReplicaUpdate < Struct.new(
      :create,
      :delete)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents one of the following:
    #
    # * A new replica to be added to an existing regional table or global
    #   table. This request invokes the `CreateTableReplica` action in the
    #   destination Region.
    #
    # * New parameters for an existing replica. This request invokes the
    #   `UpdateTable` action in the destination Region.
    #
    # * An existing replica to be deleted. The request invokes the
    #   `DeleteTableReplica` action in the destination Region, deleting the
    #   replica and all if its items in the destination Region.
    #
    # <note markdown="1"> When you manually remove a table or global table replica, you do not
    # automatically remove any associated scalable targets, scaling
    # policies, or CloudWatch alarms.
    #
    #  </note>
    #
    # @note When making an API call, you may pass ReplicationGroupUpdate
    #   data as a hash:
    #
    #       {
    #         create: {
    #           region_name: "RegionName", # required
    #           kms_master_key_id: "KMSMasterKeyId",
    #           provisioned_throughput_override: {
    #             read_capacity_units: 1,
    #           },
    #           global_secondary_indexes: [
    #             {
    #               index_name: "IndexName", # required
    #               provisioned_throughput_override: {
    #                 read_capacity_units: 1,
    #               },
    #             },
    #           ],
    #           table_class_override: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #         },
    #         update: {
    #           region_name: "RegionName", # required
    #           kms_master_key_id: "KMSMasterKeyId",
    #           provisioned_throughput_override: {
    #             read_capacity_units: 1,
    #           },
    #           global_secondary_indexes: [
    #             {
    #               index_name: "IndexName", # required
    #               provisioned_throughput_override: {
    #                 read_capacity_units: 1,
    #               },
    #             },
    #           ],
    #           table_class_override: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #         },
    #         delete: {
    #           region_name: "RegionName", # required
    #         },
    #       }
    #
    # @!attribute [rw] create
    #   The parameters required for creating a replica for the table.
    #   @return [Types::CreateReplicationGroupMemberAction]
    #
    # @!attribute [rw] update
    #   The parameters required for updating a replica for the table.
    #   @return [Types::UpdateReplicationGroupMemberAction]
    #
    # @!attribute [rw] delete
    #   The parameters required for deleting a replica for the table.
    #   @return [Types::DeleteReplicationGroupMemberAction]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ReplicationGroupUpdate AWS API Documentation
    #
    class ReplicationGroupUpdate < Struct.new(
      :create,
      :update,
      :delete)
      SENSITIVE = []
      include Aws::Structure
    end

    # Throughput exceeds the current throughput quota for your account.
    # Please contact [Amazon Web Services Support][1] to request a quota
    # increase.
    #
    #
    #
    # [1]: https://aws.amazon.com/support
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/RequestLimitExceeded AWS API Documentation
    #
    class RequestLimitExceeded < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The operation conflicts with the resource's availability. For
    # example, you attempted to recreate an existing table, or tried to
    # delete a table currently in the `CREATING` state.
    #
    # @!attribute [rw] message
    #   The resource which is being attempted to be changed is in use.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ResourceInUseException AWS API Documentation
    #
    class ResourceInUseException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The operation tried to access a nonexistent table or index. The
    # resource might not be specified correctly, or its status might not be
    # `ACTIVE`.
    #
    # @!attribute [rw] message
    #   The resource which is being requested does not exist.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ResourceNotFoundException AWS API Documentation
    #
    class ResourceNotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains details for the restore.
    #
    # @!attribute [rw] source_backup_arn
    #   The Amazon Resource Name (ARN) of the backup from which the table
    #   was restored.
    #   @return [String]
    #
    # @!attribute [rw] source_table_arn
    #   The ARN of the source table of the backup that is being restored.
    #   @return [String]
    #
    # @!attribute [rw] restore_date_time
    #   Point in time or source backup time.
    #   @return [Time]
    #
    # @!attribute [rw] restore_in_progress
    #   Indicates if a restore is in progress or not.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/RestoreSummary AWS API Documentation
    #
    class RestoreSummary < Struct.new(
      :source_backup_arn,
      :source_table_arn,
      :restore_date_time,
      :restore_in_progress)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass RestoreTableFromBackupInput
    #   data as a hash:
    #
    #       {
    #         target_table_name: "TableName", # required
    #         backup_arn: "BackupArn", # required
    #         billing_mode_override: "PROVISIONED", # accepts PROVISIONED, PAY_PER_REQUEST
    #         global_secondary_index_override: [
    #           {
    #             index_name: "IndexName", # required
    #             key_schema: [ # required
    #               {
    #                 attribute_name: "KeySchemaAttributeName", # required
    #                 key_type: "HASH", # required, accepts HASH, RANGE
    #               },
    #             ],
    #             projection: { # required
    #               projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #               non_key_attributes: ["NonKeyAttributeName"],
    #             },
    #             provisioned_throughput: {
    #               read_capacity_units: 1, # required
    #               write_capacity_units: 1, # required
    #             },
    #           },
    #         ],
    #         local_secondary_index_override: [
    #           {
    #             index_name: "IndexName", # required
    #             key_schema: [ # required
    #               {
    #                 attribute_name: "KeySchemaAttributeName", # required
    #                 key_type: "HASH", # required, accepts HASH, RANGE
    #               },
    #             ],
    #             projection: { # required
    #               projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #               non_key_attributes: ["NonKeyAttributeName"],
    #             },
    #           },
    #         ],
    #         provisioned_throughput_override: {
    #           read_capacity_units: 1, # required
    #           write_capacity_units: 1, # required
    #         },
    #         sse_specification_override: {
    #           enabled: false,
    #           sse_type: "AES256", # accepts AES256, KMS
    #           kms_master_key_id: "KMSMasterKeyId",
    #         },
    #       }
    #
    # @!attribute [rw] target_table_name
    #   The name of the new table to which the backup must be restored.
    #   @return [String]
    #
    # @!attribute [rw] backup_arn
    #   The Amazon Resource Name (ARN) associated with the backup.
    #   @return [String]
    #
    # @!attribute [rw] billing_mode_override
    #   The billing mode of the restored table.
    #   @return [String]
    #
    # @!attribute [rw] global_secondary_index_override
    #   List of global secondary indexes for the restored table. The indexes
    #   provided should match existing secondary indexes. You can choose to
    #   exclude some or all of the indexes at the time of restore.
    #   @return [Array<Types::GlobalSecondaryIndex>]
    #
    # @!attribute [rw] local_secondary_index_override
    #   List of local secondary indexes for the restored table. The indexes
    #   provided should match existing secondary indexes. You can choose to
    #   exclude some or all of the indexes at the time of restore.
    #   @return [Array<Types::LocalSecondaryIndex>]
    #
    # @!attribute [rw] provisioned_throughput_override
    #   Provisioned throughput settings for the restored table.
    #   @return [Types::ProvisionedThroughput]
    #
    # @!attribute [rw] sse_specification_override
    #   The new server-side encryption settings for the restored table.
    #   @return [Types::SSESpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/RestoreTableFromBackupInput AWS API Documentation
    #
    class RestoreTableFromBackupInput < Struct.new(
      :target_table_name,
      :backup_arn,
      :billing_mode_override,
      :global_secondary_index_override,
      :local_secondary_index_override,
      :provisioned_throughput_override,
      :sse_specification_override)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] table_description
    #   The description of the table created from an existing backup.
    #   @return [Types::TableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/RestoreTableFromBackupOutput AWS API Documentation
    #
    class RestoreTableFromBackupOutput < Struct.new(
      :table_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass RestoreTableToPointInTimeInput
    #   data as a hash:
    #
    #       {
    #         source_table_arn: "TableArn",
    #         source_table_name: "TableName",
    #         target_table_name: "TableName", # required
    #         use_latest_restorable_time: false,
    #         restore_date_time: Time.now,
    #         billing_mode_override: "PROVISIONED", # accepts PROVISIONED, PAY_PER_REQUEST
    #         global_secondary_index_override: [
    #           {
    #             index_name: "IndexName", # required
    #             key_schema: [ # required
    #               {
    #                 attribute_name: "KeySchemaAttributeName", # required
    #                 key_type: "HASH", # required, accepts HASH, RANGE
    #               },
    #             ],
    #             projection: { # required
    #               projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #               non_key_attributes: ["NonKeyAttributeName"],
    #             },
    #             provisioned_throughput: {
    #               read_capacity_units: 1, # required
    #               write_capacity_units: 1, # required
    #             },
    #           },
    #         ],
    #         local_secondary_index_override: [
    #           {
    #             index_name: "IndexName", # required
    #             key_schema: [ # required
    #               {
    #                 attribute_name: "KeySchemaAttributeName", # required
    #                 key_type: "HASH", # required, accepts HASH, RANGE
    #               },
    #             ],
    #             projection: { # required
    #               projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #               non_key_attributes: ["NonKeyAttributeName"],
    #             },
    #           },
    #         ],
    #         provisioned_throughput_override: {
    #           read_capacity_units: 1, # required
    #           write_capacity_units: 1, # required
    #         },
    #         sse_specification_override: {
    #           enabled: false,
    #           sse_type: "AES256", # accepts AES256, KMS
    #           kms_master_key_id: "KMSMasterKeyId",
    #         },
    #       }
    #
    # @!attribute [rw] source_table_arn
    #   The DynamoDB table that will be restored. This value is an Amazon
    #   Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] source_table_name
    #   Name of the source table that is being restored.
    #   @return [String]
    #
    # @!attribute [rw] target_table_name
    #   The name of the new table to which it must be restored to.
    #   @return [String]
    #
    # @!attribute [rw] use_latest_restorable_time
    #   Restore the table to the latest possible time.
    #   `LatestRestorableDateTime` is typically 5 minutes before the current
    #   time.
    #   @return [Boolean]
    #
    # @!attribute [rw] restore_date_time
    #   Time in the past to restore the table to.
    #   @return [Time]
    #
    # @!attribute [rw] billing_mode_override
    #   The billing mode of the restored table.
    #   @return [String]
    #
    # @!attribute [rw] global_secondary_index_override
    #   List of global secondary indexes for the restored table. The indexes
    #   provided should match existing secondary indexes. You can choose to
    #   exclude some or all of the indexes at the time of restore.
    #   @return [Array<Types::GlobalSecondaryIndex>]
    #
    # @!attribute [rw] local_secondary_index_override
    #   List of local secondary indexes for the restored table. The indexes
    #   provided should match existing secondary indexes. You can choose to
    #   exclude some or all of the indexes at the time of restore.
    #   @return [Array<Types::LocalSecondaryIndex>]
    #
    # @!attribute [rw] provisioned_throughput_override
    #   Provisioned throughput settings for the restored table.
    #   @return [Types::ProvisionedThroughput]
    #
    # @!attribute [rw] sse_specification_override
    #   The new server-side encryption settings for the restored table.
    #   @return [Types::SSESpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/RestoreTableToPointInTimeInput AWS API Documentation
    #
    class RestoreTableToPointInTimeInput < Struct.new(
      :source_table_arn,
      :source_table_name,
      :target_table_name,
      :use_latest_restorable_time,
      :restore_date_time,
      :billing_mode_override,
      :global_secondary_index_override,
      :local_secondary_index_override,
      :provisioned_throughput_override,
      :sse_specification_override)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] table_description
    #   Represents the properties of a table.
    #   @return [Types::TableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/RestoreTableToPointInTimeOutput AWS API Documentation
    #
    class RestoreTableToPointInTimeOutput < Struct.new(
      :table_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # The description of the server-side encryption status on the specified
    # table.
    #
    # @!attribute [rw] status
    #   Represents the current state of server-side encryption. The only
    #   supported values are:
    #
    #   * `ENABLED` - Server-side encryption is enabled.
    #
    #   * `UPDATING` - Server-side encryption is being updated.
    #   @return [String]
    #
    # @!attribute [rw] sse_type
    #   Server-side encryption type. The only supported value is:
    #
    #   * `KMS` - Server-side encryption that uses Key Management Service.
    #     The key is stored in your account and is managed by KMS (KMS
    #     charges apply).
    #
    #   ^
    #   @return [String]
    #
    # @!attribute [rw] kms_master_key_arn
    #   The KMS key ARN used for the KMS encryption.
    #   @return [String]
    #
    # @!attribute [rw] inaccessible_encryption_date_time
    #   Indicates the time, in UNIX epoch date format, when DynamoDB
    #   detected that the table's KMS key was inaccessible. This attribute
    #   will automatically be cleared when DynamoDB detects that the
    #   table's KMS key is accessible again. DynamoDB will initiate the
    #   table archival process when table's KMS key remains inaccessible
    #   for more than seven days from this date.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/SSEDescription AWS API Documentation
    #
    class SSEDescription < Struct.new(
      :status,
      :sse_type,
      :kms_master_key_arn,
      :inaccessible_encryption_date_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the settings used to enable server-side encryption.
    #
    # @note When making an API call, you may pass SSESpecification
    #   data as a hash:
    #
    #       {
    #         enabled: false,
    #         sse_type: "AES256", # accepts AES256, KMS
    #         kms_master_key_id: "KMSMasterKeyId",
    #       }
    #
    # @!attribute [rw] enabled
    #   Indicates whether server-side encryption is done using an Amazon Web
    #   Services managed key or an Amazon Web Services owned key. If enabled
    #   (true), server-side encryption type is set to `KMS` and an Amazon
    #   Web Services managed key is used (KMS charges apply). If disabled
    #   (false) or not specified, server-side encryption is set to Amazon
    #   Web Services owned key.
    #   @return [Boolean]
    #
    # @!attribute [rw] sse_type
    #   Server-side encryption type. The only supported value is:
    #
    #   * `KMS` - Server-side encryption that uses Key Management Service.
    #     The key is stored in your account and is managed by KMS (KMS
    #     charges apply).
    #
    #   ^
    #   @return [String]
    #
    # @!attribute [rw] kms_master_key_id
    #   The KMS key that should be used for the KMS encryption. To specify a
    #   key, use its key ID, Amazon Resource Name (ARN), alias name, or
    #   alias ARN. Note that you should only provide this parameter if the
    #   key is different from the default DynamoDB key `alias/aws/dynamodb`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/SSESpecification AWS API Documentation
    #
    class SSESpecification < Struct.new(
      :enabled,
      :sse_type,
      :kms_master_key_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of a `Scan` operation.
    #
    # @note When making an API call, you may pass ScanInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         index_name: "IndexName",
    #         attributes_to_get: ["AttributeName"],
    #         limit: 1,
    #         select: "ALL_ATTRIBUTES", # accepts ALL_ATTRIBUTES, ALL_PROJECTED_ATTRIBUTES, SPECIFIC_ATTRIBUTES, COUNT
    #         scan_filter: {
    #           "AttributeName" => {
    #             attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #             comparison_operator: "EQ", # required, accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
    #           },
    #         },
    #         conditional_operator: "AND", # accepts AND, OR
    #         exclusive_start_key: {
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         total_segments: 1,
    #         segment: 1,
    #         projection_expression: "ProjectionExpression",
    #         filter_expression: "ConditionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         consistent_read: false,
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table containing the requested items; or, if you
    #   provide `IndexName`, the name of the table to which that index
    #   belongs.
    #   @return [String]
    #
    # @!attribute [rw] index_name
    #   The name of a secondary index to scan. This index can be any local
    #   secondary index or global secondary index. Note that if you use the
    #   `IndexName` parameter, you must also provide `TableName`.
    #   @return [String]
    #
    # @!attribute [rw] attributes_to_get
    #   This is a legacy parameter. Use `ProjectionExpression` instead. For
    #   more information, see [AttributesToGet][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.AttributesToGet.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] limit
    #   The maximum number of items to evaluate (not necessarily the number
    #   of matching items). If DynamoDB processes the number of items up to
    #   the limit while processing the results, it stops the operation and
    #   returns the matching values up to that point, and a key in
    #   `LastEvaluatedKey` to apply in a subsequent operation, so that you
    #   can pick up where you left off. Also, if the processed dataset size
    #   exceeds 1 MB before DynamoDB reaches this limit, it stops the
    #   operation and returns the matching values up to the limit, and a key
    #   in `LastEvaluatedKey` to apply in a subsequent operation to continue
    #   the operation. For more information, see [Working with Queries][1]
    #   in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
    #   @return [Integer]
    #
    # @!attribute [rw] select
    #   The attributes to be returned in the result. You can retrieve all
    #   item attributes, specific item attributes, the count of matching
    #   items, or in the case of an index, some or all of the attributes
    #   projected into the index.
    #
    #   * `ALL_ATTRIBUTES` - Returns all of the item attributes from the
    #     specified table or index. If you query a local secondary index,
    #     then for each matching item in the index, DynamoDB fetches the
    #     entire item from the parent table. If the index is configured to
    #     project all item attributes, then all of the data can be obtained
    #     from the local secondary index, and no fetching is required.
    #
    #   * `ALL_PROJECTED_ATTRIBUTES` - Allowed only when querying an index.
    #     Retrieves all attributes that have been projected into the index.
    #     If the index is configured to project all attributes, this return
    #     value is equivalent to specifying `ALL_ATTRIBUTES`.
    #
    #   * `COUNT` - Returns the number of matching items, rather than the
    #     matching items themselves.
    #
    #   * `SPECIFIC_ATTRIBUTES` - Returns only the attributes listed in
    #     `ProjectionExpression`. This return value is equivalent to
    #     specifying `ProjectionExpression` without specifying any value for
    #     `Select`.
    #
    #     If you query or scan a local secondary index and request only
    #     attributes that are projected into that index, the operation reads
    #     only the index and not the table. If any of the requested
    #     attributes are not projected into the local secondary index,
    #     DynamoDB fetches each of these attributes from the parent table.
    #     This extra fetching incurs additional throughput cost and latency.
    #
    #     If you query or scan a global secondary index, you can only
    #     request attributes that are projected into the index. Global
    #     secondary index queries cannot fetch attributes from the parent
    #     table.
    #
    #   If neither `Select` nor `ProjectionExpression` are specified,
    #   DynamoDB defaults to `ALL_ATTRIBUTES` when accessing a table, and
    #   `ALL_PROJECTED_ATTRIBUTES` when accessing an index. You cannot use
    #   both `Select` and `ProjectionExpression` together in a single
    #   request, unless the value for `Select` is `SPECIFIC_ATTRIBUTES`.
    #   (This usage is equivalent to specifying `ProjectionExpression`
    #   without any value for `Select`.)
    #
    #   <note markdown="1"> If you use the `ProjectionExpression` parameter, then the value for
    #   `Select` can only be `SPECIFIC_ATTRIBUTES`. Any other value for
    #   `Select` will return an error.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] scan_filter
    #   This is a legacy parameter. Use `FilterExpression` instead. For more
    #   information, see [ScanFilter][1] in the *Amazon DynamoDB Developer
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.ScanFilter.html
    #   @return [Hash<String,Types::Condition>]
    #
    # @!attribute [rw] conditional_operator
    #   This is a legacy parameter. Use `FilterExpression` instead. For more
    #   information, see [ConditionalOperator][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.ConditionalOperator.html
    #   @return [String]
    #
    # @!attribute [rw] exclusive_start_key
    #   The primary key of the first item that this operation will evaluate.
    #   Use the value that was returned for `LastEvaluatedKey` in the
    #   previous operation.
    #
    #   The data type for `ExclusiveStartKey` must be String, Number or
    #   Binary. No set data types are allowed.
    #
    #   In a parallel scan, a `Scan` request that includes
    #   `ExclusiveStartKey` must specify the same segment whose previous
    #   `Scan` returned the corresponding value of `LastEvaluatedKey`.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] total_segments
    #   For a parallel `Scan` request, `TotalSegments` represents the total
    #   number of segments into which the `Scan` operation will be divided.
    #   The value of `TotalSegments` corresponds to the number of
    #   application workers that will perform the parallel scan. For
    #   example, if you want to use four application threads to scan a table
    #   or an index, specify a `TotalSegments` value of 4.
    #
    #   The value for `TotalSegments` must be greater than or equal to 1,
    #   and less than or equal to 1000000. If you specify a `TotalSegments`
    #   value of 1, the `Scan` operation will be sequential rather than
    #   parallel.
    #
    #   If you specify `TotalSegments`, you must also specify `Segment`.
    #   @return [Integer]
    #
    # @!attribute [rw] segment
    #   For a parallel `Scan` request, `Segment` identifies an individual
    #   segment to be scanned by an application worker.
    #
    #   Segment IDs are zero-based, so the first segment is always 0. For
    #   example, if you want to use four application threads to scan a table
    #   or an index, then the first thread specifies a `Segment` value of 0,
    #   the second thread specifies 1, and so on.
    #
    #   The value of `LastEvaluatedKey` returned from a parallel `Scan`
    #   request must be used as `ExclusiveStartKey` with the same segment ID
    #   in a subsequent `Scan` operation.
    #
    #   The value for `Segment` must be greater than or equal to 0, and less
    #   than the value provided for `TotalSegments`.
    #
    #   If you provide `Segment`, you must also provide `TotalSegments`.
    #   @return [Integer]
    #
    # @!attribute [rw] projection_expression
    #   A string that identifies one or more attributes to retrieve from the
    #   specified table or index. These attributes can include scalars,
    #   sets, or elements of a JSON document. The attributes in the
    #   expression must be separated by commas.
    #
    #   If no attribute names are specified, then all attributes will be
    #   returned. If any of the requested attributes are not found, they
    #   will not appear in the result.
    #
    #   For more information, see [Specifying Item Attributes][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [String]
    #
    # @!attribute [rw] filter_expression
    #   A string that contains conditions that DynamoDB applies after the
    #   `Scan` operation, but before the data is returned to you. Items that
    #   do not satisfy the `FilterExpression` criteria are not returned.
    #
    #   <note markdown="1"> A `FilterExpression` is applied after the items have already been
    #   read; the process of filtering does not consume any additional read
    #   capacity units.
    #
    #    </note>
    #
    #   For more information, see [Filter Expressions][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#Query.FilterExpression
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression. The following are some use cases for using
    #   `ExpressionAttributeNames`\:
    #
    #   * To access an attribute whose name conflicts with a DynamoDB
    #     reserved word.
    #
    #   * To create a placeholder for repeating occurrences of an attribute
    #     name in an expression.
    #
    #   * To prevent special characters in an attribute name from being
    #     misinterpreted in an expression.
    #
    #   Use the **#** character in an expression to dereference an attribute
    #   name. For example, consider the following attribute name:
    #
    #   * `Percentile`
    #
    #   ^
    #
    #   The name of this attribute conflicts with a reserved word, so it
    #   cannot be used directly in an expression. (For the complete list of
    #   reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
    #   Developer Guide*). To work around this, you could specify the
    #   following for `ExpressionAttributeNames`\:
    #
    #   * `\{"#P":"Percentile"\}`
    #
    #   ^
    #
    #   You could then use this substitution in an expression, as in this
    #   example:
    #
    #   * `#P = :val`
    #
    #   ^
    #
    #   <note markdown="1"> Tokens that begin with the **\:** character are *expression
    #   attribute values*, which are placeholders for the actual value at
    #   runtime.
    #
    #    </note>
    #
    #   For more information on expression attribute names, see [Specifying
    #   Item Attributes][2] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #
    #   Use the **\:** (colon) character in an expression to dereference an
    #   attribute value. For example, suppose that you wanted to check
    #   whether the value of the `ProductStatus` attribute was one of the
    #   following:
    #
    #   `Available | Backordered | Discontinued`
    #
    #   You would first need to specify `ExpressionAttributeValues` as
    #   follows:
    #
    #   `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
    #   ":disc":\{"S":"Discontinued"\} \}`
    #
    #   You could then use these values in an expression, such as this:
    #
    #   `ProductStatus IN (:avail, :back, :disc)`
    #
    #   For more information on expression attribute values, see [Condition
    #   Expressions][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] consistent_read
    #   A Boolean value that determines the read consistency model during
    #   the scan:
    #
    #   * If `ConsistentRead` is `false`, then the data returned from `Scan`
    #     might not contain the results from other recently completed write
    #     operations (`PutItem`, `UpdateItem`, or `DeleteItem`).
    #
    #   * If `ConsistentRead` is `true`, then all of the write operations
    #     that completed before the `Scan` began are guaranteed to be
    #     contained in the `Scan` response.
    #
    #   The default setting for `ConsistentRead` is `false`.
    #
    #   The `ConsistentRead` parameter is not supported on global secondary
    #   indexes. If you scan a global secondary index with `ConsistentRead`
    #   set to true, you will receive a `ValidationException`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ScanInput AWS API Documentation
    #
    class ScanInput < Struct.new(
      :table_name,
      :index_name,
      :attributes_to_get,
      :limit,
      :select,
      :scan_filter,
      :conditional_operator,
      :exclusive_start_key,
      :return_consumed_capacity,
      :total_segments,
      :segment,
      :projection_expression,
      :filter_expression,
      :expression_attribute_names,
      :expression_attribute_values,
      :consistent_read)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a `Scan` operation.
    #
    # @!attribute [rw] items
    #   An array of item attributes that match the scan criteria. Each
    #   element in this array consists of an attribute name and the value
    #   for that attribute.
    #   @return [Array<Hash<String,Types::AttributeValue>>]
    #
    # @!attribute [rw] count
    #   The number of items in the response.
    #
    #   If you set `ScanFilter` in the request, then `Count` is the number
    #   of items returned after the filter was applied, and `ScannedCount`
    #   is the number of matching items before the filter was applied.
    #
    #   If you did not use a filter in the request, then `Count` is the same
    #   as `ScannedCount`.
    #   @return [Integer]
    #
    # @!attribute [rw] scanned_count
    #   The number of items evaluated, before any `ScanFilter` is applied. A
    #   high `ScannedCount` value with few, or no, `Count` results indicates
    #   an inefficient `Scan` operation. For more information, see [Count
    #   and ScannedCount][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #   If you did not use a filter in the request, then `ScannedCount` is
    #   the same as `Count`.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#Count
    #   @return [Integer]
    #
    # @!attribute [rw] last_evaluated_key
    #   The primary key of the item where the operation stopped, inclusive
    #   of the previous result set. Use this value to start a new operation,
    #   excluding this value in the new request.
    #
    #   If `LastEvaluatedKey` is empty, then the "last page" of results
    #   has been processed and there is no more data to be retrieved.
    #
    #   If `LastEvaluatedKey` is not empty, it does not necessarily mean
    #   that there is more data in the result set. The only way to know when
    #   you have reached the end of the result set is when
    #   `LastEvaluatedKey` is empty.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the `Scan` operation. The data
    #   returned includes the total provisioned throughput consumed, along
    #   with statistics for the table and any indexes involved in the
    #   operation. `ConsumedCapacity` is only returned if the
    #   `ReturnConsumedCapacity` parameter was specified. For more
    #   information, see [Provisioned Throughput][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
    #   @return [Types::ConsumedCapacity]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/ScanOutput AWS API Documentation
    #
    class ScanOutput < Struct.new(
      :items,
      :count,
      :scanned_count,
      :last_evaluated_key,
      :consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the details of the table when the backup was created.
    #
    # @!attribute [rw] table_name
    #   The name of the table for which the backup was created.
    #   @return [String]
    #
    # @!attribute [rw] table_id
    #   Unique identifier for the table for which the backup was created.
    #   @return [String]
    #
    # @!attribute [rw] table_arn
    #   ARN of the table for which backup was created.
    #   @return [String]
    #
    # @!attribute [rw] table_size_bytes
    #   Size of the table in bytes. Note that this is an approximate value.
    #   @return [Integer]
    #
    # @!attribute [rw] key_schema
    #   Schema of the table.
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] table_creation_date_time
    #   Time when the source table was created.
    #   @return [Time]
    #
    # @!attribute [rw] provisioned_throughput
    #   Read IOPs and Write IOPS on the table when the backup was created.
    #   @return [Types::ProvisionedThroughput]
    #
    # @!attribute [rw] item_count
    #   Number of items in the table. Note that this is an approximate
    #   value.
    #   @return [Integer]
    #
    # @!attribute [rw] billing_mode
    #   Controls how you are charged for read and write throughput and how
    #   you manage capacity. This setting can be changed later.
    #
    #   * `PROVISIONED` - Sets the read/write capacity mode to
    #     `PROVISIONED`. We recommend using `PROVISIONED` for predictable
    #     workloads.
    #
    #   * `PAY_PER_REQUEST` - Sets the read/write capacity mode to
    #     `PAY_PER_REQUEST`. We recommend using `PAY_PER_REQUEST` for
    #     unpredictable workloads.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/SourceTableDetails AWS API Documentation
    #
    class SourceTableDetails < Struct.new(
      :table_name,
      :table_id,
      :table_arn,
      :table_size_bytes,
      :key_schema,
      :table_creation_date_time,
      :provisioned_throughput,
      :item_count,
      :billing_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the details of the features enabled on the table when the
    # backup was created. For example, LSIs, GSIs, streams, TTL.
    #
    # @!attribute [rw] local_secondary_indexes
    #   Represents the LSI properties for the table when the backup was
    #   created. It includes the IndexName, KeySchema and Projection for the
    #   LSIs on the table at the time of backup.
    #   @return [Array<Types::LocalSecondaryIndexInfo>]
    #
    # @!attribute [rw] global_secondary_indexes
    #   Represents the GSI properties for the table when the backup was
    #   created. It includes the IndexName, KeySchema, Projection, and
    #   ProvisionedThroughput for the GSIs on the table at the time of
    #   backup.
    #   @return [Array<Types::GlobalSecondaryIndexInfo>]
    #
    # @!attribute [rw] stream_description
    #   Stream settings on the table when the backup was created.
    #   @return [Types::StreamSpecification]
    #
    # @!attribute [rw] time_to_live_description
    #   Time to Live settings on the table when the backup was created.
    #   @return [Types::TimeToLiveDescription]
    #
    # @!attribute [rw] sse_description
    #   The description of the server-side encryption status on the table
    #   when the backup was created.
    #   @return [Types::SSEDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/SourceTableFeatureDetails AWS API Documentation
    #
    class SourceTableFeatureDetails < Struct.new(
      :local_secondary_indexes,
      :global_secondary_indexes,
      :stream_description,
      :time_to_live_description,
      :sse_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the DynamoDB Streams configuration for a table in DynamoDB.
    #
    # @note When making an API call, you may pass StreamSpecification
    #   data as a hash:
    #
    #       {
    #         stream_enabled: false, # required
    #         stream_view_type: "NEW_IMAGE", # accepts NEW_IMAGE, OLD_IMAGE, NEW_AND_OLD_IMAGES, KEYS_ONLY
    #       }
    #
    # @!attribute [rw] stream_enabled
    #   Indicates whether DynamoDB Streams is enabled (true) or disabled
    #   (false) on the table.
    #   @return [Boolean]
    #
    # @!attribute [rw] stream_view_type
    #   When an item in the table is modified, `StreamViewType` determines
    #   what information is written to the stream for this table. Valid
    #   values for `StreamViewType` are:
    #
    #   * `KEYS_ONLY` - Only the key attributes of the modified item are
    #     written to the stream.
    #
    #   * `NEW_IMAGE` - The entire item, as it appears after it was
    #     modified, is written to the stream.
    #
    #   * `OLD_IMAGE` - The entire item, as it appeared before it was
    #     modified, is written to the stream.
    #
    #   * `NEW_AND_OLD_IMAGES` - Both the new and the old item images of the
    #     item are written to the stream.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/StreamSpecification AWS API Documentation
    #
    class StreamSpecification < Struct.new(
      :stream_enabled,
      :stream_view_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # A target table with the specified name already exists.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TableAlreadyExistsException AWS API Documentation
    #
    class TableAlreadyExistsException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the auto scaling configuration for a global table.
    #
    # @!attribute [rw] table_name
    #   The name of the table.
    #   @return [String]
    #
    # @!attribute [rw] table_status
    #   The current state of the table:
    #
    #   * `CREATING` - The table is being created.
    #
    #   * `UPDATING` - The table is being updated.
    #
    #   * `DELETING` - The table is being deleted.
    #
    #   * `ACTIVE` - The table is ready for use.
    #   @return [String]
    #
    # @!attribute [rw] replicas
    #   Represents replicas of the global table.
    #   @return [Array<Types::ReplicaAutoScalingDescription>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TableAutoScalingDescription AWS API Documentation
    #
    class TableAutoScalingDescription < Struct.new(
      :table_name,
      :table_status,
      :replicas)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains details of the table class.
    #
    # @!attribute [rw] table_class
    #   The table class of the specified table. Valid values are `STANDARD`
    #   and `STANDARD_INFREQUENT_ACCESS`.
    #   @return [String]
    #
    # @!attribute [rw] last_update_date_time
    #   The date and time at which the table class was last updated.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TableClassSummary AWS API Documentation
    #
    class TableClassSummary < Struct.new(
      :table_class,
      :last_update_date_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the properties of a table.
    #
    # @!attribute [rw] attribute_definitions
    #   An array of `AttributeDefinition` objects. Each of these objects
    #   describes one attribute in the table and index key schema.
    #
    #   Each `AttributeDefinition` object in this array is composed of:
    #
    #   * `AttributeName` - The name of the attribute.
    #
    #   * `AttributeType` - The data type for the attribute.
    #   @return [Array<Types::AttributeDefinition>]
    #
    # @!attribute [rw] table_name
    #   The name of the table.
    #   @return [String]
    #
    # @!attribute [rw] key_schema
    #   The primary key structure for the table. Each `KeySchemaElement`
    #   consists of:
    #
    #   * `AttributeName` - The name of the attribute.
    #
    #   * `KeyType` - The role of the attribute:
    #
    #     * `HASH` - partition key
    #
    #     * `RANGE` - sort key
    #
    #     <note markdown="1"> The partition key of an item is also known as its *hash
    #     attribute*. The term "hash attribute" derives from DynamoDB's
    #     usage of an internal hash function to evenly distribute data items
    #     across partitions, based on their partition key values.
    #
    #      The sort key of an item is also known as its *range attribute*.
    #     The term "range attribute" derives from the way DynamoDB stores
    #     items with the same partition key physically close together, in
    #     sorted order by the sort key value.
    #
    #      </note>
    #
    #   For more information about primary keys, see [Primary Key][1] in the
    #   *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModelPrimaryKey
    #   @return [Array<Types::KeySchemaElement>]
    #
    # @!attribute [rw] table_status
    #   The current state of the table:
    #
    #   * `CREATING` - The table is being created.
    #
    #   * `UPDATING` - The table is being updated.
    #
    #   * `DELETING` - The table is being deleted.
    #
    #   * `ACTIVE` - The table is ready for use.
    #
    #   * `INACCESSIBLE_ENCRYPTION_CREDENTIALS` - The KMS key used to
    #     encrypt the table in inaccessible. Table operations may fail due
    #     to failure to use the KMS key. DynamoDB will initiate the table
    #     archival process when a table's KMS key remains inaccessible for
    #     more than seven days.
    #
    #   * `ARCHIVING` - The table is being archived. Operations are not
    #     allowed until archival is complete.
    #
    #   * `ARCHIVED` - The table has been archived. See the ArchivalReason
    #     for more information.
    #   @return [String]
    #
    # @!attribute [rw] creation_date_time
    #   The date and time when the table was created, in [UNIX epoch
    #   time][1] format.
    #
    #
    #
    #   [1]: http://www.epochconverter.com/
    #   @return [Time]
    #
    # @!attribute [rw] provisioned_throughput
    #   The provisioned throughput settings for the table, consisting of
    #   read and write capacity units, along with data about increases and
    #   decreases.
    #   @return [Types::ProvisionedThroughputDescription]
    #
    # @!attribute [rw] table_size_bytes
    #   The total size of the specified table, in bytes. DynamoDB updates
    #   this value approximately every six hours. Recent changes might not
    #   be reflected in this value.
    #   @return [Integer]
    #
    # @!attribute [rw] item_count
    #   The number of items in the specified table. DynamoDB updates this
    #   value approximately every six hours. Recent changes might not be
    #   reflected in this value.
    #   @return [Integer]
    #
    # @!attribute [rw] table_arn
    #   The Amazon Resource Name (ARN) that uniquely identifies the table.
    #   @return [String]
    #
    # @!attribute [rw] table_id
    #   Unique identifier for the table for which the backup was created.
    #   @return [String]
    #
    # @!attribute [rw] billing_mode_summary
    #   Contains the details for the read/write capacity mode.
    #   @return [Types::BillingModeSummary]
    #
    # @!attribute [rw] local_secondary_indexes
    #   Represents one or more local secondary indexes on the table. Each
    #   index is scoped to a given partition key value. Tables with one or
    #   more local secondary indexes are subject to an item collection size
    #   limit, where the amount of data within a given item collection
    #   cannot exceed 10 GB. Each element is composed of:
    #
    #   * `IndexName` - The name of the local secondary index.
    #
    #   * `KeySchema` - Specifies the complete index key schema. The
    #     attribute names in the key schema must be between 1 and 255
    #     characters (inclusive). The key schema must begin with the same
    #     partition key as the table.
    #
    #   * `Projection` - Specifies attributes that are copied (projected)
    #     from the table into the index. These are in addition to the
    #     primary key attributes and index key attributes, which are
    #     automatically projected. Each attribute specification is composed
    #     of:
    #
    #     * `ProjectionType` - One of the following:
    #
    #       * `KEYS_ONLY` - Only the index and primary keys are projected
    #         into the index.
    #
    #       * `INCLUDE` - Only the specified table attributes are projected
    #         into the index. The list of projected attributes is in
    #         `NonKeyAttributes`.
    #
    #       * `ALL` - All of the table attributes are projected into the
    #         index.
    #
    #     * `NonKeyAttributes` - A list of one or more non-key attribute
    #       names that are projected into the secondary index. The total
    #       count of attributes provided in `NonKeyAttributes`, summed
    #       across all of the secondary indexes, must not exceed 100. If you
    #       project the same attribute into two different indexes, this
    #       counts as two distinct attributes when determining the total.
    #
    #   * `IndexSizeBytes` - Represents the total size of the index, in
    #     bytes. DynamoDB updates this value approximately every six hours.
    #     Recent changes might not be reflected in this value.
    #
    #   * `ItemCount` - Represents the number of items in the index.
    #     DynamoDB updates this value approximately every six hours. Recent
    #     changes might not be reflected in this value.
    #
    #   If the table is in the `DELETING` state, no information about
    #   indexes will be returned.
    #   @return [Array<Types::LocalSecondaryIndexDescription>]
    #
    # @!attribute [rw] global_secondary_indexes
    #   The global secondary indexes, if any, on the table. Each index is
    #   scoped to a given partition key value. Each element is composed of:
    #
    #   * `Backfilling` - If true, then the index is currently in the
    #     backfilling phase. Backfilling occurs only when a new global
    #     secondary index is added to the table. It is the process by which
    #     DynamoDB populates the new index with data from the table. (This
    #     attribute does not appear for indexes that were created during a
    #     `CreateTable` operation.)
    #
    #     You can delete an index that is being created during the
    #     `Backfilling` phase when `IndexStatus` is set to CREATING and
    #     `Backfilling` is true. You can't delete the index that is being
    #     created when `IndexStatus` is set to CREATING and `Backfilling` is
    #     false. (This attribute does not appear for indexes that were
    #     created during a `CreateTable` operation.)
    #
    #   * `IndexName` - The name of the global secondary index.
    #
    #   * `IndexSizeBytes` - The total size of the global secondary index,
    #     in bytes. DynamoDB updates this value approximately every six
    #     hours. Recent changes might not be reflected in this value.
    #
    #   * `IndexStatus` - The current status of the global secondary index:
    #
    #     * `CREATING` - The index is being created.
    #
    #     * `UPDATING` - The index is being updated.
    #
    #     * `DELETING` - The index is being deleted.
    #
    #     * `ACTIVE` - The index is ready for use.
    #
    #   * `ItemCount` - The number of items in the global secondary index.
    #     DynamoDB updates this value approximately every six hours. Recent
    #     changes might not be reflected in this value.
    #
    #   * `KeySchema` - Specifies the complete index key schema. The
    #     attribute names in the key schema must be between 1 and 255
    #     characters (inclusive). The key schema must begin with the same
    #     partition key as the table.
    #
    #   * `Projection` - Specifies attributes that are copied (projected)
    #     from the table into the index. These are in addition to the
    #     primary key attributes and index key attributes, which are
    #     automatically projected. Each attribute specification is composed
    #     of:
    #
    #     * `ProjectionType` - One of the following:
    #
    #       * `KEYS_ONLY` - Only the index and primary keys are projected
    #         into the index.
    #
    #       * `INCLUDE` - In addition to the attributes described in
    #         `KEYS_ONLY`, the secondary index will include other non-key
    #         attributes that you specify.
    #
    #       * `ALL` - All of the table attributes are projected into the
    #         index.
    #
    #     * `NonKeyAttributes` - A list of one or more non-key attribute
    #       names that are projected into the secondary index. The total
    #       count of attributes provided in `NonKeyAttributes`, summed
    #       across all of the secondary indexes, must not exceed 100. If you
    #       project the same attribute into two different indexes, this
    #       counts as two distinct attributes when determining the total.
    #
    #   * `ProvisionedThroughput` - The provisioned throughput settings for
    #     the global secondary index, consisting of read and write capacity
    #     units, along with data about increases and decreases.
    #
    #   If the table is in the `DELETING` state, no information about
    #   indexes will be returned.
    #   @return [Array<Types::GlobalSecondaryIndexDescription>]
    #
    # @!attribute [rw] stream_specification
    #   The current DynamoDB Streams configuration for the table.
    #   @return [Types::StreamSpecification]
    #
    # @!attribute [rw] latest_stream_label
    #   A timestamp, in ISO 8601 format, for this stream.
    #
    #   Note that `LatestStreamLabel` is not a unique identifier for the
    #   stream, because it is possible that a stream from another table
    #   might have the same timestamp. However, the combination of the
    #   following three elements is guaranteed to be unique:
    #
    #   * Amazon Web Services customer ID
    #
    #   * Table name
    #
    #   * `StreamLabel`
    #   @return [String]
    #
    # @!attribute [rw] latest_stream_arn
    #   The Amazon Resource Name (ARN) that uniquely identifies the latest
    #   stream for this table.
    #   @return [String]
    #
    # @!attribute [rw] global_table_version
    #   Represents the version of [global tables][1] in use, if the table is
    #   replicated across Amazon Web Services Regions.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html
    #   @return [String]
    #
    # @!attribute [rw] replicas
    #   Represents replicas of the table.
    #   @return [Array<Types::ReplicaDescription>]
    #
    # @!attribute [rw] restore_summary
    #   Contains details for the restore.
    #   @return [Types::RestoreSummary]
    #
    # @!attribute [rw] sse_description
    #   The description of the server-side encryption status on the
    #   specified table.
    #   @return [Types::SSEDescription]
    #
    # @!attribute [rw] archival_summary
    #   Contains information about the table archive.
    #   @return [Types::ArchivalSummary]
    #
    # @!attribute [rw] table_class_summary
    #   Contains details of the table class.
    #   @return [Types::TableClassSummary]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TableDescription AWS API Documentation
    #
    class TableDescription < Struct.new(
      :attribute_definitions,
      :table_name,
      :key_schema,
      :table_status,
      :creation_date_time,
      :provisioned_throughput,
      :table_size_bytes,
      :item_count,
      :table_arn,
      :table_id,
      :billing_mode_summary,
      :local_secondary_indexes,
      :global_secondary_indexes,
      :stream_specification,
      :latest_stream_label,
      :latest_stream_arn,
      :global_table_version,
      :replicas,
      :restore_summary,
      :sse_description,
      :archival_summary,
      :table_class_summary)
      SENSITIVE = []
      include Aws::Structure
    end

    # A target table with the specified name is either being created or
    # deleted.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TableInUseException AWS API Documentation
    #
    class TableInUseException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # A source table with the name `TableName` does not currently exist
    # within the subscriber's account or the subscriber is operating in the
    # wrong Amazon Web Services Region.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TableNotFoundException AWS API Documentation
    #
    class TableNotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a tag. A tag is a key-value pair. You can add up to 50 tags
    # to a single DynamoDB table.
    #
    # Amazon Web Services-assigned tag names and values are automatically
    # assigned the `aws:` prefix, which the user cannot assign. Amazon Web
    # Services-assigned tag names do not count towards the tag limit of 50.
    # User-assigned tag names have the prefix `user:` in the Cost Allocation
    # Report. You cannot backdate the application of a tag.
    #
    # For an overview on tagging DynamoDB resources, see [Tagging for
    # DynamoDB][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html
    #
    # @note When making an API call, you may pass Tag
    #   data as a hash:
    #
    #       {
    #         key: "TagKeyString", # required
    #         value: "TagValueString", # required
    #       }
    #
    # @!attribute [rw] key
    #   The key of the tag. Tag keys are case sensitive. Each DynamoDB table
    #   can only have up to one tag with the same key. If you try to add an
    #   existing tag (same key), the existing tag value will be updated to
    #   the new value.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the tag. Tag values are case-sensitive and can be null.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Tag AWS API Documentation
    #
    class Tag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass TagResourceInput
    #   data as a hash:
    #
    #       {
    #         resource_arn: "ResourceArnString", # required
    #         tags: [ # required
    #           {
    #             key: "TagKeyString", # required
    #             value: "TagValueString", # required
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] resource_arn
    #   Identifies the Amazon DynamoDB resource to which tags should be
    #   added. This value is an Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags to be assigned to the Amazon DynamoDB resource.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TagResourceInput AWS API Documentation
    #
    class TagResourceInput < Struct.new(
      :resource_arn,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The description of the Time to Live (TTL) status on the specified
    # table.
    #
    # @!attribute [rw] time_to_live_status
    #   The TTL status for the table.
    #   @return [String]
    #
    # @!attribute [rw] attribute_name
    #   The name of the TTL attribute for items in the table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TimeToLiveDescription AWS API Documentation
    #
    class TimeToLiveDescription < Struct.new(
      :time_to_live_status,
      :attribute_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the settings used to enable or disable Time to Live (TTL)
    # for the specified table.
    #
    # @note When making an API call, you may pass TimeToLiveSpecification
    #   data as a hash:
    #
    #       {
    #         enabled: false, # required
    #         attribute_name: "TimeToLiveAttributeName", # required
    #       }
    #
    # @!attribute [rw] enabled
    #   Indicates whether TTL is to be enabled (true) or disabled (false) on
    #   the table.
    #   @return [Boolean]
    #
    # @!attribute [rw] attribute_name
    #   The name of the TTL attribute used to store the expiration time for
    #   items in the table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TimeToLiveSpecification AWS API Documentation
    #
    class TimeToLiveSpecification < Struct.new(
      :enabled,
      :attribute_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies an item to be retrieved as part of the transaction.
    #
    # @note When making an API call, you may pass TransactGetItem
    #   data as a hash:
    #
    #       {
    #         get: { # required
    #           key: { # required
    #             "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           table_name: "TableName", # required
    #           projection_expression: "ProjectionExpression",
    #           expression_attribute_names: {
    #             "ExpressionAttributeNameVariable" => "AttributeName",
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] get
    #   Contains the primary key that identifies the item to get, together
    #   with the name of the table that contains the item, and optionally
    #   the specific attributes of the item to retrieve.
    #   @return [Types::Get]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactGetItem AWS API Documentation
    #
    class TransactGetItem < Struct.new(
      :get)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass TransactGetItemsInput
    #   data as a hash:
    #
    #       {
    #         transact_items: [ # required
    #           {
    #             get: { # required
    #               key: { # required
    #                 "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               table_name: "TableName", # required
    #               projection_expression: "ProjectionExpression",
    #               expression_attribute_names: {
    #                 "ExpressionAttributeNameVariable" => "AttributeName",
    #               },
    #             },
    #           },
    #         ],
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #       }
    #
    # @!attribute [rw] transact_items
    #   An ordered array of up to 25 `TransactGetItem` objects, each of
    #   which contains a `Get` structure.
    #   @return [Array<Types::TransactGetItem>]
    #
    # @!attribute [rw] return_consumed_capacity
    #   A value of `TOTAL` causes consumed capacity information to be
    #   returned, and a value of `NONE` prevents that information from being
    #   returned. No other value is valid.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactGetItemsInput AWS API Documentation
    #
    class TransactGetItemsInput < Struct.new(
      :transact_items,
      :return_consumed_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] consumed_capacity
    #   If the *ReturnConsumedCapacity* value was `TOTAL`, this is an array
    #   of `ConsumedCapacity` objects, one for each table addressed by
    #   `TransactGetItem` objects in the *TransactItems* parameter. These
    #   `ConsumedCapacity` objects report the read-capacity units consumed
    #   by the `TransactGetItems` call in that table.
    #   @return [Array<Types::ConsumedCapacity>]
    #
    # @!attribute [rw] responses
    #   An ordered array of up to 25 `ItemResponse` objects, each of which
    #   corresponds to the `TransactGetItem` object in the same position in
    #   the *TransactItems* array. Each `ItemResponse` object contains a Map
    #   of the name-value pairs that are the projected attributes of the
    #   requested item.
    #
    #   If a requested item could not be retrieved, the corresponding
    #   `ItemResponse` object is Null, or if the requested item has no
    #   projected attributes, the corresponding `ItemResponse` object is an
    #   empty Map.
    #   @return [Array<Types::ItemResponse>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactGetItemsOutput AWS API Documentation
    #
    class TransactGetItemsOutput < Struct.new(
      :consumed_capacity,
      :responses)
      SENSITIVE = []
      include Aws::Structure
    end

    # A list of requests that can perform update, put, delete, or check
    # operations on multiple items in one or more tables atomically.
    #
    # @note When making an API call, you may pass TransactWriteItem
    #   data as a hash:
    #
    #       {
    #         condition_check: {
    #           key: { # required
    #             "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           table_name: "TableName", # required
    #           condition_expression: "ConditionExpression", # required
    #           expression_attribute_names: {
    #             "ExpressionAttributeNameVariable" => "AttributeName",
    #           },
    #           expression_attribute_values: {
    #             "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #         },
    #         put: {
    #           item: { # required
    #             "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           table_name: "TableName", # required
    #           condition_expression: "ConditionExpression",
    #           expression_attribute_names: {
    #             "ExpressionAttributeNameVariable" => "AttributeName",
    #           },
    #           expression_attribute_values: {
    #             "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #         },
    #         delete: {
    #           key: { # required
    #             "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           table_name: "TableName", # required
    #           condition_expression: "ConditionExpression",
    #           expression_attribute_names: {
    #             "ExpressionAttributeNameVariable" => "AttributeName",
    #           },
    #           expression_attribute_values: {
    #             "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #         },
    #         update: {
    #           key: { # required
    #             "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           update_expression: "UpdateExpression", # required
    #           table_name: "TableName", # required
    #           condition_expression: "ConditionExpression",
    #           expression_attribute_names: {
    #             "ExpressionAttributeNameVariable" => "AttributeName",
    #           },
    #           expression_attribute_values: {
    #             "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #           return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #         },
    #       }
    #
    # @!attribute [rw] condition_check
    #   A request to perform a check item operation.
    #   @return [Types::ConditionCheck]
    #
    # @!attribute [rw] put
    #   A request to perform a `PutItem` operation.
    #   @return [Types::Put]
    #
    # @!attribute [rw] delete
    #   A request to perform a `DeleteItem` operation.
    #   @return [Types::Delete]
    #
    # @!attribute [rw] update
    #   A request to perform an `UpdateItem` operation.
    #   @return [Types::Update]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactWriteItem AWS API Documentation
    #
    class TransactWriteItem < Struct.new(
      :condition_check,
      :put,
      :delete,
      :update)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass TransactWriteItemsInput
    #   data as a hash:
    #
    #       {
    #         transact_items: [ # required
    #           {
    #             condition_check: {
    #               key: { # required
    #                 "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               table_name: "TableName", # required
    #               condition_expression: "ConditionExpression", # required
    #               expression_attribute_names: {
    #                 "ExpressionAttributeNameVariable" => "AttributeName",
    #               },
    #               expression_attribute_values: {
    #                 "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #             },
    #             put: {
    #               item: { # required
    #                 "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               table_name: "TableName", # required
    #               condition_expression: "ConditionExpression",
    #               expression_attribute_names: {
    #                 "ExpressionAttributeNameVariable" => "AttributeName",
    #               },
    #               expression_attribute_values: {
    #                 "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #             },
    #             delete: {
    #               key: { # required
    #                 "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               table_name: "TableName", # required
    #               condition_expression: "ConditionExpression",
    #               expression_attribute_names: {
    #                 "ExpressionAttributeNameVariable" => "AttributeName",
    #               },
    #               expression_attribute_values: {
    #                 "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #             },
    #             update: {
    #               key: { # required
    #                 "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               update_expression: "UpdateExpression", # required
    #               table_name: "TableName", # required
    #               condition_expression: "ConditionExpression",
    #               expression_attribute_names: {
    #                 "ExpressionAttributeNameVariable" => "AttributeName",
    #               },
    #               expression_attribute_values: {
    #                 "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #               },
    #               return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #             },
    #           },
    #         ],
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
    #         client_request_token: "ClientRequestToken",
    #       }
    #
    # @!attribute [rw] transact_items
    #   An ordered array of up to 25 `TransactWriteItem` objects, each of
    #   which contains a `ConditionCheck`, `Put`, `Update`, or `Delete`
    #   object. These can operate on items in different tables, but the
    #   tables must reside in the same Amazon Web Services account and
    #   Region, and no two of them can operate on the same item.
    #   @return [Array<Types::TransactWriteItem>]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] return_item_collection_metrics
    #   Determines whether item collection metrics are returned. If set to
    #   `SIZE`, the response includes statistics about item collections (if
    #   any), that were modified during the operation and are returned in
    #   the response. If set to `NONE` (the default), no statistics are
    #   returned.
    #   @return [String]
    #
    # @!attribute [rw] client_request_token
    #   Providing a `ClientRequestToken` makes the call to
    #   `TransactWriteItems` idempotent, meaning that multiple identical
    #   calls have the same effect as one single call.
    #
    #   Although multiple identical calls using the same client request
    #   token produce the same result on the server (no side effects), the
    #   responses to the calls might not be the same. If the
    #   `ReturnConsumedCapacity>` parameter is set, then the initial
    #   `TransactWriteItems` call returns the amount of write capacity units
    #   consumed in making the changes. Subsequent `TransactWriteItems`
    #   calls with the same client token return the number of read capacity
    #   units consumed in reading the item.
    #
    #   A client request token is valid for 10 minutes after the first
    #   request that uses it is completed. After 10 minutes, any request
    #   with the same client token is treated as a new request. Do not
    #   resubmit the same request with the same client token for more than
    #   10 minutes, or the result might not be idempotent.
    #
    #   If you submit a request with the same client token but a change in
    #   other parameters within the 10-minute idempotency window, DynamoDB
    #   returns an `IdempotentParameterMismatch` exception.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactWriteItemsInput AWS API Documentation
    #
    class TransactWriteItemsInput < Struct.new(
      :transact_items,
      :return_consumed_capacity,
      :return_item_collection_metrics,
      :client_request_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the entire `TransactWriteItems`
    #   operation. The values of the list are ordered according to the
    #   ordering of the `TransactItems` request parameter.
    #   @return [Array<Types::ConsumedCapacity>]
    #
    # @!attribute [rw] item_collection_metrics
    #   A list of tables that were processed by `TransactWriteItems` and,
    #   for each table, information about any item collections that were
    #   affected by individual `UpdateItem`, `PutItem`, or `DeleteItem`
    #   operations.
    #   @return [Hash<String,Array<Types::ItemCollectionMetrics>>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactWriteItemsOutput AWS API Documentation
    #
    class TransactWriteItemsOutput < Struct.new(
      :consumed_capacity,
      :item_collection_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # The entire transaction request was canceled.
    #
    # DynamoDB cancels a `TransactWriteItems` request under the following
    # circumstances:
    #
    # * A condition in one of the condition expressions is not met.
    #
    # * A table in the `TransactWriteItems` request is in a different
    #   account or region.
    #
    # * More than one action in the `TransactWriteItems` operation targets
    #   the same item.
    #
    # * There is insufficient provisioned capacity for the transaction to be
    #   completed.
    #
    # * An item size becomes too large (larger than 400 KB), or a local
    #   secondary index (LSI) becomes too large, or a similar validation
    #   error occurs because of changes made by the transaction.
    #
    # * There is a user error, such as an invalid data format.
    #
    # DynamoDB cancels a `TransactGetItems` request under the following
    # circumstances:
    #
    # * There is an ongoing `TransactGetItems` operation that conflicts with
    #   a concurrent `PutItem`, `UpdateItem`, `DeleteItem` or
    #   `TransactWriteItems` request. In this case the `TransactGetItems`
    #   operation fails with a `TransactionCanceledException`.
    #
    # * A table in the `TransactGetItems` request is in a different account
    #   or region.
    #
    # * There is insufficient provisioned capacity for the transaction to be
    #   completed.
    #
    # * There is a user error, such as an invalid data format.
    #
    # <note markdown="1"> If using Java, DynamoDB lists the cancellation reasons on the
    # `CancellationReasons` property. This property is not set for other
    # languages. Transaction cancellation reasons are ordered in the order
    # of requested items, if an item has no error it will have `None` code
    # and `Null` message.
    #
    #  </note>
    #
    # Cancellation reason codes and possible error messages:
    #
    # * No Errors:
    #
    #   * Code: `None`
    #
    #   * Message: `null`
    #
    # * Conditional Check Failed:
    #
    #   * Code: `ConditionalCheckFailed`
    #
    #   * Message: The conditional request failed.
    #
    # * Item Collection Size Limit Exceeded:
    #
    #   * Code: `ItemCollectionSizeLimitExceeded`
    #
    #   * Message: Collection size exceeded.
    #
    # * Transaction Conflict:
    #
    #   * Code: `TransactionConflict`
    #
    #   * Message: Transaction is ongoing for the item.
    #
    # * Provisioned Throughput Exceeded:
    #
    #   * Code: `ProvisionedThroughputExceeded`
    #
    #   * Messages:
    #
    #     * The level of configured provisioned throughput for the table was
    #       exceeded. Consider increasing your provisioning level with the
    #       UpdateTable API.
    #
    #       <note markdown="1"> This Message is received when provisioned throughput is exceeded
    #       is on a provisioned DynamoDB table.
    #
    #        </note>
    #
    #     * The level of configured provisioned throughput for one or more
    #       global secondary indexes of the table was exceeded. Consider
    #       increasing your provisioning level for the under-provisioned
    #       global secondary indexes with the UpdateTable API.
    #
    #       <note markdown="1"> This message is returned when provisioned throughput is exceeded
    #       is on a provisioned GSI.
    #
    #        </note>
    #
    # * Throttling Error:
    #
    #   * Code: `ThrottlingError`
    #
    #   * Messages:
    #
    #     * Throughput exceeds the current capacity of your table or index.
    #       DynamoDB is automatically scaling your table or index so please
    #       try again shortly. If exceptions persist, check if you have a
    #       hot key:
    #       https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html.
    #
    #       <note markdown="1"> This message is returned when writes get throttled on an
    #       On-Demand table as DynamoDB is automatically scaling the table.
    #
    #        </note>
    #
    #     * Throughput exceeds the current capacity for one or more global
    #       secondary indexes. DynamoDB is automatically scaling your index
    #       so please try again shortly.
    #
    #       <note markdown="1"> This message is returned when when writes get throttled on an
    #       On-Demand GSI as DynamoDB is automatically scaling the GSI.
    #
    #        </note>
    #
    # * Validation Error:
    #
    #   * Code: `ValidationError`
    #
    #   * Messages:
    #
    #     * One or more parameter values were invalid.
    #
    #     * The update expression attempted to update the secondary index
    #       key beyond allowed size limits.
    #
    #     * The update expression attempted to update the secondary index
    #       key to unsupported type.
    #
    #     * An operand in the update expression has an incorrect data type.
    #
    #     * Item size to update has exceeded the maximum allowed size.
    #
    #     * Number overflow. Attempting to store a number with magnitude
    #       larger than supported range.
    #
    #     * Type mismatch for attribute to update.
    #
    #     * Nesting Levels have exceeded supported limits.
    #
    #     * The document path provided in the update expression is invalid
    #       for update.
    #
    #     * The provided expression refers to an attribute that does not
    #       exist in the item.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @!attribute [rw] cancellation_reasons
    #   A list of cancellation reasons.
    #   @return [Array<Types::CancellationReason>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactionCanceledException AWS API Documentation
    #
    class TransactionCanceledException < Struct.new(
      :message,
      :cancellation_reasons)
      SENSITIVE = []
      include Aws::Structure
    end

    # Operation was rejected because there is an ongoing transaction for the
    # item.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactionConflictException AWS API Documentation
    #
    class TransactionConflictException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The transaction with the given request token is already in progress.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/TransactionInProgressException AWS API Documentation
    #
    class TransactionInProgressException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass UntagResourceInput
    #   data as a hash:
    #
    #       {
    #         resource_arn: "ResourceArnString", # required
    #         tag_keys: ["TagKeyString"], # required
    #       }
    #
    # @!attribute [rw] resource_arn
    #   The DynamoDB resource that the tags will be removed from. This value
    #   is an Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] tag_keys
    #   A list of tag keys. Existing tags of the resource whose keys are
    #   members of this list will be removed from the DynamoDB resource.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UntagResourceInput AWS API Documentation
    #
    class UntagResourceInput < Struct.new(
      :resource_arn,
      :tag_keys)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to perform an `UpdateItem` operation.
    #
    # @note When making an API call, you may pass Update
    #   data as a hash:
    #
    #       {
    #         key: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         update_expression: "UpdateExpression", # required
    #         table_name: "TableName", # required
    #         condition_expression: "ConditionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         return_values_on_condition_check_failure: "ALL_OLD", # accepts ALL_OLD, NONE
    #       }
    #
    # @!attribute [rw] key
    #   The primary key of the item to be updated. Each element consists of
    #   an attribute name and a value for that attribute.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] update_expression
    #   An expression that defines one or more attributes to be updated, the
    #   action to be performed on them, and new value(s) for them.
    #   @return [String]
    #
    # @!attribute [rw] table_name
    #   Name of the table for the `UpdateItem` request.
    #   @return [String]
    #
    # @!attribute [rw] condition_expression
    #   A condition that must be satisfied in order for a conditional update
    #   to succeed.
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] return_values_on_condition_check_failure
    #   Use `ReturnValuesOnConditionCheckFailure` to get the item attributes
    #   if the `Update` condition fails. For
    #   `ReturnValuesOnConditionCheckFailure`, the valid values are: NONE,
    #   ALL\_OLD, UPDATED\_OLD, ALL\_NEW, UPDATED\_NEW.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/Update AWS API Documentation
    #
    class Update < Struct.new(
      :key,
      :update_expression,
      :table_name,
      :condition_expression,
      :expression_attribute_names,
      :expression_attribute_values,
      :return_values_on_condition_check_failure)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass UpdateContinuousBackupsInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         point_in_time_recovery_specification: { # required
    #           point_in_time_recovery_enabled: false, # required
    #         },
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table.
    #   @return [String]
    #
    # @!attribute [rw] point_in_time_recovery_specification
    #   Represents the settings used to enable point in time recovery.
    #   @return [Types::PointInTimeRecoverySpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateContinuousBackupsInput AWS API Documentation
    #
    class UpdateContinuousBackupsInput < Struct.new(
      :table_name,
      :point_in_time_recovery_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] continuous_backups_description
    #   Represents the continuous backups and point in time recovery
    #   settings on the table.
    #   @return [Types::ContinuousBackupsDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateContinuousBackupsOutput AWS API Documentation
    #
    class UpdateContinuousBackupsOutput < Struct.new(
      :continuous_backups_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass UpdateContributorInsightsInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         index_name: "IndexName",
    #         contributor_insights_action: "ENABLE", # required, accepts ENABLE, DISABLE
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table.
    #   @return [String]
    #
    # @!attribute [rw] index_name
    #   The global secondary index name, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] contributor_insights_action
    #   Represents the contributor insights action.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateContributorInsightsInput AWS API Documentation
    #
    class UpdateContributorInsightsInput < Struct.new(
      :table_name,
      :index_name,
      :contributor_insights_action)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] table_name
    #   The name of the table.
    #   @return [String]
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] contributor_insights_status
    #   The status of contributor insights
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateContributorInsightsOutput AWS API Documentation
    #
    class UpdateContributorInsightsOutput < Struct.new(
      :table_name,
      :index_name,
      :contributor_insights_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the new provisioned throughput settings to be applied to a
    # global secondary index.
    #
    # @note When making an API call, you may pass UpdateGlobalSecondaryIndexAction
    #   data as a hash:
    #
    #       {
    #         index_name: "IndexName", # required
    #         provisioned_throughput: { # required
    #           read_capacity_units: 1, # required
    #           write_capacity_units: 1, # required
    #         },
    #       }
    #
    # @!attribute [rw] index_name
    #   The name of the global secondary index to be updated.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_throughput
    #   Represents the provisioned throughput settings for the specified
    #   global secondary index.
    #
    #   For current minimum and maximum provisioned throughput values, see
    #   [Service, Account, and Table Quotas][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
    #   @return [Types::ProvisionedThroughput]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateGlobalSecondaryIndexAction AWS API Documentation
    #
    class UpdateGlobalSecondaryIndexAction < Struct.new(
      :index_name,
      :provisioned_throughput)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass UpdateGlobalTableInput
    #   data as a hash:
    #
    #       {
    #         global_table_name: "TableName", # required
    #         replica_updates: [ # required
    #           {
    #             create: {
    #               region_name: "RegionName", # required
    #             },
    #             delete: {
    #               region_name: "RegionName", # required
    #             },
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] global_table_name
    #   The global table name.
    #   @return [String]
    #
    # @!attribute [rw] replica_updates
    #   A list of Regions that should be added or removed from the global
    #   table.
    #   @return [Array<Types::ReplicaUpdate>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateGlobalTableInput AWS API Documentation
    #
    class UpdateGlobalTableInput < Struct.new(
      :global_table_name,
      :replica_updates)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] global_table_description
    #   Contains the details of the global table.
    #   @return [Types::GlobalTableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateGlobalTableOutput AWS API Documentation
    #
    class UpdateGlobalTableOutput < Struct.new(
      :global_table_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass UpdateGlobalTableSettingsInput
    #   data as a hash:
    #
    #       {
    #         global_table_name: "TableName", # required
    #         global_table_billing_mode: "PROVISIONED", # accepts PROVISIONED, PAY_PER_REQUEST
    #         global_table_provisioned_write_capacity_units: 1,
    #         global_table_provisioned_write_capacity_auto_scaling_settings_update: {
    #           minimum_units: 1,
    #           maximum_units: 1,
    #           auto_scaling_disabled: false,
    #           auto_scaling_role_arn: "AutoScalingRoleArn",
    #           scaling_policy_update: {
    #             policy_name: "AutoScalingPolicyName",
    #             target_tracking_scaling_policy_configuration: { # required
    #               disable_scale_in: false,
    #               scale_in_cooldown: 1,
    #               scale_out_cooldown: 1,
    #               target_value: 1.0, # required
    #             },
    #           },
    #         },
    #         global_table_global_secondary_index_settings_update: [
    #           {
    #             index_name: "IndexName", # required
    #             provisioned_write_capacity_units: 1,
    #             provisioned_write_capacity_auto_scaling_settings_update: {
    #               minimum_units: 1,
    #               maximum_units: 1,
    #               auto_scaling_disabled: false,
    #               auto_scaling_role_arn: "AutoScalingRoleArn",
    #               scaling_policy_update: {
    #                 policy_name: "AutoScalingPolicyName",
    #                 target_tracking_scaling_policy_configuration: { # required
    #                   disable_scale_in: false,
    #                   scale_in_cooldown: 1,
    #                   scale_out_cooldown: 1,
    #                   target_value: 1.0, # required
    #                 },
    #               },
    #             },
    #           },
    #         ],
    #         replica_settings_update: [
    #           {
    #             region_name: "RegionName", # required
    #             replica_provisioned_read_capacity_units: 1,
    #             replica_provisioned_read_capacity_auto_scaling_settings_update: {
    #               minimum_units: 1,
    #               maximum_units: 1,
    #               auto_scaling_disabled: false,
    #               auto_scaling_role_arn: "AutoScalingRoleArn",
    #               scaling_policy_update: {
    #                 policy_name: "AutoScalingPolicyName",
    #                 target_tracking_scaling_policy_configuration: { # required
    #                   disable_scale_in: false,
    #                   scale_in_cooldown: 1,
    #                   scale_out_cooldown: 1,
    #                   target_value: 1.0, # required
    #                 },
    #               },
    #             },
    #             replica_global_secondary_index_settings_update: [
    #               {
    #                 index_name: "IndexName", # required
    #                 provisioned_read_capacity_units: 1,
    #                 provisioned_read_capacity_auto_scaling_settings_update: {
    #                   minimum_units: 1,
    #                   maximum_units: 1,
    #                   auto_scaling_disabled: false,
    #                   auto_scaling_role_arn: "AutoScalingRoleArn",
    #                   scaling_policy_update: {
    #                     policy_name: "AutoScalingPolicyName",
    #                     target_tracking_scaling_policy_configuration: { # required
    #                       disable_scale_in: false,
    #                       scale_in_cooldown: 1,
    #                       scale_out_cooldown: 1,
    #                       target_value: 1.0, # required
    #                     },
    #                   },
    #                 },
    #               },
    #             ],
    #             replica_table_class: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] global_table_name
    #   The name of the global table
    #   @return [String]
    #
    # @!attribute [rw] global_table_billing_mode
    #   The billing mode of the global table. If `GlobalTableBillingMode` is
    #   not specified, the global table defaults to `PROVISIONED` capacity
    #   billing mode.
    #
    #   * `PROVISIONED` - We recommend using `PROVISIONED` for predictable
    #     workloads. `PROVISIONED` sets the billing mode to [Provisioned
    #     Mode][1].
    #
    #   * `PAY_PER_REQUEST` - We recommend using `PAY_PER_REQUEST` for
    #     unpredictable workloads. `PAY_PER_REQUEST` sets the billing mode
    #     to [On-Demand Mode][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand
    #   @return [String]
    #
    # @!attribute [rw] global_table_provisioned_write_capacity_units
    #   The maximum number of writes consumed per second before DynamoDB
    #   returns a `ThrottlingException.`
    #   @return [Integer]
    #
    # @!attribute [rw] global_table_provisioned_write_capacity_auto_scaling_settings_update
    #   Auto scaling settings for managing provisioned write capacity for
    #   the global table.
    #   @return [Types::AutoScalingSettingsUpdate]
    #
    # @!attribute [rw] global_table_global_secondary_index_settings_update
    #   Represents the settings of a global secondary index for a global
    #   table that will be modified.
    #   @return [Array<Types::GlobalTableGlobalSecondaryIndexSettingsUpdate>]
    #
    # @!attribute [rw] replica_settings_update
    #   Represents the settings for a global table in a Region that will be
    #   modified.
    #   @return [Array<Types::ReplicaSettingsUpdate>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateGlobalTableSettingsInput AWS API Documentation
    #
    class UpdateGlobalTableSettingsInput < Struct.new(
      :global_table_name,
      :global_table_billing_mode,
      :global_table_provisioned_write_capacity_units,
      :global_table_provisioned_write_capacity_auto_scaling_settings_update,
      :global_table_global_secondary_index_settings_update,
      :replica_settings_update)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] global_table_name
    #   The name of the global table.
    #   @return [String]
    #
    # @!attribute [rw] replica_settings
    #   The Region-specific settings for the global table.
    #   @return [Array<Types::ReplicaSettingsDescription>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateGlobalTableSettingsOutput AWS API Documentation
    #
    class UpdateGlobalTableSettingsOutput < Struct.new(
      :global_table_name,
      :replica_settings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of an `UpdateItem` operation.
    #
    # @note When making an API call, you may pass UpdateItemInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         key: { # required
    #           "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #         attribute_updates: {
    #           "AttributeName" => {
    #             value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #             action: "ADD", # accepts ADD, PUT, DELETE
    #           },
    #         },
    #         expected: {
    #           "AttributeName" => {
    #             value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #             exists: false,
    #             comparison_operator: "EQ", # accepts EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH
    #             attribute_value_list: ["value"], # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #         },
    #         conditional_operator: "AND", # accepts AND, OR
    #         return_values: "NONE", # accepts NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW
    #         return_consumed_capacity: "INDEXES", # accepts INDEXES, TOTAL, NONE
    #         return_item_collection_metrics: "SIZE", # accepts SIZE, NONE
    #         update_expression: "UpdateExpression",
    #         condition_expression: "ConditionExpression",
    #         expression_attribute_names: {
    #           "ExpressionAttributeNameVariable" => "AttributeName",
    #         },
    #         expression_attribute_values: {
    #           "ExpressionAttributeValueVariable" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #         },
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table containing the item to update.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The primary key of the item to be updated. Each element consists of
    #   an attribute name and a value for that attribute.
    #
    #   For the primary key, you must provide all of the attributes. For
    #   example, with a simple primary key, you only need to provide a value
    #   for the partition key. For a composite primary key, you must provide
    #   values for both the partition key and the sort key.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] attribute_updates
    #   This is a legacy parameter. Use `UpdateExpression` instead. For more
    #   information, see [AttributeUpdates][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.AttributeUpdates.html
    #   @return [Hash<String,Types::AttributeValueUpdate>]
    #
    # @!attribute [rw] expected
    #   This is a legacy parameter. Use `ConditionExpression` instead. For
    #   more information, see [Expected][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.Expected.html
    #   @return [Hash<String,Types::ExpectedAttributeValue>]
    #
    # @!attribute [rw] conditional_operator
    #   This is a legacy parameter. Use `ConditionExpression` instead. For
    #   more information, see [ConditionalOperator][1] in the *Amazon
    #   DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.ConditionalOperator.html
    #   @return [String]
    #
    # @!attribute [rw] return_values
    #   Use `ReturnValues` if you want to get the item attributes as they
    #   appear before or after they are updated. For `UpdateItem`, the valid
    #   values are:
    #
    #   * `NONE` - If `ReturnValues` is not specified, or if its value is
    #     `NONE`, then nothing is returned. (This setting is the default for
    #     `ReturnValues`.)
    #
    #   * `ALL_OLD` - Returns all of the attributes of the item, as they
    #     appeared before the UpdateItem operation.
    #
    #   * `UPDATED_OLD` - Returns only the updated attributes, as they
    #     appeared before the UpdateItem operation.
    #
    #   * `ALL_NEW` - Returns all of the attributes of the item, as they
    #     appear after the UpdateItem operation.
    #
    #   * `UPDATED_NEW` - Returns only the updated attributes, as they
    #     appear after the UpdateItem operation.
    #
    #   There is no additional cost associated with requesting a return
    #   value aside from the small network and processing overhead of
    #   receiving a larger response. No read capacity units are consumed.
    #
    #   The values returned are strongly consistent.
    #   @return [String]
    #
    # @!attribute [rw] return_consumed_capacity
    #   Determines the level of detail about either provisioned or on-demand
    #   throughput consumption that is returned in the response:
    #
    #   * `INDEXES` - The response includes the aggregate `ConsumedCapacity`
    #     for the operation, together with `ConsumedCapacity` for each table
    #     and secondary index that was accessed.
    #
    #     Note that some operations, such as `GetItem` and `BatchGetItem`,
    #     do not access any indexes at all. In these cases, specifying
    #     `INDEXES` will only return `ConsumedCapacity` information for
    #     table(s).
    #
    #   * `TOTAL` - The response includes only the aggregate
    #     `ConsumedCapacity` for the operation.
    #
    #   * `NONE` - No `ConsumedCapacity` details are included in the
    #     response.
    #   @return [String]
    #
    # @!attribute [rw] return_item_collection_metrics
    #   Determines whether item collection metrics are returned. If set to
    #   `SIZE`, the response includes statistics about item collections, if
    #   any, that were modified during the operation are returned in the
    #   response. If set to `NONE` (the default), no statistics are
    #   returned.
    #   @return [String]
    #
    # @!attribute [rw] update_expression
    #   An expression that defines one or more attributes to be updated, the
    #   action to be performed on them, and new values for them.
    #
    #   The following action values are available for `UpdateExpression`.
    #
    #   * `SET` - Adds one or more attributes and values to an item. If any
    #     of these attributes already exist, they are replaced by the new
    #     values. You can also use `SET` to add or subtract from an
    #     attribute that is of type Number. For example: `SET myNum = myNum
    #     + :val`
    #
    #     `SET` supports the following functions:
    #
    #     * `if_not_exists (path, operand)` - if the item does not contain
    #       an attribute at the specified path, then `if_not_exists`
    #       evaluates to operand; otherwise, it evaluates to path. You can
    #       use this function to avoid overwriting an attribute that may
    #       already be present in the item.
    #
    #     * `list_append (operand, operand)` - evaluates to a list with a
    #       new element added to it. You can append the new element to the
    #       start or the end of the list by reversing the order of the
    #       operands.
    #
    #     These function names are case-sensitive.
    #
    #   * `REMOVE` - Removes one or more attributes from an item.
    #
    #   * `ADD` - Adds the specified value to the item, if the attribute
    #     does not already exist. If the attribute does exist, then the
    #     behavior of `ADD` depends on the data type of the attribute:
    #
    #     * If the existing attribute is a number, and if `Value` is also a
    #       number, then `Value` is mathematically added to the existing
    #       attribute. If `Value` is a negative number, then it is
    #       subtracted from the existing attribute.
    #
    #       <note markdown="1"> If you use `ADD` to increment or decrement a number value for an
    #       item that doesn't exist before the update, DynamoDB uses `0` as
    #       the initial value.
    #
    #        Similarly, if you use `ADD` for an existing item to increment or
    #       decrement an attribute value that doesn't exist before the
    #       update, DynamoDB uses `0` as the initial value. For example,
    #       suppose that the item you want to update doesn't have an
    #       attribute named `itemcount`, but you decide to `ADD` the number
    #       `3` to this attribute anyway. DynamoDB will create the
    #       `itemcount` attribute, set its initial value to `0`, and finally
    #       add `3` to it. The result will be a new `itemcount` attribute in
    #       the item, with a value of `3`.
    #
    #        </note>
    #
    #     * If the existing data type is a set and if `Value` is also a set,
    #       then `Value` is added to the existing set. For example, if the
    #       attribute value is the set `[1,2]`, and the `ADD` action
    #       specified `[3]`, then the final attribute value is `[1,2,3]`. An
    #       error occurs if an `ADD` action is specified for a set attribute
    #       and the attribute type specified does not match the existing set
    #       type.
    #
    #       Both sets must have the same primitive data type. For example,
    #       if the existing data type is a set of strings, the `Value` must
    #       also be a set of strings.
    #
    #     The `ADD` action only supports Number and set data types. In
    #     addition, `ADD` can only be used on top-level attributes, not
    #     nested attributes.
    #
    #   * `DELETE` - Deletes an element from a set.
    #
    #     If a set of values is specified, then those values are subtracted
    #     from the old set. For example, if the attribute value was the set
    #     `[a,b,c]` and the `DELETE` action specifies `[a,c]`, then the
    #     final attribute value is `[b]`. Specifying an empty set is an
    #     error.
    #
    #     The `DELETE` action only supports set data types. In addition,
    #     `DELETE` can only be used on top-level attributes, not nested
    #     attributes.
    #
    #   You can have many actions in a single expression, such as the
    #   following: `SET a=:value1, b=:value2 DELETE :value3, :value4,
    #   :value5`
    #
    #   For more information on update expressions, see [Modifying Items and
    #   Attributes][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html
    #   @return [String]
    #
    # @!attribute [rw] condition_expression
    #   A condition that must be satisfied in order for a conditional update
    #   to succeed.
    #
    #   An expression can contain any of the following:
    #
    #   * Functions: `attribute_exists | attribute_not_exists |
    #     attribute_type | contains | begins_with | size`
    #
    #     These function names are case-sensitive.
    #
    #   * Comparison operators: `= | <> | < | > | <= | >= | BETWEEN | IN `
    #
    #   * Logical operators: `AND | OR | NOT`
    #
    #   For more information about condition expressions, see [Specifying
    #   Conditions][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
    #   @return [String]
    #
    # @!attribute [rw] expression_attribute_names
    #   One or more substitution tokens for attribute names in an
    #   expression. The following are some use cases for using
    #   `ExpressionAttributeNames`\:
    #
    #   * To access an attribute whose name conflicts with a DynamoDB
    #     reserved word.
    #
    #   * To create a placeholder for repeating occurrences of an attribute
    #     name in an expression.
    #
    #   * To prevent special characters in an attribute name from being
    #     misinterpreted in an expression.
    #
    #   Use the **#** character in an expression to dereference an attribute
    #   name. For example, consider the following attribute name:
    #
    #   * `Percentile`
    #
    #   ^
    #
    #   The name of this attribute conflicts with a reserved word, so it
    #   cannot be used directly in an expression. (For the complete list of
    #   reserved words, see [Reserved Words][1] in the *Amazon DynamoDB
    #   Developer Guide*.) To work around this, you could specify the
    #   following for `ExpressionAttributeNames`\:
    #
    #   * `\{"#P":"Percentile"\}`
    #
    #   ^
    #
    #   You could then use this substitution in an expression, as in this
    #   example:
    #
    #   * `#P = :val`
    #
    #   ^
    #
    #   <note markdown="1"> Tokens that begin with the **\:** character are *expression
    #   attribute values*, which are placeholders for the actual value at
    #   runtime.
    #
    #    </note>
    #
    #   For more information about expression attribute names, see
    #   [Specifying Item Attributes][2] in the *Amazon DynamoDB Developer
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] expression_attribute_values
    #   One or more values that can be substituted in an expression.
    #
    #   Use the **\:** (colon) character in an expression to dereference an
    #   attribute value. For example, suppose that you wanted to check
    #   whether the value of the `ProductStatus` attribute was one of the
    #   following:
    #
    #   `Available | Backordered | Discontinued`
    #
    #   You would first need to specify `ExpressionAttributeValues` as
    #   follows:
    #
    #   `\{ ":avail":\{"S":"Available"\}, ":back":\{"S":"Backordered"\},
    #   ":disc":\{"S":"Discontinued"\} \}`
    #
    #   You could then use these values in an expression, such as this:
    #
    #   `ProductStatus IN (:avail, :back, :disc)`
    #
    #   For more information on expression attribute values, see [Condition
    #   Expressions][1] in the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateItemInput AWS API Documentation
    #
    class UpdateItemInput < Struct.new(
      :table_name,
      :key,
      :attribute_updates,
      :expected,
      :conditional_operator,
      :return_values,
      :return_consumed_capacity,
      :return_item_collection_metrics,
      :update_expression,
      :condition_expression,
      :expression_attribute_names,
      :expression_attribute_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of an `UpdateItem` operation.
    #
    # @!attribute [rw] attributes
    #   A map of attribute values as they appear before or after the
    #   `UpdateItem` operation, as determined by the `ReturnValues`
    #   parameter.
    #
    #   The `Attributes` map is only present if `ReturnValues` was specified
    #   as something other than `NONE` in the request. Each element
    #   represents one attribute.
    #   @return [Hash<String,Types::AttributeValue>]
    #
    # @!attribute [rw] consumed_capacity
    #   The capacity units consumed by the `UpdateItem` operation. The data
    #   returned includes the total provisioned throughput consumed, along
    #   with statistics for the table and any indexes involved in the
    #   operation. `ConsumedCapacity` is only returned if the
    #   `ReturnConsumedCapacity` parameter was specified. For more
    #   information, see [Provisioned Throughput][1] in the *Amazon DynamoDB
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
    #   @return [Types::ConsumedCapacity]
    #
    # @!attribute [rw] item_collection_metrics
    #   Information about item collections, if any, that were affected by
    #   the `UpdateItem` operation. `ItemCollectionMetrics` is only returned
    #   if the `ReturnItemCollectionMetrics` parameter was specified. If the
    #   table does not have any local secondary indexes, this information is
    #   not returned in the response.
    #
    #   Each `ItemCollectionMetrics` element consists of:
    #
    #   * `ItemCollectionKey` - The partition key value of the item
    #     collection. This is the same as the partition key value of the
    #     item itself.
    #
    #   * `SizeEstimateRangeGB` - An estimate of item collection size, in
    #     gigabytes. This value is a two-element array containing a lower
    #     bound and an upper bound for the estimate. The estimate includes
    #     the size of all the items in the table, plus the size of all
    #     attributes projected into all of the local secondary indexes on
    #     that table. Use this estimate to measure whether a local secondary
    #     index is approaching its size limit.
    #
    #     The estimate is subject to change over time; therefore, do not
    #     rely on the precision or accuracy of the estimate.
    #   @return [Types::ItemCollectionMetrics]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateItemOutput AWS API Documentation
    #
    class UpdateItemOutput < Struct.new(
      :attributes,
      :consumed_capacity,
      :item_collection_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a replica to be modified.
    #
    # @note When making an API call, you may pass UpdateReplicationGroupMemberAction
    #   data as a hash:
    #
    #       {
    #         region_name: "RegionName", # required
    #         kms_master_key_id: "KMSMasterKeyId",
    #         provisioned_throughput_override: {
    #           read_capacity_units: 1,
    #         },
    #         global_secondary_indexes: [
    #           {
    #             index_name: "IndexName", # required
    #             provisioned_throughput_override: {
    #               read_capacity_units: 1,
    #             },
    #           },
    #         ],
    #         table_class_override: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #       }
    #
    # @!attribute [rw] region_name
    #   The Region where the replica exists.
    #   @return [String]
    #
    # @!attribute [rw] kms_master_key_id
    #   The KMS key of the replica that should be used for KMS encryption.
    #   To specify a key, use its key ID, Amazon Resource Name (ARN), alias
    #   name, or alias ARN. Note that you should only provide this parameter
    #   if the key is different from the default DynamoDB KMS key
    #   `alias/aws/dynamodb`.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_throughput_override
    #   Replica-specific provisioned throughput. If not specified, uses the
    #   source table's provisioned throughput settings.
    #   @return [Types::ProvisionedThroughputOverride]
    #
    # @!attribute [rw] global_secondary_indexes
    #   Replica-specific global secondary index settings.
    #   @return [Array<Types::ReplicaGlobalSecondaryIndex>]
    #
    # @!attribute [rw] table_class_override
    #   Replica-specific table class. If not specified, uses the source
    #   table's table class.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateReplicationGroupMemberAction AWS API Documentation
    #
    class UpdateReplicationGroupMemberAction < Struct.new(
      :region_name,
      :kms_master_key_id,
      :provisioned_throughput_override,
      :global_secondary_indexes,
      :table_class_override)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of an `UpdateTable` operation.
    #
    # @note When making an API call, you may pass UpdateTableInput
    #   data as a hash:
    #
    #       {
    #         attribute_definitions: [
    #           {
    #             attribute_name: "KeySchemaAttributeName", # required
    #             attribute_type: "S", # required, accepts S, N, B
    #           },
    #         ],
    #         table_name: "TableName", # required
    #         billing_mode: "PROVISIONED", # accepts PROVISIONED, PAY_PER_REQUEST
    #         provisioned_throughput: {
    #           read_capacity_units: 1, # required
    #           write_capacity_units: 1, # required
    #         },
    #         global_secondary_index_updates: [
    #           {
    #             update: {
    #               index_name: "IndexName", # required
    #               provisioned_throughput: { # required
    #                 read_capacity_units: 1, # required
    #                 write_capacity_units: 1, # required
    #               },
    #             },
    #             create: {
    #               index_name: "IndexName", # required
    #               key_schema: [ # required
    #                 {
    #                   attribute_name: "KeySchemaAttributeName", # required
    #                   key_type: "HASH", # required, accepts HASH, RANGE
    #                 },
    #               ],
    #               projection: { # required
    #                 projection_type: "ALL", # accepts ALL, KEYS_ONLY, INCLUDE
    #                 non_key_attributes: ["NonKeyAttributeName"],
    #               },
    #               provisioned_throughput: {
    #                 read_capacity_units: 1, # required
    #                 write_capacity_units: 1, # required
    #               },
    #             },
    #             delete: {
    #               index_name: "IndexName", # required
    #             },
    #           },
    #         ],
    #         stream_specification: {
    #           stream_enabled: false, # required
    #           stream_view_type: "NEW_IMAGE", # accepts NEW_IMAGE, OLD_IMAGE, NEW_AND_OLD_IMAGES, KEYS_ONLY
    #         },
    #         sse_specification: {
    #           enabled: false,
    #           sse_type: "AES256", # accepts AES256, KMS
    #           kms_master_key_id: "KMSMasterKeyId",
    #         },
    #         replica_updates: [
    #           {
    #             create: {
    #               region_name: "RegionName", # required
    #               kms_master_key_id: "KMSMasterKeyId",
    #               provisioned_throughput_override: {
    #                 read_capacity_units: 1,
    #               },
    #               global_secondary_indexes: [
    #                 {
    #                   index_name: "IndexName", # required
    #                   provisioned_throughput_override: {
    #                     read_capacity_units: 1,
    #                   },
    #                 },
    #               ],
    #               table_class_override: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #             },
    #             update: {
    #               region_name: "RegionName", # required
    #               kms_master_key_id: "KMSMasterKeyId",
    #               provisioned_throughput_override: {
    #                 read_capacity_units: 1,
    #               },
    #               global_secondary_indexes: [
    #                 {
    #                   index_name: "IndexName", # required
    #                   provisioned_throughput_override: {
    #                     read_capacity_units: 1,
    #                   },
    #                 },
    #               ],
    #               table_class_override: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #             },
    #             delete: {
    #               region_name: "RegionName", # required
    #             },
    #           },
    #         ],
    #         table_class: "STANDARD", # accepts STANDARD, STANDARD_INFREQUENT_ACCESS
    #       }
    #
    # @!attribute [rw] attribute_definitions
    #   An array of attributes that describe the key schema for the table
    #   and indexes. If you are adding a new global secondary index to the
    #   table, `AttributeDefinitions` must include the key element(s) of the
    #   new index.
    #   @return [Array<Types::AttributeDefinition>]
    #
    # @!attribute [rw] table_name
    #   The name of the table to be updated.
    #   @return [String]
    #
    # @!attribute [rw] billing_mode
    #   Controls how you are charged for read and write throughput and how
    #   you manage capacity. When switching from pay-per-request to
    #   provisioned capacity, initial provisioned capacity values must be
    #   set. The initial provisioned capacity values are estimated based on
    #   the consumed read and write capacity of your table and global
    #   secondary indexes over the past 30 minutes.
    #
    #   * `PROVISIONED` - We recommend using `PROVISIONED` for predictable
    #     workloads. `PROVISIONED` sets the billing mode to [Provisioned
    #     Mode][1].
    #
    #   * `PAY_PER_REQUEST` - We recommend using `PAY_PER_REQUEST` for
    #     unpredictable workloads. `PAY_PER_REQUEST` sets the billing mode
    #     to [On-Demand Mode][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual
    #   [2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand
    #   @return [String]
    #
    # @!attribute [rw] provisioned_throughput
    #   The new provisioned throughput settings for the specified table or
    #   index.
    #   @return [Types::ProvisionedThroughput]
    #
    # @!attribute [rw] global_secondary_index_updates
    #   An array of one or more global secondary indexes for the table. For
    #   each index in the array, you can request one action:
    #
    #   * `Create` - add a new global secondary index to the table.
    #
    #   * `Update` - modify the provisioned throughput settings of an
    #     existing global secondary index.
    #
    #   * `Delete` - remove a global secondary index from the table.
    #
    #   You can create or delete only one global secondary index per
    #   `UpdateTable` operation.
    #
    #   For more information, see [Managing Global Secondary Indexes][1] in
    #   the *Amazon DynamoDB Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.OnlineOps.html
    #   @return [Array<Types::GlobalSecondaryIndexUpdate>]
    #
    # @!attribute [rw] stream_specification
    #   Represents the DynamoDB Streams configuration for the table.
    #
    #   <note markdown="1"> You receive a `ResourceInUseException` if you try to enable a stream
    #   on a table that already has a stream, or if you try to disable a
    #   stream on a table that doesn't have a stream.
    #
    #    </note>
    #   @return [Types::StreamSpecification]
    #
    # @!attribute [rw] sse_specification
    #   The new server-side encryption settings for the specified table.
    #   @return [Types::SSESpecification]
    #
    # @!attribute [rw] replica_updates
    #   A list of replica update actions (create, delete, or update) for the
    #   table.
    #
    #   <note markdown="1"> This property only applies to [Version 2019.11.21][1] of global
    #   tables.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V2.html
    #   @return [Array<Types::ReplicationGroupUpdate>]
    #
    # @!attribute [rw] table_class
    #   The table class of the table to be updated. Valid values are
    #   `STANDARD` and `STANDARD_INFREQUENT_ACCESS`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateTableInput AWS API Documentation
    #
    class UpdateTableInput < Struct.new(
      :attribute_definitions,
      :table_name,
      :billing_mode,
      :provisioned_throughput,
      :global_secondary_index_updates,
      :stream_specification,
      :sse_specification,
      :replica_updates,
      :table_class)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of an `UpdateTable` operation.
    #
    # @!attribute [rw] table_description
    #   Represents the properties of the table.
    #   @return [Types::TableDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateTableOutput AWS API Documentation
    #
    class UpdateTableOutput < Struct.new(
      :table_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @note When making an API call, you may pass UpdateTableReplicaAutoScalingInput
    #   data as a hash:
    #
    #       {
    #         global_secondary_index_updates: [
    #           {
    #             index_name: "IndexName",
    #             provisioned_write_capacity_auto_scaling_update: {
    #               minimum_units: 1,
    #               maximum_units: 1,
    #               auto_scaling_disabled: false,
    #               auto_scaling_role_arn: "AutoScalingRoleArn",
    #               scaling_policy_update: {
    #                 policy_name: "AutoScalingPolicyName",
    #                 target_tracking_scaling_policy_configuration: { # required
    #                   disable_scale_in: false,
    #                   scale_in_cooldown: 1,
    #                   scale_out_cooldown: 1,
    #                   target_value: 1.0, # required
    #                 },
    #               },
    #             },
    #           },
    #         ],
    #         table_name: "TableName", # required
    #         provisioned_write_capacity_auto_scaling_update: {
    #           minimum_units: 1,
    #           maximum_units: 1,
    #           auto_scaling_disabled: false,
    #           auto_scaling_role_arn: "AutoScalingRoleArn",
    #           scaling_policy_update: {
    #             policy_name: "AutoScalingPolicyName",
    #             target_tracking_scaling_policy_configuration: { # required
    #               disable_scale_in: false,
    #               scale_in_cooldown: 1,
    #               scale_out_cooldown: 1,
    #               target_value: 1.0, # required
    #             },
    #           },
    #         },
    #         replica_updates: [
    #           {
    #             region_name: "RegionName", # required
    #             replica_global_secondary_index_updates: [
    #               {
    #                 index_name: "IndexName",
    #                 provisioned_read_capacity_auto_scaling_update: {
    #                   minimum_units: 1,
    #                   maximum_units: 1,
    #                   auto_scaling_disabled: false,
    #                   auto_scaling_role_arn: "AutoScalingRoleArn",
    #                   scaling_policy_update: {
    #                     policy_name: "AutoScalingPolicyName",
    #                     target_tracking_scaling_policy_configuration: { # required
    #                       disable_scale_in: false,
    #                       scale_in_cooldown: 1,
    #                       scale_out_cooldown: 1,
    #                       target_value: 1.0, # required
    #                     },
    #                   },
    #                 },
    #               },
    #             ],
    #             replica_provisioned_read_capacity_auto_scaling_update: {
    #               minimum_units: 1,
    #               maximum_units: 1,
    #               auto_scaling_disabled: false,
    #               auto_scaling_role_arn: "AutoScalingRoleArn",
    #               scaling_policy_update: {
    #                 policy_name: "AutoScalingPolicyName",
    #                 target_tracking_scaling_policy_configuration: { # required
    #                   disable_scale_in: false,
    #                   scale_in_cooldown: 1,
    #                   scale_out_cooldown: 1,
    #                   target_value: 1.0, # required
    #                 },
    #               },
    #             },
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] global_secondary_index_updates
    #   Represents the auto scaling settings of the global secondary indexes
    #   of the replica to be updated.
    #   @return [Array<Types::GlobalSecondaryIndexAutoScalingUpdate>]
    #
    # @!attribute [rw] table_name
    #   The name of the global table to be updated.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_write_capacity_auto_scaling_update
    #   Represents the auto scaling settings to be modified for a global
    #   table or global secondary index.
    #   @return [Types::AutoScalingSettingsUpdate]
    #
    # @!attribute [rw] replica_updates
    #   Represents the auto scaling settings of replicas of the table that
    #   will be modified.
    #   @return [Array<Types::ReplicaAutoScalingUpdate>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateTableReplicaAutoScalingInput AWS API Documentation
    #
    class UpdateTableReplicaAutoScalingInput < Struct.new(
      :global_secondary_index_updates,
      :table_name,
      :provisioned_write_capacity_auto_scaling_update,
      :replica_updates)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] table_auto_scaling_description
    #   Returns information about the auto scaling settings of a table with
    #   replicas.
    #   @return [Types::TableAutoScalingDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateTableReplicaAutoScalingOutput AWS API Documentation
    #
    class UpdateTableReplicaAutoScalingOutput < Struct.new(
      :table_auto_scaling_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the input of an `UpdateTimeToLive` operation.
    #
    # @note When making an API call, you may pass UpdateTimeToLiveInput
    #   data as a hash:
    #
    #       {
    #         table_name: "TableName", # required
    #         time_to_live_specification: { # required
    #           enabled: false, # required
    #           attribute_name: "TimeToLiveAttributeName", # required
    #         },
    #       }
    #
    # @!attribute [rw] table_name
    #   The name of the table to be configured.
    #   @return [String]
    #
    # @!attribute [rw] time_to_live_specification
    #   Represents the settings used to enable or disable Time to Live for
    #   the specified table.
    #   @return [Types::TimeToLiveSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateTimeToLiveInput AWS API Documentation
    #
    class UpdateTimeToLiveInput < Struct.new(
      :table_name,
      :time_to_live_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] time_to_live_specification
    #   Represents the output of an `UpdateTimeToLive` operation.
    #   @return [Types::TimeToLiveSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/UpdateTimeToLiveOutput AWS API Documentation
    #
    class UpdateTimeToLiveOutput < Struct.new(
      :time_to_live_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents an operation to perform - either `DeleteItem` or `PutItem`.
    # You can only request one of these operations, not both, in a single
    # `WriteRequest`. If you do need to perform both of these operations,
    # you need to provide two separate `WriteRequest` objects.
    #
    # @note When making an API call, you may pass WriteRequest
    #   data as a hash:
    #
    #       {
    #         put_request: {
    #           item: { # required
    #             "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #         },
    #         delete_request: {
    #           key: { # required
    #             "AttributeName" => "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] put_request
    #   A request to perform a `PutItem` operation.
    #   @return [Types::PutRequest]
    #
    # @!attribute [rw] delete_request
    #   A request to perform a `DeleteItem` operation.
    #   @return [Types::DeleteRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/WriteRequest AWS API Documentation
    #
    class WriteRequest < Struct.new(
      :put_request,
      :delete_request)
      SENSITIVE = []
      include Aws::Structure
    end

  end
end