Моя цель состоит в том, чтобы сделать сумму messages_sent и emails_sent для каждого значения DISTINCT provider_id для заданного временного диапазона (fromDate
У меня есть таблица Cassandra, использующая схему express-cassandra (в Node.js) какследует:
module.exports = {
fields: {
stats_provider_id: {
type: 'uuid',
default: {
'$db_function': 'uuid()'
}
},
stats_date_id: {
type: 'timeuuid',
default: {
'$db_function': 'now()'
}
},
provider_id: 'uuid',
provider_name: 'text',
messages_sent: 'int',
emails_sent: 'int'
},
key: [
[
'stats_date_id'
],
'created_at'
],
table_name: 'stats_provider',
options: {
timestamps: {
createdAt: 'created_at', // defaults to createdAt
updatedAt: 'updated_at' // defaults to updatedAt
}
}
}
Чтобы все заработало, я надеялся, что это будет так же просто, как сделать следующее:
let query = {
stats_date_id: {
'$gt': db.models.minTimeuuid(fromDate),
'$lt': db.models.maxTimeuuid(toDate)
}
};
let selectQueries = [
'provider_name',
'provider_id',
'count(direct_sent) as direct_sent',
'count(messages_sent) as messages_sent',
'count(emails_sent) as emails_sent',
];
// Query stats_provider table
let providerData = await db.models.instance.StatsProvider.findAsync(query, {select: selectQueries});
Это, однако, жалуется на необходимость фильтрации результатов: Error during find query on DB -> ResponseError: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance
.
Я полагаю, у вас не может быть первичного ключа, и поиск по диапазону дат на нем?Если да, то каков правильный подход к такого рода запросам?