@@ -76,7 +76,7 @@ public class ImpalaOutputFormat extends AbstractDtRichOutputFormat<Tuple2<Boolea
7676 // cast(value as string) -> cast('value' as string) cast(value as timestamp) -> cast('value' as timestamp)
7777 private static final Pattern TYPE_PATTERN = Pattern .compile ("cast\\ ((.*) as (.*)\\ )" );
7878 //specific type which values need to be quoted
79- private static final String [] NEED_QUOTE_TYPE = {"string" , "timestamp" };
79+ private static final String [] NEED_QUOTE_TYPE = {"string" , "timestamp" , "varchar" };
8080
8181 private static final Integer DEFAULT_CONN_TIME_OUT = 60 ;
8282 private static final int RECEIVE_DATA_PRINT_FREQUENCY = 1000 ;
@@ -85,8 +85,6 @@ public class ImpalaOutputFormat extends AbstractDtRichOutputFormat<Tuple2<Boolea
8585 private static final String KUDU_TYPE = "kudu" ;
8686 private static final String UPDATE_MODE = "update" ;
8787 private static final String PARTITION_CONSTANT = "PARTITION" ;
88- private static final String STRING_TYPE = "STRING" ;
89- private static final String TIMESTAMP_TYPE = "TIMESTAMP" ;
9088 private static final String DRIVER_NAME = "com.cloudera.impala.jdbc41.Driver" ;
9189
9290 private static final String VALUES_CONDITION = "${valuesCondition}" ;
@@ -363,8 +361,8 @@ private List<String> rebuildFieldNameListAndTypeList(List<String> fieldNames, Li
363361 * @return quoted condition
364362 */
365363 private String valueConditionAddQuotation (String valueCondition ) {
366- final String [] valueConditionCopy = {valueCondition };
367364 String [] temps = valueCondition .split ("," );
365+ List <String > replacedItem = new ArrayList <>();
368366 Arrays .stream (temps ).forEach (
369367 item -> {
370368 Matcher matcher = TYPE_PATTERN .matcher (item );
@@ -374,13 +372,15 @@ private String valueConditionAddQuotation(String valueCondition) {
374372
375373 if (Arrays .asList (NEED_QUOTE_TYPE ).contains (type )) {
376374 if (!"null" .equals (value )) {
377- valueConditionCopy [ 0 ] = valueConditionCopy [ 0 ] .replace (value , "'" + value + "'" );
375+ item = item .replace (value , "'" + value + "'" );
378376 }
379377 }
380378 }
379+ replacedItem .add (item );
381380 }
382381 );
383- return "(" + valueConditionCopy [0 ] + ")" ;
382+
383+ return "(" + String .join (", " , replacedItem ) + ")" ;
384384 }
385385
386386 @ Override
@@ -745,6 +745,8 @@ public ImpalaOutputFormat build() {
745745 checkNotNull (format .password , "password is required!" );
746746 }
747747
748+ checkNotNull (format .storeType , "storeType is required!" );
749+
748750 return format ;
749751 }
750752
0 commit comments