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();
我有一个由 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();