Ben https://github.com/websudos/phantom#partial-select-queriesdeğer dilim play.api.libs.iteratee.Enumerator
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import org.joda.time.DateTime
import org.joda.time.format.DateTimeFormat
import org.joda.time.format.DateTimeFormatter
import com.anomaly42.aml.dao.CassandraConnector
import com.websudos.phantom.CassandraTable
import com.websudos.phantom.Implicits._
object People extends People {
def getPersonByUpdatedAt(from:String, to:String, start: Int, limit: Int) = {
val dtf:DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
val fromDateTime = dtf.parseDateTime(from)
val toDateTime = dtf.parseDateTime(to)
People.select(_.updated_at, _.firstName).allowFiltering.where(_.updated_at gte fromDateTime).and(_.updated_at lte toDateTime).fetchEnumerator().slice(start, limit).collect
}
}
Ben kütüphane bağımlılık aşağıdaki kullanıyorum
de açıklanan "büyük rekor setleri için zaman uyumsuz yineleyiciler" dayalı kod yazıyorum üyesi değildir:
value slice is not a member of play.api.libs.iteratee.Enumerator[(org.joda.time.DateTime, Option[String])]
Ben çalışıyorum neyim: derleme yaparken
scalaVersion := "2.11.6"
libraryDependencies ++= Seq(
"com.websudos" %% "phantom-dsl" % "1.5.4",
many more...
)
Ama hata aşağıdaki almak yapılacak g 'başlangıç', getPersonByUpdatedAt() metodu olarak adlandırılan her zaman başlayarak sonraki sonuçlar da limit sayıda geri getiren bir sorgu yazmaya.
Merhaba @flavian yardımcı olacaktır, Cevabınız için teşekkür. Veritabanımın milyonlarca kaydı var ve bu yüzden bunu Enumerators kullanarak uygulamak zorunda kalacağım. Tarih sütununu, sizin tarafınızdan belirtildiği gibi 'KÜME SİPARİŞİ 'ile tanımladım, ancak" İHTİYAÇ FİLTRELEME "yi kullanmazsam, çalışma zamanı hataları alıyorum. Aşağıdaki ifadeyle derleme hatasından kurtulmayı başardım: People.select (_. Updated_at, _.firstName) .allowFiltering.where (_. Updated_at gte fromDateTime) .ve (_. Updated_at lte toDateTime) .setFetchSize (pageSize) .fetchEnumerator() Iteratee.slice (başlangıç, sayfaSize)) çalıştırın –