2017-01-05 9 views
1

Pythonを使用してCassandraテーブルをCSVフォーマットにエクスポートしようとしています。しかし、私はそれをすることができませんでした。しかし、私はPythonから 'select'文を実行することができます。私は次のコードを使用しました:Pythonを使用してCassandraテーブルをエクスポートできません

from cassandra.cluster import Cluster 
cluster = Cluster() 
session = cluster.connect('chandan') ### 'chandan' is the name of the keyspace 
## name of the table is 'emp' 
session.execute(""" copy emp (id,name) to 'E:\HANA\emp.csv' with HEADER = true """) 
print "Exported to the CSV file" 

この点について私を助けてください。

答えて

3

COPYがCQLの一部ではないため、これは機能しません。

COPYはcqlsh専用のツールです。 20170106

cqlsh 127.0.0.1 -u username -p password -e "copy chandan.emp (id,name) to 'E:\HANA\emp.csv' with HEADER = true" 

編集:

輸出カサンドラテーブル

のPython

を使用してCSV形式に

あなたは-eフラグを使用して、コマンドラインまたはスクリプトを経由して、これを呼び出すことができます

本質的に... Cassandraテーブル全体をエクスポートするにはどうすればよいですか?

私はこれに多くの質問をします。短い答えは... ではありませんです。

カサンドラは、数百万行または数十億行を保存するのに最適です。これは、複数のノードに負荷(両方とも運用とサイズの両方)を分散するため、これを実行できます。それがうまくいかないのは、削除、インプレース更新、アンバウンドクエリなどです。私はいくつかの理由で、にはではなく、完全なエクスポート(アンバインドされたクエリ)のようなことをしています。

まず、分散環境の大きなテーブルでバインドされていないクエリを実行すると、通常、非常にとなります(クエリにネットワーク時間とトラフィックのLOTSが導入されます)。次に、複数のノードに格納された大きな結果セットを取得し、そのすべてのデータを1つのファイルに集約します。おそらくまたではなく、というのが良い考えです。

ボトムライン:カサンドラはリレーショナルデータベースではないので、なぜそれを1つのように扱いますか?

言われているように、このようなことを処理するツールがあります。 Apache Sparkである。

私はsession.execute()ステートメントでクエリを実行するのを手伝ってください。

あなたがPythonの使用を強くお勧めする場合、いくつかのことをする必要があります。大きなテーブルの場合は、query by token rangeになります。小さなバッチ/ページでコーディネーターノードをヒントしないようにすることもできます。 cqlsh COPY

実際にnewer versions of cqlsh COPYができる機能(PAGESIZEとPageTimeoutとを)持っている:しかし、再発明し、ホイールからあなたを保つために、私はすでに、まさにこのん(Pythonで書かれた)ツールがあることを教えてあげます大規模なデータセットのタイムアウトを避けるためです。私は新しいcqlshを使用して3億7千万の行を正常にエクスポートしていますので、これを行うことができます。

要約:ホイールを再発明しないでください。 cqlsh COPYを使用するスクリプトを作成し、今話したことのすべてを活用します。

+0

ありがとうございました。申し訳ありませんが実行できませんでした。実際は私はカサンドラで新しいです。 session.execute()ステートメントでクエリを実行するのを手伝ってください。私はユーザー名とパスワードを使用していません。 – Chandan

+0

@Chandan編集製 – Aaron

+0

ありがとう@アーロン。試してみます。 – Chandan

関連する問題