@@ -114,14 +114,31 @@ private Collection<JdbcSourceSplit> createStringColumnSplits(
114
114
for (int i = 0 ; i < table .getPartitionNumber (); i ++) {
115
115
String splitQuery ;
116
116
if (StringUtils .isNotBlank (table .getQuery ())) {
117
- splitQuery =
118
- String .format (
119
- "SELECT * FROM (%s) st_jdbc_splitter WHERE %s = ?" ,
120
- table .getQuery (),
121
- jdbcDialect .hashModForField (
122
- column .getSourceType (),
123
- splitKeyName ,
124
- table .getPartitionNumber ()));
117
+ if (table .getQuery ().contains ("/*+" ) && table .getQuery ().contains ("*/" )) {
118
+ String sqlHint =
119
+ table .getQuery ()
120
+ .substring (
121
+ table .getQuery ().indexOf ("/*+" ),
122
+ table .getQuery ().indexOf ("*/" ) + 2 );
123
+ splitQuery =
124
+ String .format (
125
+ "SELECT %s * FROM (%s) st_jdbc_splitter WHERE %s = ?" ,
126
+ sqlHint ,
127
+ table .getQuery (),
128
+ jdbcDialect .hashModForField (
129
+ column .getSourceType (),
130
+ splitKeyName ,
131
+ table .getPartitionNumber ()));
132
+ } else {
133
+ splitQuery =
134
+ String .format (
135
+ "SELECT * FROM (%s) st_jdbc_splitter WHERE %s = ?" ,
136
+ table .getQuery (),
137
+ jdbcDialect .hashModForField (
138
+ column .getSourceType (),
139
+ splitKeyName ,
140
+ table .getPartitionNumber ()));
141
+ }
125
142
} else {
126
143
splitQuery =
127
144
String .format (
@@ -186,10 +203,24 @@ private PreparedStatement createNumberColumnSplitStatement(JdbcSourceSplit split
186
203
String splitQuery ;
187
204
String splitKeyName = jdbcDialect .quoteIdentifier (split .getSplitKeyName ());
188
205
if (StringUtils .isNotBlank (split .getSplitQuery ())) {
189
- splitQuery =
190
- String .format (
191
- "SELECT * FROM (%s) st_jdbc_splitter WHERE %s >= ? AND %s <= ?" ,
192
- split .getSplitQuery (), splitKeyName , splitKeyName );
206
+ // check if the query contains sql hint
207
+ if (split .getSplitQuery ().contains ("/*+" ) && split .getSplitQuery ().contains ("*/" )) {
208
+ String sqlHint =
209
+ split .getSplitQuery ()
210
+ .substring (
211
+ split .getSplitQuery ().indexOf ("/*+" ),
212
+ split .getSplitQuery ().indexOf ("*/" ) + 2 );
213
+ splitQuery =
214
+ String .format (
215
+ "SELECT %s * FROM (%s) st_jdbc_splitter WHERE %s >= ? AND %s <= ?" ,
216
+ sqlHint , split .getSplitQuery (), splitKeyName , splitKeyName );
217
+ } else {
218
+ splitQuery =
219
+ String .format (
220
+ "SELECT * FROM (%s) st_jdbc_splitter WHERE %s >= ? AND %s <= ?" ,
221
+ split .getSplitQuery (), splitKeyName , splitKeyName );
222
+ }
223
+
193
224
} else {
194
225
splitQuery =
195
226
String .format (
0 commit comments