cle*_*sky 3 apache-spark apache-spark-sql spark-jdbc
I am using a query to fetch data from MYSQL as follows:
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()
Run Code Online (Sandbox Code Playgroud)
Question is, can I use a pseudo column (like ROWNUM in Oracle or RRN(employeeno) in DB2) with option where I specify the partitionColumn ?
If not, can we specify a partition column which is not a primary key ?
我可以使用伪列吗(如 Oracle 中的 ROWNUM 或 DB2 中的 RRN(employeeno))
TL; DR 可能没有。
虽然 Spark 不考虑约束,例如PRIMARY KEY或UNIQUE有非常重要的要求partitionColumn,但文档中没有明确说明 - 它必须是确定性的。
每个执行器使用单独的事务获取自己的数据。如果数字列不是确定性的(稳定的,在事务之间保留),Spark 看到的数据状态可能会不一致,并且记录可能会重复或跳过。
因为ROWNUM实现通常是不稳定的(取决于不稳定的排序并且可能会受到索引等功能的影响),所以partitionColumn. 出于同样的原因,您不能使用随机数。
此外,一些供应商可能会进一步限制对伪列的允许操作,使它们不适合用作分区列。例如甲骨文ROWNUM
测试大于正整数的 ROWNUM 值的条件始终为假。
可能会静默失败,导致错误的结果。
我们可以指定一个不是主键的分区列吗
是的,只要它满足上述标准。
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |