通过SparkSQL选择Hive的最新数据分区



我有一个由ds分部的蜂巢表,其中ds是一个像2017-11-07一样的字符串。由于字符串是可比的,我想通过 sparksql 从 hive 中选择最新的数据分区,所以我写了这段代码:

Dataset<Row> ds = sparkSession.sql("select max(ds) from admin_zpw123_user_meta");
String s = ds.first().getString(0);
sparkSession.sql("select * from admin_zpw123_user_meta where ds="+s).show();

我可以打印字符串 s,这很2017-11-07但我没有从第三个语句中获得任何输出。我想知道为什么,有没有一种优雅的方法可以做到这一点?

SQL 语句中使用2017-11-07字符串时,需要用单引号括起来。您可以像这样将其添加到查询中:

sparkSession.sql("select * from admin_zpw123_user_meta where ds='" + s + "'").show();

我只是在 2017-11-07 中添加’’然后它就可以工作了,但它仍然不是那么优雅

动作在 Spark 中非常低效,而且你有一个无用的:

String s = ds.first().getString(0);

要解决此问题,您可以通过执行以下操作来仅过滤最新的分区日期:

sparkSession.sql("select * from admin_zpw123_user_meta where ds in (select max(distinct ds) from admin_zpw123_user_meta)").show();

相关内容

  • 没有找到相关文章

最新更新