2017-10-06 2 views
2

テーブルには2億以上のレコードがありますが、上位5百万レコードを制限する必要があります。私はjdbcCursorItemReaderを試してみましたが、それは2-3時間かけて選択し、それをcsvファイルに書き込んで、チャンク処理でシングルステップを使用しています。そのため、バージョンをバッチ処理する並列処理を選択します。
私はtaskExecutorとJdbcPagingItemReaderを持っていることによって、それぞれ5つの個別ファイルを100万個ずつ作成していますが、問題はクエリパラメータに制限とオフセット句を指定できません。これについて私を助けてください。これ以上のアプローチも高く評価されます。それは読者自身が何をするかですので、あなたがその読者の中にSQLのLIMIT句を使用することはできませんSpringバッチでJdbcPagingItemReaderのlimitとoffset句を使用する方法は?

<bean id="itemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader" scope="step"> 
 
    <property name="dataSource" ref="dataSource" /> 
 
    <property name="rowMapper"> 
 
    <bean class="MyRowMapper" /> 
 
    </property> 
 
    <property name="queryProvider"> 
 
    <bean class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean"> 
 
     <property name="dataSource" ref="dataSource" /> 
 
     <property name="sortKeys"> 
 
     <map> 
 
        <entry key="esmeaddr" value="ASCENDING"/> 
 
       </map> 
 
     </property> 
 
     <property name="selectClause" value="elect cust_send,dest,msg,stime,dtime,dn_status,mid,rp,operator,circle,cust_mid,first_attempt,second_attempt,third_attempt,fourth_attempt,fifth_attempt,term_operator,term_circle,bindata,reason,tag1,tag2,tag3,tag4,tag5" 
 
     /> 
 
     <property name="fromClause" value="FROM bill_log " /> 
 
     <property name="whereClause" value="where esmeaddr = '70897600000000' and country='India' and apptype='SMS' Limit 0,1000000" /> 
 
    </bean> 
 
    </property> 
 
    <property name="pageSize" value="1000000" /> 
 
    <property name="parameterValues"> 
 
    <map> 
 
      <entry key="param1" value="#{jobExecutionContext[param1]}" /> 
 
      <entry key="param2" value="#{jobExecutionContext[param2]}" /> 
 
     </map> 
 
    </property> 
 
</bean>

答えて

0

。代わりに、Spring Batchには、JdbcPagingItemReaderに組み込まれた機能があります。処理するアイテムの最大数を設定するには、リーダーをJdbcPagingItemReader#setMaxItemCount(5000000)に設定し、オフセットがある場合はJdbcPagingItemReader#setCurrentItemCount(offset)と設定します。つまり、オフセットは、再起動時にExecutionContextにある値で上書きされます。これに関する詳細はこちらのjavadocで読むことができます:https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/database/JdbcPagingItemReader.html

+0

ありがとうございます@MichealMinella。提供されたリンクが私を助けました。 – geekyKishan

関連する問題