cassandra - cql - 从csv文件导入的计数和组数据

时间:2014-06-09 13:55:38

标签: cql3 cassandra-2.0

我是一个没有-sql的新手,我的背景基于sql db(mysql)。 上个月我开始使用大数据,我选择cassandra作为no-sql db。

这是我的开发环境:

  • ubuntu 12.04 64 bit
  • cqlsh 4.1.1
  • Cassandra 2.0.6
  • CQL规范3.1.1
  • Thrift protocol 19.39.0

我的输入是包含许多列的每日csv文件,我只能导入其中一些列。 csv文件的结构 user_id =>文本

  • col_A => INT
  • col_B => INT
  • col_C => INT
  • other_col =>不要导入
  • .....
  • .....
  • .....
  • other_col =>不要导入

导入csv行的条件是什么? 列user_id + col_A + col_B + col_C的值必须是唯一的。

然后我想创建一个包含与列

一样多的主键的表
CREATE TABLE unique_value (
  user_id text,
  col_A int,
  col_B int,
  col_C int,
  PRIMARY KEY (user_id, col_A, col_B, col_C)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  index_interval=128 AND
  read_repair_chance=0.100000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='99.0PERCENTILE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

在导入过程中,只插入组合的唯一值" user_id + col_A + col_B + col_C" csv文件,这就是我想要的。

导入后,我需要查询表,以获得按col_B值分组的唯一user_id(不重复)的总数。在sql中,查询应该是

SELECT COUNT(b.user_id), b.col_B(
(SELECT COUNT(user_id) AS is_user_exclusive, user_id, col_B FROM unique_value
GROUP BY col_B
HAVING is_user_exclusive < 2) AS b
GROUP BY b.col_B

但我仍然无法找到正确的cql查询或者可能找到正确的数据建模。

你有任何提示吗?

提前谢谢

1 个答案:

答案 0 :(得分:0)

看看柜台!!

http://www.datastax.com/documentation/cql/3.0/cql/cql_using/use_counter_t.html

您可以创建另一个表进行此计数

create table mycounts(count counter,user_id text,col_b int,PRIMARY KEY(user_id,col_b))

因此,无论何时插入unique_values表,都要插入mycounts表。然后当你查询时,只需从mycounts中选择*。我希望这有帮助!!