私はcassandraの初心者であり、特定のクエリの結果をcsvファイルにエクスポートする必要があります。
私はCOPY
コマンドを見つけましたが、(私が理解していることから)それはあなたがすでに存在するテーブルをcsvファイルにコピーすることだけを許可し、私が欲しいのは私のクエリのstdoutをcsvファイルに直接コピーすることです。 COPY
コマンドまたは別の方法でそれを行う方法はありますか?
私のコマンドはスタイル(select column1, column2 from table where condition = xy
)とcqlsh
を使用しています。
パイプ( '|')を区切り文字として使用するデータを気にしない場合は、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
を実行すると、上記と同じ行が生成されます。
CQLクエリをCSVおよびJSON形式にエクスポートするツールを作成しました。試してみる :)
Windowsでは、二重引用符を使用してCQLを囲む必要があります。
cqlsh -e"SELECT video_id,title FROM stackoverflow.videos" > output.txt
DevCenterではCSVにコピーすることもできます。 http://www.datastax.com/what-we-offer/products-services/devcenter
私が正しく理解している場合、出力を標準出力にリダイレクトしたいですか?
Cqlコマンドをファイルに入れます。私のファイルはselect.cqlと呼ばれ、内容は次のとおりです。
select id from wiki.solr limit 100;
次に、以下を発行すると、stdoutになります。
cqlsh < select.cql
これがお役に立てば幸いです。そこからパイプしてコンマを追加したり、ヘッダーを削除したりできます。
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
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正規表現は、特定のケースに合わせてクリーンアップすることができますが、それは一般的な考え方です。
コメントできません... 100行を超える場合に「MORE」問題に対処するには、単に「ページングオフ」をSQLの前に追加します。
何かのようなもの
$ bin/cqlsh -e'PAGING OFF;SELECT video_id,title FROM stackoverflow.videos' > output.txt
これにより、出力ファイルの先頭が少し乱雑になりますが、後で簡単に削除できます。