diff --git a/README.md b/README.md index 98fff77..6a88c63 100644 --- a/README.md +++ b/README.md @@ -212,13 +212,12 @@ All the methods above can be applied to any timeseries, group-by or top-N query ## Druid SQL support -Instead of using the Druid native API, Scruid also supports Druid queries -via [SQL](https://druid.apache.org/docs/latest/querying/sql.html). +Instead of using the Druid native API, Scruid also supports Druid queries via [SQL](https://druid.apache.org/docs/latest/querying/sql.html). ```scala import ing.wbaa.druid.SQL._ -val query = sql"""SELECT COUNT(*) as "count" FROM wikipedia WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00'""" +val query = dsql"""SELECT COUNT(*) as "count" FROM wikipedia WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00'""" val response = query.execute() ``` diff --git a/docs/sql.md b/docs/sql.md index 1818f91..b6ae036 100644 --- a/docs/sql.md +++ b/docs/sql.md @@ -8,7 +8,7 @@ import scala.concurrent.Future import ing.wbaa.druid.SQL._ import ing.wbaa.druid.DruidSQLResults -val query = sql"""SELECT COUNT(*) as "count" FROM wikipedia WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00'""" +val query = dsql"""SELECT COUNT(*) as "count" FROM wikipedia WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00'""" val response: Future[DruidSQLResults] = query.execute() @@ -23,7 +23,7 @@ Function `sql`, allows multiline queries: ```scala import ing.wbaa.druid.SQL._ -val query = sql""" +val query = dsql""" |SELECT COUNT(*) as "count" |FROM wikipedia |WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00' @@ -39,7 +39,7 @@ val countColumnName = "count" val dataSourceName = "wikipedia" val dateTime = "2015-09-12 00:00:00" -val query = sql""" +val query = dsql""" |SELECT COUNT(*) as "${countColumnName}" |FROM ${dataSourceName} |WHERE "__time" >= TIMESTAMP '${dateTime}' @@ -60,7 +60,7 @@ val fromDateTime = LocalDateTime.of(2015, 9, 12, 0, 0, 0, 0) val untilDateTime = fromDateTime.plusDays(1) val queryParameterized: SQLQuery.Parameterized = - sql""" + dsql""" |SELECT FLOOR(__time to HOUR) AS hourTime, count(*) AS "count" |FROM wikipedia |WHERE "__time" BETWEEN ? AND ? @@ -86,7 +86,7 @@ val contextParameters = Map( QueryContext.SqlTimeZone -> "America/Los_Angeles" ) val query = - sql"""SELECT COUNT(*) as "count" FROM wikipedia WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00'""" + dsql"""SELECT COUNT(*) as "count" FROM wikipedia WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00'""" .setContext(contextParameters) ``` @@ -100,7 +100,7 @@ import akka.stream.scaladsl.Source import ing.wbaa.druid.SQL._ import ing.wbaa.druid.{DruidSQLResult, DruidSQLResults} -val query = sql"""SELECT COUNT(*) as "count" FROM wikipedia WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00'""" +val query = dsql"""SELECT COUNT(*) as "count" FROM wikipedia WHERE "__time" >= TIMESTAMP '2015-09-12 00:00:00'""" val source: Source[DruidSQLResult, NotUsed] = query.stream() diff --git a/src/main/scala/ing/wbaa/druid/SQL.scala b/src/main/scala/ing/wbaa/druid/SQL.scala index 2dc309a..75e99d3 100644 --- a/src/main/scala/ing/wbaa/druid/SQL.scala +++ b/src/main/scala/ing/wbaa/druid/SQL.scala @@ -3,8 +3,8 @@ package ing.wbaa.druid object SQL { implicit class StringToSQL(val sc: StringContext) extends AnyVal { - def sql(query: Any*)(implicit context: Map[String, String] = Map.empty, - config: DruidConfig = DruidConfig.DefaultConfig): SQLQuery = + def dsql(query: Any*)(implicit context: Map[String, String] = Map.empty, + config: DruidConfig = DruidConfig.DefaultConfig): SQLQuery = SQLQuery(sc.s(query: _*), context)(config) } diff --git a/src/main/scala/ing/wbaa/druid/client/DruidHttpClient.scala b/src/main/scala/ing/wbaa/druid/client/DruidHttpClient.scala index 17b36e5..f68b0d0 100644 --- a/src/main/scala/ing/wbaa/druid/client/DruidHttpClient.scala +++ b/src/main/scala/ing/wbaa/druid/client/DruidHttpClient.scala @@ -62,7 +62,9 @@ class DruidHttpClient private (connectionFlow: DruidHttpClient.ConnectionFlowTyp .map { entity => val requestURL = if (query.queryType == QueryType.SQL) s"${druidConfig.url}sql/" else druidConfig.url - logger.info(s"requestURL = ${requestURL}") + + logger.debug("requestURL = {}", requestURL) + HttpRequest(HttpMethods.POST, uri = requestURL) .withEntity(entity.withContentType(`application/json`)) } @@ -82,9 +84,10 @@ class DruidHttpClient private (connectionFlow: DruidHttpClient.ConnectionFlowTyp queryType: QueryType, request: HttpRequest )(implicit druidConfig: DruidConfig): Future[T] = { - logger.debug( - s"Executing api ${request.method} request to ${request.uri} with entity: ${request.entity}" - ) + logger.debug("Executing api {} request to {} with entity: {}", + request.method, + request.uri, + request.entity) Source .single(request) @@ -101,7 +104,9 @@ class DruidHttpClient private (connectionFlow: DruidHttpClient.ConnectionFlowTyp .map { entity => val requestURL = if (q.queryType == QueryType.SQL) s"${druidConfig.url}sql/" else druidConfig.url - logger.info(s"requestURL = ${requestURL}") + + logger.debug("requestURL = {}", requestURL) + HttpRequest(HttpMethods.POST, uri = requestURL) .withEntity(entity.withContentType(`application/json`)) } diff --git a/src/test/scala/ing/wbaa/druid/sql/SQLQuerySpec.scala b/src/test/scala/ing/wbaa/druid/sql/SQLQuerySpec.scala index d51a922..912069c 100644 --- a/src/test/scala/ing/wbaa/druid/sql/SQLQuerySpec.scala +++ b/src/test/scala/ing/wbaa/druid/sql/SQLQuerySpec.scala @@ -25,7 +25,7 @@ class SQLQuerySpec extends WordSpec with Matchers with ScalaFutures with CirceDe "SQL query" should { - val query: SQLQuery = sql""" + val query: SQLQuery = dsql""" |SELECT FLOOR(__time to HOUR) AS hourTime, count(*) AS "count" |FROM wikipedia |WHERE "__time" BETWEEN TIMESTAMP '2015-09-12 00:00:00' AND TIMESTAMP '2015-09-13 00:00:00' @@ -57,7 +57,7 @@ class SQLQuerySpec extends WordSpec with Matchers with ScalaFutures with CirceDe val untilDateTime = fromDateTime.plusDays(1) val queryParameterized: SQLQuery.Parameterized = - sql""" + dsql""" |SELECT FLOOR(__time to HOUR) AS hourTime, count(*) AS "count" |FROM wikipedia |WHERE "__time" BETWEEN ? AND ?