【发布时间】:2018-11-29 22:18:40
【问题描述】:
我正在研究 Spark SQL,我正在尝试使用以下查询获取记录:
/*Select all open tasks which are not unscheduled*/
Dataset<Row> scheduledOpenTasks = sqlContext.sql(
"SELECT * "
+ "FROM OpenTaskTable "
+ "WHERE due_date < cast('" + unscheduledDate + "' as timestamp)");
scheduledOpenTasks.createOrReplaceTempView("ScheduledOpenTaskTable");
/*Select scheduled tasks with max due_date for each csg_order_id*/
Dataset<Row> scheduledTasks = sqlContext.sql(
"SELECT TS1.* from ScheduledOpenTaskTable AS TS1 "
+ "INNER JOIN "
+ " (SELECT csg_order_id, MAX(due_date) AS MaxDD"
+ " FROM ScheduledOpenTaskTable"
+ " GROUP BY csg_order_id) AS TS2 "
+ "ON TS1.csg_order_id = TS2.csg_order_id AND TS1.due_date = TS2.MaxDD");
未计划的 _date 的值为 4444-12-30。
在OpenTaskTable中,每个csg_order_id可以有多个due_date,包括unscheduled_date。我需要csg_order_ids 对应最高的due_dates 除了unscheduled_date。
现在,通过第一次查询,我将删除所有具有due_date 为unscheduled_date 的记录。在第二个查询中,我正在为每个 csg_order_id 检索最大 due_date 的所有记录。
现在问题来了:有没有办法将这些查询合并为一个?
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
标签: java sql apache-spark apache-spark-sql