2

従来の方法で実行できることはわかっていますが、Cassandra DB を使用する場合、csv をキーと値のペアのセットとして DB に追加する簡単で迅速かつ迅速な方法はありますか?

CSV ファイル経由の時系列データを追加する機能は、私の主な要件です。そこで便利に実行できる場合は、mongodb、rike などの他のデータベースに切り替えても問題ありません。

4

3 に答える 3

5

編集 2 2017 年 12 月2 日
ポート 9042 を使用してください。Cassandra アクセスは、デフォルト ポートが 9042 の CQL に変更されました。9160 は Thrift のデフォルト ポートでした。

編集1
コーディングなしでこれを行うより良い方法があります。この回答を見てください https://stackoverflow.com/a/18110080/298455

ただし、前処理やカスタムが必要な場合は、自分で処理したい場合があります。ここに長い方法があります:


  1. 列ファミリーを作成します。

    cqlsh> create keyspace mykeyspace 
    with strategy_class = 'SimpleStrategy' 
    and strategy_options:replication_factor = 1;
    
    cqlsh> use mykeyspace;
    
    cqlsh:mykeyspace> create table stackoverflow_question 
    (id text primary key, name text, class text);
    

    CSV が次のようになっているとします。

    $ cat data.csv 
    id,name,class
    1,hello,10
    2,world,20
    
  2. ファイルから読み取って CF にダンプする単純な Python コードを記述します。このようなもの:

    import csv 
    from pycassa.pool import ConnectionPool
    from pycassa.columnfamily import ColumnFamily
    
    pool = ConnectionPool('mykeyspace', ['localhost:9160'])
    cf = ColumnFamily(pool, "stackoverflow_question")
    
    with open('data.csv', 'rb') as csvfile:
      reader = csv.DictReader(csvfile)
      for row in reader:
        print str(row)
        key = row['id']
        del row['id']
        cf.insert(key, row)
    
    pool.dispose()
    
  3. これを実行します:

    $ python loadcsv.py 
    {'class': '10', 'id': '1', 'name': 'hello'}
    {'class': '20', 'id': '2', 'name': 'world'}
    
  4. データを見てください:

    cqlsh:mykeyspace> select * from stackoverflow_question;
     id | class | name
    ----+-------+-------
      2 |    20 | world
      1 |    10 | hello
    
  5. 以下も参照してください。

    を。DictReaderに注意してください
    Pycassa
    cを見てください。Cassandra への既存の CSV ローダーの Google。あると思います。
    d. CQL ドライバーを使用するより簡単な方法があるかもしれませんが、私にはわかりません。
    e. 適切なデータ型を使用してください。それらをすべてテキストにラップしました。良くない。

HTH


時系列の要件がわかりませんでした。これが時系列のやり方です。

  1. これはあなたのデータです

    $ cat data.csv
    id,1383799600,1383799601,1383799605,1383799621,1383799714
    1,sensor-on,sensor-ready,flow-out,flow-interrupt,sensor-killAll
    
  2. 従来の幅広列を作成します。(CQLでは COMPACT STORAGEを使用しないことをお勧めしますが、これは簡単に使用できるようにするためのものです。)

    cqlsh:mykeyspace> create table timeseries 
    (id text, timestamp text, data text, primary key (id, timestamp)) 
    with compact storage;
    
  3. これは変更されたコードです:

    import csv
    from pycassa.pool import ConnectionPool
    from pycassa.columnfamily import ColumnFamily
    
    pool = ConnectionPool('mykeyspace', ['localhost:9160'])
    cf = ColumnFamily(pool, "timeseries")
    
    with open('data.csv', 'rb') as csvfile:
      reader = csv.DictReader(csvfile)
      for row in reader:
        print str(row)
        key = row['id']
        del row['id']
        for (timestamp, data) in row.iteritems():
          cf.insert(key, {timestamp: data})
    
    pool.dispose()
    
  4. これはあなたの時系列です

    cqlsh:mykeyspace> select * from timeseries;
     id | timestamp  | data
    ----+------------+----------------
      1 | 1383799600 |      sensor-on
      1 | 1383799601 |   sensor-ready
      1 | 1383799605 |       flow-out
      1 | 1383799621 | flow-interrupt
      1 | 1383799714 | sensor-killAll
    
于 2013-11-07T04:38:35.237 に答える
4

あなたのCSVが次のように見えるとしましょう

'P38-Lightning', 'Lockheed', 1937, '.7'
  1. cqlshあなたのDBに

  2. と..

    CREATE TABLE airplanes (
     name text PRIMARY KEY,
     manufacturer ascii,
     year int,
     mach float
    );
    
  3. それから...

    COPY airplanes (name, manufacturer, year, mach) FROM '/classpath/temp.csv';
    

参照: http://www.datastax.com/docs/1.1/references/cql/COPY

于 2013-11-07T16:19:38.210 に答える
3

バックアップを行う

./cqlsh -e"copy <keyspace>.<table> to '../data/table.csv';"

バックアップを使用

./cqlsh -e"copy <keyspace>.<table> from '../data/table.csv';"
于 2016-09-21T15:38:36.550 に答える