spark sql 2.2.0を使用してjdbcソースからフェッチされたレコードの数を制限する方法はありますか?spark、scala&jdbc - レコード数を制限する方法
私は別のMS SQL Serverのテーブルから>移動のタスク(および変換)レコードの数が多い200Mを取り扱っております:
val spark = SparkSession
.builder()
.appName("co.smith.copydata")
.getOrCreate()
val sourceData = spark
.read
.format("jdbc")
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
.option("url", jdbcSqlConnStr)
.option("dbtable", sourceTableName)
.load()
.take(limit)
それは動作しますが、それは明らかに最初にすべてのロードされましたデータベースから200Mのレコードを取得してから18分後にテストと開発のために必要なレコードの数を返します。
take(...)とload()を切り替えるとコンパイルエラーが発生します。
サンプルデータを小さなテーブルにコピーする方法、SSISまたは代替のetlツールを使用する方法があります。
spark、sql、jdbcを使用して目標を達成する方法があるかどうかは、本当に不思議です。
私はテーブル名の代わりにSQL文を使って2つのアプローチを試してみました。そして、私はval sqlDF = spark.sql( "...")アプローチを使用してトップ100のレコードを選択しようとしましたが、 'invalide spark sql syntax'などのエラーがあります。エイリアスを使用したクエリ括弧の場合は – vkhazin
を使用する必要があります。 https://stackoverflow.com/questions/43174838/how-to-use-a-subquery-for-dbtable-option-in-jdbc-data-ソース – pasha701
優秀!次の作品! \t //ソースデータ \t val jdbcSourceConnection = "" jdbc:sqlserver:// $ sourceDbHost; databaseName = $ sourceDbName; user = $ sourceDbUsername; password = $ sourceDbPassword; " \tヴァルsourceData =スパーク \t \t .read \t \t .format( "JDBC") \t \t .OPTION( "ドライバ"、 "com.microsoft.sqlserver.jdbc.SQLServerDriver") \t \t .OPTION(」 URL」、jdbcSourceConnection) // \t \t .OPTION( "DBTABLE"、sourceTableName) \t \t .OPTION( "DBTABLE"、 "(Customer.Preferenceからトップ100 *を選択する)TABLE1のように") \t \t .LOAD これは動作しますが3210 \t .sort(「得意先」) – vkhazin