我需要在Cassandra数据库中插入一个大的xlsx(接近1百万行)文件,由于内存限制,我对如何操作有疑问。
我正在使用批量插入,但由于巨大的内存影响,这几乎是不可能的。
$batch = new Cassandra\BatchStatement(Cassandra::BATCH_UNLOGGED);
foreach ($workbook->createRowIterator($myWorksheetIndex) as $rowIndex => $values) {
if ($count > 0) {
$time = is_int($values[3]) ? $values[2]->format('d-m-Y') . ' ' . date('00:00:00') : $values[2]->format('d-m-Y') . ' ' . $values[3]->format('H:i:s');
$date = date_convert(DateTime::createFromFormat('d-m-Y H:i:s', $time));
$prepared = $session->prepare(
"INSERT INTO teste (ptd_assoc,ref_equip,dates) " .
"VALUES (?, ?, ?)"
);
$batch->add($prepared, array(
'ptd_assoc' => $values[0],
'ref_equip' => $values[1],
'dates' => new Cassandra\Timestamp(strtotime($date)),
// 'load' => 3.4454
));
}
$count++;
}
$session->execute($batch);
我已成功将xlsx转换为更易读的csv文件。使用Copy
方法可以Cassandra\SimpleStatement
到数据库吗?
答案 0 :(得分:0)
如果数据格式正确,您可能不必编写自定义导入程序。查看for dir in * ; do mv "${dir}" "${dir/_-_ppfsefs/}" ; done
cqlsh
命令(COPY FROM
)。