Я не уверен, что официальный DynamoDB-Local поддерживает это по умолчанию, и кажется, что вам нужен собственный скрипт, который импортирует CSV в DynamodB, однако вы можете создать собственное изображение для ваших нужд. Так, например, вы можете начать с простого Dockerfile
использования amazon/dynamodb-local
, а затем добавить скрипт Python, который будет отвечать за импорт CSV-файлов, поэтому шаги могут выглядеть следующим образом:
/docker-entrypoint-initdb.d
/docker-entrypoint-initdb.d
, чтобы передать его в скрипт Python - код , добавленный ниже - который загрузит его в DynamodB, например, как показано ниже (взято из точки входа mongodb ): for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
# if csv file pass it to the python script
*.csv) echo "[110]: running $f"; . "$f" ;;
*) echo "[110]: ignoring $f" ;;
esac
echo
done
[ 1120]Следующий код не был протестирован или создан мной, я только что скопировал его по следующей ссылке Импортируйте CSV-файл в таблицу DynamoDB, используя boto (пакет Python) , вы можете изменить его так, как считаете нужным, или создать собственный сценарий. Или, если у вас есть более подходящее предложение, дайте мне знать, чтобы обновить ответ.
boto поддерживает DynamodB-Local, как описано в следующем ответе , что означает, что вы можете изменить скрипт, чтобы он работал с DynamodB Local
blockquote>
import boto MY_ACCESS_KEY_ID = 'copy your access key ID here' MY_SECRET_ACCESS_KEY = 'copy your secrete access key here' def do_batch_write(items, table_name, dynamodb_table, dynamodb_conn): ''' From https://gist.github.com/griggheo/2698152#file-gistfile1-py-L31 ''' 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): ''' Import a CSV file to a DynamoDB table ''' dynamodb_conn = boto.connect_dynamodb(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 # 25 is the maximum batch size for Amazon DynamoDB items = [] count = 0 csv_file = open(csv_file_name, 'r') for cur_line in csv_file: count += 1 cur_line = cur_line.strip().split(',') 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) + ')' # flush remaining items, if any if len(items) > 0: do_batch_write(items, table_name, dynamodb_table, dynamodb_conn) csv_file.close() def main(): ''' Demonstration of the use of import_csv_to_dynamodb() We assume the existence of a table named `test_persons`, with - Last_name as primary hash key (type: string) - First_name as primary range key (type: string) ''' colunm_names = 'Last_name First_name'.split() table_name = 'test_persons' csv_file_name = 'test.csv' column_types = [str, str] import_csv_to_dynamodb(table_name, csv_file_name, colunm_names, column_types) if __name__ == "__main__": main() #cProfile.run('main()') # if you want to do some profiling
Содержимое test.csv (должно находиться в той же папке, что и скрипт Python):
John,Doe Bob,Smith Alice,Lee Foo,Bar a,b c,d e,f g,h i,j j,l
Весь C ++ поддерживается в Objective C ++. Можно использовать ускорение, но вам, возможно, придется перенести некоторые вещи, зависящие от платформы.
Следует отметить, что вы не можете просто делать все, что вы можете делать в C ++ в Objective-C ++. Например, вы не можете вызывать виртуальные функции на объектах C ++ из класса Objective-C. Как только вы вызываете функцию C / C ++, вы можете делать все, что захотите.
Цель C ++ - это расширенный набор C ++. Все, что вы можете сделать в C / C ++, может быть сделано в Obj-C ++. Часть «Objective» содержит, помимо прочего, систему обмена сообщениями Smalltalk-esque и другие дополнения к C ++.
Можно ли использовать такие вещи, как шаблоны в Objective-C ++.
Да, но вам нужно позаботиться о том, как смешивать типы и интерфейсы между чистыми слоями C ++ и кодом Objective-C ++. Помните о границах между слоями, где вам нужно будет преобразовать такие типы, как std :: string
в NSString
и т. Д.
Например, вы можете реализовать основной игровой движок на чистом C ++, и просто реализуйте свои контроллеры и код GUI на Objective-C ++. Тогда код Obj-C ++ является связующим звеном между чистым движком C ++ и Какао.
Думаю, действительно вопрос в том, могу ли я использовать ускорение?
Учитывая, что iPhone OS является подмножеством OS X, которая по-прежнему обеспечивает полную Уровень POSIX, большинство библиотек Boost должны работать нормально. Это должно быть похоже на написание кода Дарвина.
В Objective-C ++ существует ряд ограничений, о которых следует знать (взяты непосредственно из Справочного руководства Objective-C 2.0 ):
C++ objects in Objective C will NOT necessarily act like in C++. For example constructors and destructors are not automatically called and (i think) that you can't implement virtual methods...
Boost is useful but it is also a large overhead to add to a project.
Make sure you really need it before you go adding it.
For Regex support: RegexLite.
For everything else: Cocoa.