Cassandra Failed Формат Значение - PullRequest
       1

Cassandra Failed Формат Значение

0 голосов
/ 24 февраля 2019

Я следую статье по использованию группы по: http://www.batey.info/cassandra-aggregates-min-max-avg-group.html

И у меня есть следующая функция и агрегат

CREATE FUNCTION state_group_and_total( state map<text, int>, type text, amount int )
CALLED ON NULL INPUT
RETURNS map<text, int>
LANGUAGE java AS '
  Integer count = (Integer) state.get(type);
  if (count == null)
    count = amount;
  else
    count = count + amount;
  state.put(type, count);
  return state; ' ;


CREATE OR REPLACE AGGREGATE group_and_total(text, int) 
SFUNC state_group_and_total 
STYPE map<text, int> 
INITCOND {};

Но когда я запускаю следующую команду select group_and_total(name,count) from ascore; Iполучить ошибку Failed to format value OrderedMapSerializedKey([(u'gleydson', 4)]) : 'NoneType' object has no attribute 'sub_types'

Моя схема

CREATE TABLE ascore (
  name text,
  count int,
  id text,
  PRIMARY KEY(id)
)

1 Ответ

0 голосов
/ 25 февраля 2019

So there's no group by keyword in Cassandra в сообщении в блоге больше не является точным.Вы можете группировать и применять агрегаты к этой группе, что значительно облегчает задачу в качестве примера:

CREATE TABLE scores (
  competition text,
  name text,
  run_date timestamp,
  score int,
  PRIMARY KEY ((competition), name, run_date));

INSERT INTO scores (competition, name, run_date , score ) VALUES ( 'week-12', 'user1', dateOf(now()), 2);
INSERT INTO scores (competition, name, run_date , score ) VALUES ( 'week-12', 'user1', dateOf(now()), 2);
INSERT INTO scores (competition, name, run_date , score ) VALUES ( 'week-12', 'user1', dateOf(now()), 4);
INSERT INTO scores (competition, name, run_date , score ) VALUES ( 'week-12', 'user2', dateOf(now()), 4);

SELECT name, sum(score) AS user_total FROM scores WHERE competition = 'week-12' GROUP BY competition, name;

 name  | user_total
-------+------------
 user1 |          8
 user2 |          4

Обратите внимание, что функция агрегата, с которой вы работаете, работает с примером выше:

select group_and_total(name,score) from scores where competition = 'week-12';

 test.group_and_total(name, score)
----------------------------------------
               {'user1': 8, 'user2': 4}

ОБНОВЛЕНИЕ с вашей схемой:

> INSERT INTO ascore (id, name, count) VALUES ('id1', 'bob', 2);
> INSERT INTO ascore (id, name, count) VALUES ('id2', 'alice', 1);
> INSERT INTO ascore (id, name, count) VALUES ('id3', 'alice', 1);
# even with a null
> INSERT INTO ascore (id, name) VALUES ('id4', 'alice');
> select group_and_total(name,count) from ascore;                                                                                                                                                            
 test.group_and_total(name, count)
----------------------------------------
                 {'alice': 2, 'bob': 2}

Возможно, вы используете старую версию с некоторыми ошибками?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...