cqlsh 명령어 - cassandra 쿼리 결과를 CSV 파일로 내보내기




connect version (7)

나는 cassandra에서 새롭고 특정 쿼리의 결과를 CSV 파일로 내 보내야합니다.

내가 COPY 명령을 발견했지만 (내가 이해 한대로) 그것은 당신이 csv 파일에 이미 존재하는 테이블을 복사하는 것을 허용하고, 내가 원하는 것은 내 쿼리의 stdout을 csv 파일에 직접 복사하는 것이다. COPY 명령이나 다른 방법으로이를 수행 할 수있는 방법이 있습니까?

내 명령은 스타일 ( select column1, column2 from table where condition = xy cqlsh select column1, column2 from table where condition = xy cqlsh )을 선택하고 cqlsh 사용 cqlsh .


Answers

내가 올바르게 이해하고 있다면 출력을 표준 출력으로 리디렉션하고 싶습니까?

cql 명령을 파일에 넣으십시오. 내 파일은 select.cql이며 내용은 다음과 같습니다.

select id from wiki.solr limit 100;

그런 다음 다음을 실행하면 stdout으로 표시됩니다.

cqlsh < select.cql

이게 도움이 되길 바란다. 거기에서 파이프를 뽑아서 쉼표를 추가하고 헤더 등을 제거 할 수 있습니다.


파이프 ( '|')를 구분 기호로 사용하여 데이터를 신경 쓸 필요가 없다면 cqlsh에서 -e 플래그를 사용해보십시오. -e 플래그를 사용하면 명령 프롬프트에서 Cassandra로 질의를 보낼 수 있습니다. 명령 프롬프트에서 출력에서 ​​grep / awk / whatever를 리디렉션하거나 심지어 수행 할 수 있습니다.

$ bin/cqlsh -e'SELECT video_id,title FROM .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 .videos;" > select.cql
$ bin/cqlsh -f select.cql > output.txt

여기에서 output.txt에 cat 을 사용하면 위와 같은 행이 생성됩니다.



  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에 붙여 넣으십시오.


코멘트가 없습니다 ... 100 개 이상의 행이있을 때 "MORE"문제를 처리하려면 SQL 앞에 "paging off"를 추가하면됩니다.

좋아하는 것

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

이로 인해 출력 파일의 시작 부분에 약간의 지저분한 문제가 발생하지만 나중에 쉽게 제거 할 수 있습니다.



이 요청은 작동하지 않습니다.

그것은 카산드라에서 정렬 순서가 어떻게 작동하는지 오해하고 있기 때문입니다. firstname 보조 색인을 사용하는 대신 다음과 firstname 검색어에 대한 표를 만듭니다.

CREATE TABLE usersByFirstName (
  id int,
  firstname text,
  lastname text,
  PRIMARY KEY (firstname,id));

이 쿼리는 이제 작동합니다.

SELECT * FROM usersByFirstName WHERE firstname='francois'
ORDER BY id DESC LIMIT 5;

필자는 firstnameid 에 복합 기본 키를 만들었습니다. 이렇게하면 id 데이터를 클러스터링하면서 firstname 데이터를 분할 (사용자가 쿼리 할 수 ​​있도록)합니다. 기본적으로 데이터는 id 별로 오름차순으로 클러스터링됩니다. 이 동작을 변경하려면 테이블 생성 명령문에서 CLUSTERING ORDER 를 지정할 수 있습니다.

WITH CLUSTERING ORDER BY (id DESC)

... 그리고 나서 ORDER BY 절도 필요 없습니다.

나는 최근에 카산드라 (Cassandra)에서 클러스터링 순서가 어떻게 작용하는지에 대한 기사를 썼다. 이것에 대해 설명하고 주문 전략에 대해서도 다룹니다.