有没有一种方法可以限制使用spark sql 2.2.0从jdbc源获取的记录数?
我正在处理将一个大于200M的记录从一个MS Sql Server表移动(和转换)到另一个MS Sql表的任务:
val spark = SparkSession .builder() .appName("co.smith.copydata") .getOrCreate() val sourceData = spark .read .format("jdbc") .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") .option("url", jdbcSqlConnStr) .option("dbtable", sourceTableName) .load() .take(limit)
在工作的同时,很明显,它首先要从数据库中加载所有200M条记录,首先要花18分钟的时间,然后将我希望用于测试和开发目的的有限数量的记录返回给我。
在take(…)和load()之间切换会产生编译错误。
我很欣赏有几种方法可以将样本数据复制到较小的表中,使用SSIS或其他etl工具。
我真的很好奇是否有一种方法可以使用spark,sql和jdbc实现我的目标。
要限制下载的行数,可以使用SQL查询代替“dbtable”中的表名。文档中的描述。
在查询中,可以指定“ where”条件,例如,使用特定于服务器的功能来限制行数(例如Oracle中的“ rownum”)。