Как получить количество строк, возвращаемых запросом, используя 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.