2

Oracle テーブル (1800k 以上のレコードで構成されている) から毎日データ全体を取得したい Spark SQL を使用しています。Oracle から読み取るとアプリケーションがハングアップするため、partitionColumn,lowerBound & upperBoundの概念を使用しました。しかし、問題は、主キー列のlowerBoundとupperBoundの値を動的に取得するにはどうすればよいですか?? lowerBound と upperBound の値は毎日変化します。したがって、主キー列の境界値を動的に取得するにはどうすればよいですか?? 私の問題のサンプル例を教えてくれる人はいますか?

4

1 に答える 1

3

データベースから必要な値を取得するだけです。

url = ...
properties = ...
partition_column = ...
table = ...

# Push aggregation to the database
query = "(SELECT min({0}), max({0}) FROM {1}) AS tmp".format(
    partition_column, table
)

(lower_bound, upper_bound) = (spark.read
    .jdbc(url=url, table=query. properties=properties)
    .first())

メインクエリに渡します:

num_partitions = ...

spark.read.jdbc(
    url, table, 
    column=partition_column, 
    # Make upper bound inclusive 
    lowerBound=lower_bound, upperBound=upper_bound + 1, 
    numPartitions=num_partitions, properties=properties
)
于 2017-01-03T14:38:21.337 に答える