2424import java .util .Set ;
2525import java .util .stream .Collectors ;
2626import java .util .concurrent .TimeUnit ;
27+
28+ import io .confluent .connect .elasticsearch .validator .ScriptValidator ;
2729import org .apache .kafka .common .config .AbstractConfig ;
2830import org .apache .kafka .common .config .ConfigDef ;
2931import org .apache .kafka .common .config .ConfigException ;
@@ -277,6 +279,24 @@ public class ElasticsearchSinkConnectorConfig extends AbstractConfig {
277279 );
278280 private static final String WRITE_METHOD_DISPLAY = "Write Method" ;
279281 private static final String WRITE_METHOD_DEFAULT = WriteMethod .INSERT .name ();
282+
283+ public static final String UPSERT_SCRIPT_CONFIG = "upsert.script" ;
284+
285+ private static final String UPSERT_SCRIPT_DOC = "Script used for"
286+ + " upserting data to Elasticsearch. This script allows for"
287+ + " customizable behavior upon upserting a document. Please refer to"
288+ + " Elasticsearch scripted upsert documentation" ;
289+
290+ private static final String UPSERT_SCRIPT_DISPLAY = "Upsert Script" ;
291+
292+ public static final String PAYLOAD_AS_PARAMS_CONFIG = "payload.as.params" ;
293+
294+ private static final String PAYLOAD_AS_PARAMS_DOC = "Defines Kafka payload will be injected"
295+ + " into upsert.script script component as params object" ;
296+
297+ private static final String PAYLOAD_AS_PARAMS_DISPLAY = "Payload as Params" ;
298+
299+
280300 public static final String LOG_SENSITIVE_DATA_CONFIG = "log.sensitive.data" ;
281301 private static final String LOG_SENSITIVE_DATA_DISPLAY = "Log Sensitive data" ;
282302 private static final String LOG_SENSITIVE_DATA_DOC = "If true, logs sensitive data "
@@ -408,7 +428,8 @@ public enum SecurityProtocol {
408428
409429 public enum WriteMethod {
410430 INSERT ,
411- UPSERT
431+ UPSERT ,
432+ SCRIPTED_UPSERT
412433 }
413434
414435 protected static ConfigDef baseConfigDef () {
@@ -622,8 +643,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
622643 DATA_CONVERSION_GROUP ,
623644 ++order ,
624645 Width .SHORT ,
625- IGNORE_KEY_DISPLAY
626- ) .define (
646+ IGNORE_KEY_DISPLAY )
647+ .define (
627648 IGNORE_SCHEMA_CONFIG ,
628649 Type .BOOLEAN ,
629650 IGNORE_SCHEMA_DEFAULT ,
@@ -632,8 +653,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
632653 DATA_CONVERSION_GROUP ,
633654 ++order ,
634655 Width .SHORT ,
635- IGNORE_SCHEMA_DISPLAY
636- ) .define (
656+ IGNORE_SCHEMA_DISPLAY )
657+ .define (
637658 COMPACT_MAP_ENTRIES_CONFIG ,
638659 Type .BOOLEAN ,
639660 COMPACT_MAP_ENTRIES_DEFAULT ,
@@ -642,8 +663,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
642663 DATA_CONVERSION_GROUP ,
643664 ++order ,
644665 Width .SHORT ,
645- COMPACT_MAP_ENTRIES_DISPLAY
646- ) .define (
666+ COMPACT_MAP_ENTRIES_DISPLAY )
667+ .define (
647668 IGNORE_KEY_TOPICS_CONFIG ,
648669 Type .LIST ,
649670 IGNORE_KEY_TOPICS_DEFAULT ,
@@ -652,8 +673,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
652673 DATA_CONVERSION_GROUP ,
653674 ++order ,
654675 Width .LONG ,
655- IGNORE_KEY_TOPICS_DISPLAY
656- ) .define (
676+ IGNORE_KEY_TOPICS_DISPLAY )
677+ .define (
657678 IGNORE_SCHEMA_TOPICS_CONFIG ,
658679 Type .LIST ,
659680 IGNORE_SCHEMA_TOPICS_DEFAULT ,
@@ -662,8 +683,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
662683 DATA_CONVERSION_GROUP ,
663684 ++order ,
664685 Width .LONG ,
665- IGNORE_SCHEMA_TOPICS_DISPLAY
666- ) .define (
686+ IGNORE_SCHEMA_TOPICS_DISPLAY )
687+ .define (
667688 DROP_INVALID_MESSAGE_CONFIG ,
668689 Type .BOOLEAN ,
669690 DROP_INVALID_MESSAGE_DEFAULT ,
@@ -672,8 +693,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
672693 DATA_CONVERSION_GROUP ,
673694 ++order ,
674695 Width .LONG ,
675- DROP_INVALID_MESSAGE_DISPLAY
676- ) .define (
696+ DROP_INVALID_MESSAGE_DISPLAY )
697+ .define (
677698 BEHAVIOR_ON_NULL_VALUES_CONFIG ,
678699 Type .STRING ,
679700 BEHAVIOR_ON_NULL_VALUES_DEFAULT .name (),
@@ -684,8 +705,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
684705 ++order ,
685706 Width .SHORT ,
686707 BEHAVIOR_ON_NULL_VALUES_DISPLAY ,
687- new EnumRecommender <>(BehaviorOnNullValues .class )
688- ) .define (
708+ new EnumRecommender <>(BehaviorOnNullValues .class ))
709+ .define (
689710 BEHAVIOR_ON_MALFORMED_DOCS_CONFIG ,
690711 Type .STRING ,
691712 BEHAVIOR_ON_MALFORMED_DOCS_DEFAULT .name (),
@@ -696,8 +717,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
696717 ++order ,
697718 Width .SHORT ,
698719 BEHAVIOR_ON_MALFORMED_DOCS_DISPLAY ,
699- new EnumRecommender <>(BehaviorOnMalformedDoc .class )
700- ) .define (
720+ new EnumRecommender <>(BehaviorOnMalformedDoc .class ))
721+ .define (
701722 EXTERNAL_VERSION_HEADER_CONFIG ,
702723 Type .STRING ,
703724 EXTERNAL_VERSION_HEADER_DEFAULT ,
@@ -706,8 +727,8 @@ private static void addConversionConfigs(ConfigDef configDef) {
706727 DATA_CONVERSION_GROUP ,
707728 ++order ,
708729 Width .SHORT ,
709- EXTERNAL_VERSION_HEADER_DISPLAY
710- ) .define (
730+ EXTERNAL_VERSION_HEADER_DISPLAY )
731+ .define (
711732 WRITE_METHOD_CONFIG ,
712733 Type .STRING ,
713734 WRITE_METHOD_DEFAULT ,
@@ -718,8 +739,30 @@ private static void addConversionConfigs(ConfigDef configDef) {
718739 ++order ,
719740 Width .SHORT ,
720741 WRITE_METHOD_DISPLAY ,
721- new EnumRecommender <>(WriteMethod .class )
722- );
742+ new EnumRecommender <>(WriteMethod .class ))
743+ .define (
744+ UPSERT_SCRIPT_CONFIG ,
745+ Type .STRING ,
746+ null ,
747+ new ScriptValidator (),
748+ Importance .LOW ,
749+ UPSERT_SCRIPT_DOC ,
750+ DATA_CONVERSION_GROUP ,
751+ ++order ,
752+ Width .SHORT ,
753+ UPSERT_SCRIPT_DISPLAY ,
754+ new ScriptValidator ())
755+ .define (
756+ PAYLOAD_AS_PARAMS_CONFIG ,
757+ Type .BOOLEAN ,
758+ false ,
759+ Importance .LOW ,
760+ PAYLOAD_AS_PARAMS_DOC ,
761+ DATA_CONVERSION_GROUP ,
762+ ++order ,
763+ Width .SHORT ,
764+ PAYLOAD_AS_PARAMS_DISPLAY );
765+ ;
723766 }
724767
725768 private static void addProxyConfigs (ConfigDef configDef ) {
@@ -1078,6 +1121,14 @@ public WriteMethod writeMethod() {
10781121 return WriteMethod .valueOf (getString (WRITE_METHOD_CONFIG ).toUpperCase ());
10791122 }
10801123
1124+ public String getScript () {
1125+ return getString (UPSERT_SCRIPT_CONFIG );
1126+ }
1127+
1128+ public Boolean getIsPayloadAsParams () {
1129+ return getBoolean (PAYLOAD_AS_PARAMS_CONFIG );
1130+ }
1131+
10811132 private static class DataStreamDatasetValidator implements Validator {
10821133
10831134 @ Override
0 commit comments