Получайте почасовые обновления с помощью Spark SQL - PullRequest
0 голосов
/ 28 июня 2018

Я работаю над таблицей заказов, в которой есть поля order_id и order_completion_date. Order_completion_date показывает, когда был выполнен определенный заказ. Если заказ не завершен, он будет отображать значение, например, 4447-12-30 00:00:00.

Моя цель - получить количество записей, выполненных за час, за последние 24 часа. Я изучил другие подобные вопросы, но не смог найти способ представить метку времени в следующем формате:

       {
           "date_time":"07/05/2018 00:00:00", 
           "completed_orders":"1000" 
        },
        {
           "date_time":"07/05/2018 01:00:00",
           "completed_orders":"2000"
        },
        {
           "date_time":"07/05/2018 02:00:00",
           "completed_orders":"3000"
        },
        {
           "date_time":"07/05/2018 03:00:00",
           "completed_orders":"4000"
        },
        {
           "date_time":"07/05/2018 04:00:00",
           "completed_orders":"5000"
        }

Я сейчас пытаюсь выполнить следующий запрос:

sqlContext.sql("SELECT COUNT(csg_order_id) AS completed_orders, hour(from_unixtime(cast(ord_completion_date as bigint))) as hour "
            + "FROM TotalTasks "
            + "WHERE ord_completion_date <= cast('"+curDate+"' as Timestamp) AND ord_completion_date >= date_add(cast('"+curDate+ "' as Timestamp), -1) "
            + "GROUP BY  hour "
            + "ORDER BY  hour");

но это дает мне такие результаты:

+----------------+----+
|completed_orders|hour|
+----------------+----+
|             143|   0|
|             336|   1|
|             570|   2|
|             649|   3|
|             297|   4|
|             219|   5|
|              68|   7|
|              52|   8|
|              56|   9|
|            7360|  10|
|              78|  12|
|              59|  19|
|             238|  21|
|             332|  22|
+----------------+----+

есть ли способ получить время вместо количества часов? Любая помощь приветствуется.

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете использовать date_format Функция SQL:

SELECT
  COUNT(*) AS completed,
  date_format(from_unixtime(bigint(ord_completion_date))), 'MM/dd/yyyy HH:00:00') AS date_time
 FROM tasks
 WHERE bigint(ord_completion_date) BETWEEN current_date AND date_add(current_date, 1)
 GROUP BY 2
 ORDER BY 2
...