docs: def scan(self,
               table_name,
               index_name=None,
               consistent_read=None,
               projection_expression=None,
               filter_expression=None,
               expression_attribute_names=None,
               expression_attribute_values=None,
               segment=None,
               total_segments=None,
               select=None,
               limit=None,
               exclusive_start_key=None,
               return_consumed_capacity=None):
          """The `Scan`_ operation returns one or more items and item attributes
          by accessing every item in a table or a secondary index.
  
          If the total number of scanned items exceeds the maximum data set size
          limit of 1 MB, the scan stops and results are returned to the user as a
          ``LastEvaluatedKey`` value to continue the scan in a subsequent
          operation. The results also include the number of items exceeding the
          limit. A scan can result in no table data meeting the filter criteria.
  
          By default, Scan operations proceed sequentially; however, for faster
          performance on a large table or secondary index, applications can
          request a parallel *Scan* operation by providing the ``segment`` and
          ``total_segments`` parameters. For more information, see
          `Parallel Scan <http://docs.aws.amazon.com/amazondynamodb/latest/
          developerguide/QueryAndScan.html#QueryAndScanParallelScan>`_ in the
          Amazon DynamoDB Developer Guide.
  
          By default, *Scan* uses eventually consistent reads when accessing the
          data in a table; therefore, the result set might not include the
          changes to data in the table immediately before the operation began. If
          you need a consistent copy of the data, as of the time that the *Scan*
          begins, you can set the ``consistent_read`` parameter to ``True``.
  
          :rtype: dict
  
          .. _Scan: http://docs.aws.amazon.com/amazondynamodb/
             latest/APIReference/API_Scan.html
  
          """
          payload = {'TableName': table_name}
          if index_name:
              payload['IndexName'] = index_name
          if consistent_read is not None:
              payload['ConsistentRead'] = consistent_read
          if filter_expression:
              payload['FilterExpression'] = filter_expression
          if expression_attribute_names:
              payload['ExpressionAttributeNames'] = expression_attribute_names
          if expression_attribute_values:
              payload['ExpressionAttributeValues'] = \
                  utils.marshall(expression_attribute_values)
          if projection_expression:
              payload['ProjectionExpression'] = projection_expression
          if segment:
              payload['Segment'] = segment
          if total_segments:
              payload['TotalSegments'] = total_segments
          if select:
              _validate_select(select)
              payload['Select'] = select
          if exclusive_start_key:
              payload['ExclusiveStartKey'] = utils.marshall(exclusive_start_key)
          if limit:
              payload['Limit'] = limit
          if return_consumed_capacity:
              _validate_return_consumed_capacity(return_consumed_capacity)
              payload['ReturnConsumedCapacity'] = return_consumed_capacity
          return self.execute('Scan', payload)