所以我的 s3 数据库中有非常大的 csv 文件(超过 200 万行),我想将其导入到 dynamodb。
我尝试过的:
拉姆达 我设法让 lambda 函数正常工作,但在我的函数超时后,只有大约 120k 行被导入到 ddb。
管道 使用管道时,它卡在“等待跑步者”上,然后完全停止
这是一种无服务器方法,使用 2 个 Lambda 和一个 SQS 队列来处理小块中的大
.csv
:
SELECT s.primary_key FROM S3Object s
提取所有记录的主键信息,并就地查询 .csv
。 有关详细信息,请参阅 SelectObjectContent API。.csv
获取其批次主键的记录:SELECT * WHERE s.primary_key IN ('id1', 'id2', 'id3') FROM S3Object s
您可以使用 DynamoDbStorageHandler 连接器设置外部 EMR 表(或者可能是 Athena,这样您就不需要 EMR 集群),一张用于 S3 文件,一张用于 DynamoDb 表。它支持仅通过在表之间运行插入和选择来将数据从 DynamoDB 复制到 S3,也支持从 S3 复制到 DynamoDB。
设置外部 S3 文件表的示例操作系统是
CREATE EXTERNAL TABLE s3_features_csv
(feature_id BIGINT,
feature_name STRING,
feature_class STRING,
state_alpha STRING,
prim_lat_dec DOUBLE,
prim_long_dec DOUBLE,
elev_in_ft BIGINT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION 's3://<your_bucket>/<prefix_of_folder_containing_files>';
设置 DynamoDB 外部表的方法是:
CREATE EXTERNAL TABLE ddb_features
(feature_id BIGINT,
feature_name STRING,
feature_class STRING,
state_alpha STRING,
prim_lat_dec DOUBLE,
prim_long_dec DOUBLE,
elev_in_ft BIGINT)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES(
"dynamodb.table.name" = "Features",
"dynamodb.column.mapping"="feature_id:Id,feature_name:Name,feature_class:Class,state_alpha:State,prim_lat_dec:Latitude,prim_long_dec:Longitude,elev_in_ft:Elevation"
);