虚列火花JDBC
我使用的查询,如下所示,以从MySQL获取数据:虚列火花JDBC
var df = spark.read.format("jdbc") .option("url", "jdbc:mysql://10.0.0.192:3306/retail_db")
.option("driver" ,"com.mysql.jdbc.Driver")
.option("user", "retail_dba")
.option("password", "cloudera")
.option("dbtable", "orders")
.option("partitionColumn", "order_id")
.option("lowerBound", "1")
.option("upperBound", "68883")
.option("numPartitions", "4")
.load()
问题是,我可以使用伪柱(像ROWNUM
在Oracle或RRN(employeeno)
在DB2)与option
其中I指定partitionColumn
?
如果不是,我们可以指定一个不是主键的分区列吗?
回答:
根据spark的官方文档,partitionColumn
可以是任何数字列(不一定是主键列)。
partitionColumn必须是相关表中的数字列。
参考:http://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases
回答:
我可以使用(在Oracle或RRN(为employeeno)在DB2像ROWNUM)是伪列
TL; DR大概没有。
虽然星火不考虑像PRIMARY KEY
或UNIQUE
约束有非常重要要求为partitionColumn
,这是不明确的文件中指出 - 它必须是确定性。
每个执行者使用单独的事务来获取它自己的一段数据。如果数字列不确定(稳定,在事务之间保留),Spark所看到的数据状态可能不一致,并且记录可能会被复制或跳过。
由于ROWNUM
的实现通常是不稳定的(取决于非稳定排序,并且可能受索引等功能的影响),因此partitionColumn
没有安全的选择。出于同样的原因,你不能使用随机数字。
我们可以指定一个分区列这不是一个主键
是的,只要它满足上述条件。
以上是 虚列火花JDBC 的全部内容, 来源链接: utcz.com/qa/259778.html