All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.dimajix.flowman.execution.OutputMode.scala Maven / Gradle / Ivy

    /*
     * Copyright (C) 2018 The Flowman Authors
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *   http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */

package com.dimajix.flowman.execution

import java.util.Locale

import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.streaming.{ OutputMode => StreamingMode }

sealed abstract class OutputMode extends Product with Serializable {
    def batchMode : SaveMode
    def streamMode : StreamingMode
}


object OutputMode {
    case object OVERWRITE extends OutputMode {
        override def batchMode: SaveMode = SaveMode.Overwrite
        override def streamMode : StreamingMode = StreamingMode.Complete()
    }
    case object OVERWRITE_DYNAMIC extends OutputMode {
        override def batchMode: SaveMode = SaveMode.Overwrite
        override def streamMode : StreamingMode = StreamingMode.Complete()
    }
    case object APPEND extends OutputMode {
        override def batchMode: SaveMode = SaveMode.Append
        override def streamMode : StreamingMode = StreamingMode.Append()
    }
    case object UPDATE extends OutputMode {
        override def batchMode: SaveMode = ???
        override def streamMode : StreamingMode = StreamingMode.Update()
    }
    case object IGNORE_IF_EXISTS extends OutputMode {
        override def batchMode: SaveMode = SaveMode.Ignore
        override def streamMode : StreamingMode = ???
    }
    case object ERROR_IF_EXISTS extends OutputMode {
        override def batchMode: SaveMode = SaveMode.ErrorIfExists
        override def streamMode : StreamingMode = ???
    }

    def ofString(mode:String) : OutputMode = {
        mode.toLowerCase(Locale.ROOT) match {
            case "overwrite" | "complete" => OutputMode.OVERWRITE
            case "overwrite_dynamic" | "dynamic_overwrite" | "dynamicoverwrite" | "overwritedynamic" => OutputMode.OVERWRITE_DYNAMIC
            case "append" => OutputMode.APPEND
            case "update"|"upsert" => OutputMode.UPDATE
            case "ignore" | "ignore_if_exists" | "ignoreifexists" => OutputMode.IGNORE_IF_EXISTS
            case "error" | "error_if_exists" | "errorifexists" | "default" => OutputMode.ERROR_IF_EXISTS
            case _ => throw new IllegalArgumentException(s"Unknown save mode: '$mode'. " +
                "Accepted save modes are 'overwrite', 'append', 'ignore', 'error', 'errorifexists'.")
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy