【发布时间】:2021-03-19 11:31:24
【问题描述】:
假设您有一个大型 CSV 文件 - 假设有 10 亿行。
您希望文件中的每一行都成为弹性搜索中的文档。
您无法将文件加载到内存中 - 它太大,因此必须进行流式传输或分块。
花费的时间不是问题。首要任务是确保所有数据都被编入索引,没有丢失数据。
您如何看待这种方法:
第 1 部分:准备数据
- 以 1k 行为单位循环遍历 CSV 文件
- 对于每个批次,将行转换为 JSON 并将它们保存到一个较小的文件中
- 您现在有 1m 个文件,每个文件都有 1000 行漂亮的 JSON
- 文件名应该是递增的 ID。比如从1.json跑到1000000.json
第 2 部分:上传数据
- 开始循环遍历每个 JSON 文件并将其读入内存
- 使用批量 API 一次上传 1k 个文档
- 在结果数组中记录上传的成功/失败
- 循环遍历结果数组,如果有任何上传失败,重试
【问题讨论】:
-
这是一个好的开始!先用 100K 行试试,看看会发生什么。
-
你也可以使用logstash来做到这一点,它会处理你提到的一切。
标签: csv elasticsearch bigdata nest bulkinsert