我有一个火花工作,定期将数据从Postgres移动到Redshift。我'使用jdbc.read
函数与lowerBound
和upperBound
参数:
df = spark.read.jdbc(url=jdbc_url, \
table='some_table',\
column='id',\
lowerBound=1,\
upperBound=20000000, \
numPartitions=50)
目前,upperBound
是硬编码的,但是表的大小每天都在增长,因此我需要以某种方式动态更新upperBound
值,以反映下一个作业开始时表的大小。如何使upperBound
值等于表格的当前大小?
您可以在执行主查询之前获取上限值,然后使用它们
query = "(SELECT min({0}), max({0}) FROM {1}) AS temp".format(
partition_column, table
)
(lower_bound, upper_bound) = (spark.read
.jdbc(url=url, table=query. properties=properties)
.first())
df = spark.read.jdbc(url=jdbc_url, \
table='some_table',\
column='id',\
lowerBound=1,\
upperBound=upper_bound + 10, \
numPartitions=50)