従来の方法で実行できることはわかっていますが、Cassandra DB を使用する場合、csv をキーと値のペアのセットとして DB に追加する簡単で迅速かつ迅速な方法はありますか?
CSV ファイル経由の時系列データを追加する機能は、私の主な要件です。そこで便利に実行できる場合は、mongodb、rike などの他のデータベースに切り替えても問題ありません。
従来の方法で実行できることはわかっていますが、Cassandra DB を使用する場合、csv をキーと値のペアのセットとして DB に追加する簡単で迅速かつ迅速な方法はありますか?
CSV ファイル経由の時系列データを追加する機能は、私の主な要件です。そこで便利に実行できる場合は、mongodb、rike などの他のデータベースに切り替えても問題ありません。
編集 2 2017 年 12 月2 日
ポート 9042 を使用してください。Cassandra アクセスは、デフォルト ポートが 9042 の CQL に変更されました。9160 は Thrift のデフォルト ポートでした。
編集1
コーディングなしでこれを行うより良い方法があります。この回答を見てください https://stackoverflow.com/a/18110080/298455
ただし、前処理やカスタムが必要な場合は、自分で処理したい場合があります。ここに長い方法があります:
列ファミリーを作成します。
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
ファイルから読み取って 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()
これを実行します:
$ python loadcsv.py
{'class': '10', 'id': '1', 'name': 'hello'}
{'class': '20', 'id': '2', 'name': 'world'}
データを見てください:
cqlsh:mykeyspace> select * from stackoverflow_question;
id | class | name
----+-------+-------
2 | 20 | world
1 | 10 | hello
以下も参照してください。
を。DictReaderに注意してください
。Pycassa
cを見てください。Cassandra への既存の CSV ローダーの Google。あると思います。
d. CQL ドライバーを使用するより簡単な方法があるかもしれませんが、私にはわかりません。
e. 適切なデータ型を使用してください。それらをすべてテキストにラップしました。良くない。
HTH
時系列の要件がわかりませんでした。これが時系列のやり方です。
これはあなたのデータです
$ cat data.csv
id,1383799600,1383799601,1383799605,1383799621,1383799714
1,sensor-on,sensor-ready,flow-out,flow-interrupt,sensor-killAll
従来の幅広列を作成します。(CQLでは COMPACT STORAGEを使用しないことをお勧めしますが、これは簡単に使用できるようにするためのものです。)
cqlsh:mykeyspace> create table timeseries
(id text, timestamp text, data text, primary key (id, timestamp))
with compact storage;
これは変更されたコードです:
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()
これはあなたの時系列です
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
あなたのCSVが次のように見えるとしましょう
'P38-Lightning', 'Lockheed', 1937, '.7'
cqlsh
あなたのDBに
と..
CREATE TABLE airplanes (
name text PRIMARY KEY,
manufacturer ascii,
year int,
mach float
);
それから...
COPY airplanes (name, manufacturer, year, mach) FROM '/classpath/temp.csv';
バックアップを行う
./cqlsh -e"copy <keyspace>.<table> to '../data/table.csv';"
バックアップを使用
./cqlsh -e"copy <keyspace>.<table> from '../data/table.csv';"