问题 获取cassandra中的所有行


我有一个包含300万行的cassandra表。现在我试图获取所有行并将它们写入几个csv文件。我知道这是不可能的 select * from mytable。有人可以告诉我怎么做到这一点?

或者有没有办法读取行 n 行 n 没有指定任何行 where 条件?


5895
2018-05-19 19:04


起源

这有可能。但你不应该。您应该重新考虑您的数据模式。 - Raedwald
谢谢。我很高兴听到有可能这样做。我可以知道吗?我知道我可能需要重新考虑我的数据模式。但现在为时已晚,重新收集数据大约需要3个月。 - Benson


答案:


据我所知,cassandra 2.0有一个改进 '在驾驶员方面' 是自动寻呼。你可以这样做:

Statement stmt = new SimpleStatement("SELECT * FROM images LIMIT 3000000");
stmt.setFetchSize(100);
ResultSet rs = session.execute(stmt);

// Iterate over the ResultSet here

更多阅读 使用Cassandra 2.0改进驾驶员方面

你可以找到司机 这里


8
2018-05-20 04:09



听起来像这样可以解决问题。我会尝试。谢谢。 - Benson
是的,这完全解决了我的问题。 - Benson
由于完整的群集扫描,性能很差。但它可以用来转储数据。 - ubombi


您可以使用Pig读取数据并将其存储到HDFS中,然后将其作为单个文件复制出来:

在猪:

data = LOAD 'cql://your_ksp/your_table' USING CqlStorage();
STORE data INTO '/path/to/output' USING PigStorage(',');

从OS shell:

hadoop fs -copyToLocal hdfs://hadoop_url/path/to/output /path/to/local/storage

2
2018-05-20 13:13



对不起,我对猪不熟悉。但我会学习并尝试它。谢谢。 - Benson
Pig可能是Cassandra中最常用的数据加载和探索机制。它编译为mapreduce并无缝地提交给Hadoop。 - rs_atl


默认情况下使用select语句只能获得100000条记录..所以如果你必须检索记录,你必须指定限制..

Select * from tablename LIMIT 10000000 (在你的情况下300万然后指定它)...


1
2018-05-20 05:54



如果你一次获取太多行,你会得到 rpc_timeout 错误 - Benson
增加cassandra.yaml文件中的read_request_timeout_in_ms .. - Working Hard..