如何根据表的大小来修改Spark读取jdbc中的属性?

问题描述 投票:0回答:1

我有一个火花工作,定期将数据从Postgres移动到Redshift。我'使用jdbc.read函数与lowerBoundupperBound参数:

df = spark.read.jdbc(url=jdbc_url, \
          table='some_table',\
          column='id',\
          lowerBound=1,\
          upperBound=20000000, \
          numPartitions=50)

目前,upperBound是硬编码的,但是表的大小每天都在增长,因此我需要以某种方式动态更新upperBound值,以反映下一个作业开始时表的大小。如何使upperBound值等于表格的当前大小?

postgresql apache-spark etl
1个回答
1
投票

您可以在执行主查询之前获取上限值,然后使用它们

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)
© www.soinside.com 2019 - 2024. All rights reserved.