select sparksql 对 hive 的最新数据分区

select latest partition of data from hive by sparksql

我有一个由 ds 划分的配置单元 table,其中 ds 是一个类似于 2017-11-07 的字符串。由于字符串是可比较的,我想通过sparksql从hive中select 最新分区数据,所以我写了这段代码:

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 但我没有从第三条语句中得到任何输出。我想知道为什么,有什么好的方法吗?

我把’’加到2017-11-07就可以了,但还是不够优雅

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

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

spark 中的 Actions 效率很低,你有一个没用的:

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();