Skip to content

Instantly share code, notes, and snippets.

@VicFrolov
Last active November 18, 2017 03:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save VicFrolov/29ba989ef5660c9fc2806ec7b33781cf to your computer and use it in GitHub Desktop.
Save VicFrolov/29ba989ef5660c9fc2806ec7b33781cf to your computer and use it in GitHub Desktop.
Updating csv to dynamoDb with region
import boto.dynamodb
from csv import reader
MY_ACCESS_KEY_ID = 'KEY'
MY_SECRET_ACCESS_KEY = 'PASS'
REGION = 'us-west-2'
def do_batch_write(items, table_name, dynamodb_table, dynamodb_conn):
batch_list = dynamodb_conn.new_batch_write_list()
batch_list.add_batch(dynamodb_table, puts=items)
while True:
response = dynamodb_conn.batch_write_item(batch_list)
unprocessed = response.get('UnprocessedItems', None)
if not unprocessed:
break
batch_list = dynamodb_conn.new_batch_write_list()
unprocessed_list = unprocessed[table_name]
items = []
for u in unprocessed_list:
item_attr = u['PutRequest']['Item']
item = dynamodb_table.new_item(
attrs=item_attr
)
items.append(item)
batch_list.add_batch(dynamodb_table, puts=items)
def import_csv_to_dynamodb(table_name, csv_file_name, colunm_names, column_types):
dynamodb_conn = boto.dynamodb.connect_to_region(REGION, aws_access_key_id=MY_ACCESS_KEY_ID, aws_secret_access_key=MY_SECRET_ACCESS_KEY)
dynamodb_table = dynamodb_conn.get_table(table_name)
BATCH_COUNT = 2
items = []
count = 0
csv_file = open(csv_file_name, 'r')
for cur_line in reader(csv_file):
count += 1
row = {}
for colunm_number, colunm_name in enumerate(colunm_names):
row[colunm_name] = column_types[colunm_number] (cur_line[colunm_number])
item = dynamodb_table.new_item(
attrs=row
)
items.append(item)
if count % BATCH_COUNT == 0:
print 'batch write start ... ',
do_batch_write(items, table_name, dynamodb_table, dynamodb_conn)
items = []
print 'batch done! (row number: ' + str(count) + ')'
if len(items) > 0:
do_batch_write(items, table_name, dynamodb_table, dynamodb_conn)
csv_file.close()
def main():
colunm_names = 'partitionKey sortKey otherAttribute'.split()
table_name = 'your-table'
csv_file_name = 'test.csv'
column_types = [str, str, str]
import_csv_to_dynamodb(table_name, csv_file_name, colunm_names, column_types)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment