Как получить количество строк, возвращаемых запросом, используя gocql

Я использую библиотеку gocql, которая описана здесь: https://godoc.org/github.com/relops/cqlc/cqlc и пытаюсь написать вызов API в golang, который будет запрашивать все элементы в моем база данных, которая заполняет определенное поле и возвращает общее количество возвращаемых элементов. Я знаю, когда я нахожусь в интерфейсе Cassandra, я могу использовать вызов SELECT COUNT(*) from table1 WHERE ...; где table1 - имя таблицы. Я просматривал документацию, и все, что я могу найти, - это функция предела, которая ограничивает количество возвращаемых записей.

Например, просто скажите, что у меня есть таблица базы данных событий в Кассандре, которые происходят в разные дни. Я просто хочу вернуть количество событий, которые происходят во вторник, и я хочу сделать это с помощью gocql.

В настоящее время я делаю что-то вроде:

cx := cqlc.NewContext()
iter, err := cx.Select().
            From(db.EVENTLOG).
            Where(db.EVENTLOG.DAY.Eq(day).
            Limit(10000).       
            Fetch(cass)
data, err = db.BindEventlog(iter)

Функция BindEventLog возвращает массив событий, которые происходят в "день", но опять же, я просто хочу количество событий, а не сами события. Есть ли способ получить это без итерации по этому массиву, потому что я в любом случае собираюсь выбросить массив, поэтому было бы очень медленно получить базу данных, чтобы дать мне весь массив данных.

Я новичок в этом, поэтому, если вам нужна дополнительная информация, пожалуйста, спросите, я постарался сделать это как можно более конкретным. Благодарю.

1 ответ

Я бы предпочел:

var count int
tc.Session.Query(`SELECT COUNT(*) FROM ks.tbl WHERE something = ? ALLOW FILTERING`, "something_else").Iter().Scan(&count)
print(count)

Поскольку подсчет будет производиться самой базой данных, а не приложением. ответ души также будет работать, но я предпочитаю, чтобы счетчик сохранялся как целое число, а сканирование выполнялось напрямую, но не с дополнительным циклом

Вы можете сделать это

var count string
iter := session.Query(`SELECT count(*) FROM tablename`).Iter()
for iter.Scan(&count) {
    print(count)
}

Вы получите счетчик в переменной count.

Самая близкая вещь, которую я мог бы найти, которая помогла бы вам, это Iter.NumRows

Если они разбивают на строки, это не даст вам того, что вы ищете. В случае, если они это сделают, это разумная возможность запросить их на Github.

Другие вопросы по тегам