Skip to content

Commit 971eedd

Browse files
Fixed splitting error
1 parent 0db39ec commit 971eedd

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

src/main/java/io/cdap/plugin/gcp/bigquery/source/PartitionedBigQueryInputFormat.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
5959
import org.apache.hadoop.util.Progressable;
6060

61+
6162
import java.io.IOException;
6263
import java.security.GeneralSecurityException;
6364
import java.time.Instant;
@@ -66,6 +67,7 @@
6667
import java.time.LocalTime;
6768
import java.time.format.DateTimeFormatter;
6869
import java.util.ArrayList;
70+
import java.util.LinkedHashMap;
6971
import java.util.List;
7072
import java.util.Map;
7173
import java.util.Objects;
@@ -271,16 +273,30 @@ private static void runQuery(Configuration configuration,
271273
queryConfig.setQuery(query);
272274
queryConfig.setUseLegacySql(false);
273275
if (!Strings.isNullOrEmpty(parameterMapString)) {
274-
Map<String, String> parameterMap = ConfigUtil.parseKeyValueConfig(parameterMapString, ",", "=");
276+
Map<String, String> parameterMap = new LinkedHashMap<>();
277+
for (String entry : parameterMapString.split(",")) {
278+
int idx = entry.indexOf('=');
279+
if (idx < 0) {
280+
throw new IllegalArgumentException("Invalid entry: " + entry + ". Expected format alias=column=value");
281+
}
282+
String alias = entry.substring(0, idx);
283+
String colAndVal = entry.substring(idx + 1);
284+
parameterMap.put(alias, colAndVal);
285+
}
286+
275287
List<QueryParameter> queryParameters = new ArrayList<>();
276288
FieldList fieldList = bqTable.getDefinition().getSchema().getFields();
277289
for (String alias : parameterMap.keySet()) {
278290
String raw = parameterMap.get(alias); // "sys_updated_on=2018-12-11T23"
279-
String[] parts = raw.split("=", 2); // [ "sys_updated_on", "2018-12-11T23" ]
291+
String[] parts = raw.split("=", 2);
292+
if (parts.length < 2) {
293+
throw new IllegalArgumentException(
294+
String.format("Invalid parameter entry for alias '%s': '%s'. Expected format 'column=value'.",
295+
alias, raw));
296+
}
280297

281298
String columnName = parts[0];
282299
String rawValue = parts[1];
283-
284300
String parameterType = fieldList.get(columnName).getType().name();
285301
String normalizedValue = normalizeValueForBigQuery(parameterType, rawValue);
286302

@@ -341,12 +357,19 @@ private static String normalizeValueForBigQuery(String parameterType, String raw
341357
switch (parameterType) {
342358
case "DATE":
343359
LocalDate date = LocalDate.parse(rawValue,
344-
DateTimeFormatter.ofPattern("[yyyy-MM-dd][MM/dd/yyyy][dd-MM-yyyy]"));
360+
DateTimeFormatter.ofPattern("[yyyy-MM-dd][MM/dd/yyyy][dd-MM-yyyy][yyyy/MM/dd]"));
345361
return date.toString();
346362

347363
case "DATETIME":
348364
LocalDateTime datetime = LocalDateTime.parse(rawValue,
349-
DateTimeFormatter.ofPattern("[yyyy-MM-dd HH:mm:ss][yyyy-MM-dd'T'HH:mm:ss]"));
365+
DateTimeFormatter.ofPattern(
366+
"[yyyy-MM-dd HH:mm:ss][yyyy-MM-dd'T'HH:mm:ss]" +
367+
"[yyyy/MM/dd HH:mm:ss][yyyy/MM/dd]" +
368+
"[MM/dd/yyyy HH:mm:ss][MM/dd/yyyy]" +
369+
"[dd-MM-yyyy HH:mm:ss][dd-MM-yyyy]"));
370+
if (datetime.toLocalTime().equals(LocalTime.MIDNIGHT) && rawValue.length() <= 10) {
371+
datetime = datetime.withHour(0).withMinute(0).withSecond(0);
372+
}
350373
return datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
351374

352375
case "TIME":

0 commit comments

Comments
 (0)