web-dev-qa-db-ja.com

cassandra=クエリ結果をcsvファイルにエクスポート

私はcassandraの初心者であり、特定のクエリの結果をcsvファイルにエクスポートする必要があります。

私はCOPYコマンドを見つけましたが、(私が理解していることから)それはあなたがすでに存在するテーブルをcsvファイルにコピーすることだけを許可し、私が欲しいのは私のクエリのstdoutをcsvファイルに直接コピーすることです。 COPYコマンドまたは別の方法でそれを行う方法はありますか?

私のコマンドはスタイル(select column1, column2 from table where condition = xy)とcqlshを使用しています。

38
Dady09

パイプ( '|')を区切り文字として使用するデータを気にしない場合は、cqlshで-eフラグを使用してみてください。 -eフラグを使用すると、コマンドプロンプトからCassandraにクエリを送信できます。この場合、出力でgrep/awk/whateverをリダイレクトまたは実行することもできます。

$ bin/cqlsh -e'SELECT video_id,title FROM stackoverflow.videos' > output.txt
$ cat output.txt

 video_id                             | title
--------------------------------------+---------------------------
 2977b806-df76-4dd7-a57e-11d361e72ce1 |                 Star Wars
 ab696e1f-78c0-45e6-893f-430e88db7f46 | The Witches of Whitewater
 15e6bc0d-6195-4d8b-ad25-771966c780c8 |              Pulp Fiction

(3 rows)

古いバージョンのcqlshには-eフラグがありません。 cqlshの古いバージョンでは、コマンドをファイルに入れて、-fフラグを使用できます。

$ echo "SELECT video_id,title FROM stackoverflow.videos;" > select.cql
$ bin/cqlsh -f select.cql > output.txt

ここから、output.txtでcatを実行すると、上記と同じ行が生成されます。

47
Aaron
  1. [〜#〜] capture [〜#〜]コマンドを使用して、クエリ結果をファイルにエクスポートします。
cqlsh> CAPTURE
cqlsh> CAPTURE '/home/Desktop/user.csv';
cqlsh> select *from user;
Now capturing query output to '/home/Desktop/user.csv'.

次に、/ home/Desktop/user.csvでクエリの出力を表示します

  1. DevCenterを使用して、クエリを実行します。出力を右クリックし、「CSVとしてすべてコピー」を選択して、出力をCSVに貼り付けます。

enter image description here

34
Arun

CQLクエリをCSVおよびJSON形式にエクスポートするツールを作成しました。試してみる :)

https://github.com/tenmax/cqlkit

10
popcorny

Windowsでは、二重引用符を使用してCQLを囲む必要があります。

cqlsh -e"SELECT video_id,title FROM stackoverflow.videos" > output.txt

4
Karthik Sankar

DevCenterではCSVにコピーすることもできます。 http://www.datastax.com/what-we-offer/products-services/devcenter

4
phact

私が正しく理解している場合、出力を標準出力にリダイレクトしたいですか?

Cqlコマンドをファイルに入れます。私のファイルはselect.cqlと呼ばれ、内容は次のとおりです。

select id from wiki.solr limit 100;

次に、以下を発行すると、stdoutになります。

cqlsh < select.cql

これがお役に立てば幸いです。そこからパイプしてコンマを追加したり、ヘッダーを削除したりできます。

3
Bereng

COPYコマンドを使用して、CSVファイルを作成できます。例えば選択した列でテーブルをコピーします。列はオプションです。列を選択すると、すべての列が選択されます。

COPY TABLE (COL1, COL2) TO 'filename.csv' HEADER=TRUE/FALSE

詳細については、 https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlshCopy.html

2
Arvind

Bashの場合:

データを照会する必要がある場合(COPY TOでは不可能)、最終製品をインポート可能にする必要がある場合(つまり、COPY FROMで):

cqlsh -e "SELECT * FROM bar WHERE column = 'baz' > raw_output.txt

その後、sedで出力を再フォーマットできます

sed 's/\ //g; /^----.*/d; /^(/d; /^\s*$/d;' raw_output.txt | tee clean_output.csv

それはほとんど言う

sed 'remove spaces; remove the column boarder; remove lines beginning with (COUNT X); and remove blank lines' | write output into clean_output.csv

Sed正規表現は、特定のケースに合わせてクリーンアップすることができますが、それは一般的な考え方です。

1
Jake

コメントできません... 100行を超える場合に「MORE」問題に対処するには、単に「ページングオフ」をSQLの前に追加します。

何かのようなもの

$ bin/cqlsh -e'PAGING OFF;SELECT video_id,title FROM stackoverflow.videos' > output.txt

これにより、出力ファイルの先頭が少し乱雑になりますが、後で簡単に削除できます。

1
luckyee