I agree it makes code messier, but you aren't really losing anything by separating them out into separate tables and then doing parallel queries. 

Counter tables already don't support atomic batch operations (all batch operations are unlogged), CAS operations (LWTs not supported) and have a whole host of other gotchas that don't apply as much to Cassandra but have more to do with the mathematical underpinnings of non-idempotent operations in a world where the Two Generals problem is unsolved.

If Cassandra WAS to allow mixing of storage paradigms into one "logical" table it would probably be just two separate tables under the hood anyway since the write path is so different. 

This isn't Stockholm Syndrome for Cassandra as much as it is Stockholm Syndrome for databases. I've never used a database that could count very well, even non-distributed databases like postgres or mysql. Cassandra's implementation is at least fast and scalable.


On Tue, Nov 1, 2016 at 2:13 PM, Edward Capriolo <edlinuxguru@gmail.com> wrote:
Here is a solution that I have leverage. Ignore the count of the value and use a multi-part column name as it's value.

For example:

create column family stuff (
rowkey string,
column string,
value string.
counter_to_ignore long,
primary key( rowkey, column, value));

On Tue, Nov 1, 2016 at 9:29 AM, Ali Akhtar <ali.rac200@gmail.com> wrote:
That's a terrible gotcha rule.

On Tue, Nov 1, 2016 at 6:27 PM, Cody Yancey <yancey@uber.com> wrote:

In your table schema, you have KEYS and you have VALUES. Your KEYS are text, but they could be any non-counter type or compound thereof. KEYS obviously cannot ever be counters.

Your VALUES, however, must be either all counters or all non-counters. The official example you posted conforms to this limitation.


On Nov 1, 2016 7:16 AM, "Ali Akhtar" <ali.rac200@gmail.com> wrote:
I'm not referring to the primary key, just to other columns.

My primary key is a text, and my table contains a mix of texts, ints, and timestamps.

If I try to change one of the ints to a counter and run the create table query, I get the error ' Cannot mix counter and non counter columns in the same table'

On Tue, Nov 1, 2016 at 6:11 PM, Cody Yancey <yancey@uber.com> wrote:

For counter tables, non-counter types are of course allowed in the primary key. Counters would be meaningless otherwise.


On Nov 1, 2016 7:00 AM, "Ali Akhtar" <ali.rac200@gmail.com> wrote:
In the documentation for counters:

The example table is created via:

CREATE TABLE counterks.page_view_counts
  (counter_value counter,
  url_name varchar,
  page_name varchar,
  PRIMARY KEY (url_name, page_name)

Yet if I try to create a table with a mixture of texts, ints, timestamps, and counters, i get the error ' Cannot mix counter and non counter columns in the same table'

Is that supposed to be allowed or not allowed, given that the official example contains a mix of counters and non-counters?