2016-10-27 21 views
0

Cassandraデータベースに大きなxlsx(100万行近く)のファイルを挿入する必要があります。メモリの制限のため、ファイルの作成方法に疑問があります。PHP datastaxドライバ - 大きなデータセットをインポート

バッチインサートを使用していますが、メモリに大きな影響を与えるため、不可能に近いことが証明されています。

$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ファイルに変換できました。 Cassandra\SimpleStatementメソッドを使用してデータベースにCopyすることは可能ですか?

答えて

0

データの形式がCSVの場合、カスタムインポータを作成する必要はありません。 cqlshCOPY FROMコマンド(help copy;)を見てください。

+0

'COPY'はcqlsh(シェル)コマンドであり、CQL(プロトコル)コマンドではありません。 私がphpでこれをしたいのであれば、唯一の方法はcqlshへのexec関数呼び出しです。同意する? –

+0

私はサーバにアクセスするためにcqlshクライアントをインストールしましたが、コピーコマンドは私にこのエラーを返します。 ":1: 'module'オブジェクトには属性 'parse_options'がありません。 –

+0

https://issues.apache.org/jira/browse/CASSANDRA-12284 のようなサウンドPHPを使用する必要がある場合は、非同期同時リクエストを作成することをおすすめします。すべての行を1つのバッチにロードすると、クライアント側とサーバー側の両方で問題が発生します。 –

関連する問題