Skip to content

Commit b9911cf

Browse files
committed
#765 Pass neverRepairPartitions config to EnceladusSink via ExternalChannelFactoryV2 and add default value to HiveHelper methods.
1 parent 0f5ad6a commit b9911cf

4 files changed

Lines changed: 17 additions & 14 deletions

File tree

pramen/core/src/main/scala/za/co/absa/pramen/core/utils/hive/HiveHelper.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ abstract class HiveHelper {
2929
partitionBy: Seq[String],
3030
databaseName: Option[String],
3131
tableName: String,
32-
neverRepairPartitions: Boolean): Unit
32+
neverRepairPartitions: Boolean = false): Unit
3333

3434
def createOrUpdateHiveTable(path: String,
3535
format: HiveFormat,
3636
schema: StructType,
3737
partitionBy: Seq[String],
3838
databaseName: Option[String],
3939
tableName: String,
40-
neverRepairPartitions: Boolean): Unit
40+
neverRepairPartitions: Boolean = false): Unit
4141

4242
def replaceHiveTableSchema(schema: StructType,
4343
partitionBy: Seq[String],

pramen/extras/src/main/scala/za/co/absa/pramen/extras/sink/EnceladusSink.scala

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ import org.apache.hadoop.fs.Path
2121
import org.apache.spark.sql.functions.lit
2222
import org.apache.spark.sql.{DataFrame, SparkSession}
2323
import org.slf4j.LoggerFactory
24-
import za.co.absa.pramen.api.{ExternalChannelFactory, MetastoreReader, Sink, SinkResult}
24+
import za.co.absa.pramen.api.{ExternalChannelFactoryV2, MetastoreReader, Sink, SinkResult}
25+
import za.co.absa.pramen.core.config.Keys.NEVER_REPAIR_PARTITIONS
2526
import za.co.absa.pramen.core.utils.ConfigUtils
2627
import za.co.absa.pramen.core.utils.hive.HiveQueryTemplates.TEMPLATES_DEFAULT_PREFIX
2728
import za.co.absa.pramen.core.utils.hive._
@@ -149,7 +150,8 @@ import scala.util.{Failure, Success, Try}
149150
*/
150151
class EnceladusSink(sinkConfig: Config,
151152
enceladusConfig: EnceladusConfig,
152-
hiveHelper: HiveHelper) extends Sink {
153+
hiveHelper: HiveHelper,
154+
neverRepairPartitions: Boolean) extends Sink {
153155

154156
import za.co.absa.pramen.extras.sink.EnceladusSink._
155157

@@ -449,7 +451,7 @@ class EnceladusSink(sinkConfig: Config,
449451

450452
val schema = dfForHiveSchema.schema
451453

452-
hiveHelper.createOrUpdateHiveTable(publishBase, HiveFormat.Parquet, schema, Seq("enceladus_info_date", "enceladus_info_version"), enceladusConfig.hiveDatabase, hiveTable, neverRepairPartitions = false)
454+
hiveHelper.createOrUpdateHiveTable(publishBase, HiveFormat.Parquet, schema, Seq("enceladus_info_date", "enceladus_info_version"), enceladusConfig.hiveDatabase, hiveTable, neverRepairPartitions)
453455
}
454456
}
455457

@@ -486,7 +488,7 @@ class EnceladusSink(sinkConfig: Config,
486488
}
487489
}
488490

489-
object EnceladusSink extends ExternalChannelFactory[EnceladusSink] {
491+
object EnceladusSink extends ExternalChannelFactoryV2[EnceladusSink] {
490492
val OUTPUT_PATH_KEY = "path"
491493
val INFO_VERSION_KEY = "info.version"
492494
val DATASET_NAME_KEY = "dataset.name"
@@ -500,15 +502,16 @@ object EnceladusSink extends ExternalChannelFactory[EnceladusSink] {
500502

501503
val INFO_VERSION_AUTO_VALUE = "auto"
502504

503-
override def apply(conf: Config, parentPath: String, spark: SparkSession): EnceladusSink = {
505+
override def apply(conf: Config, workflowConfig: Config, parentPath: String, spark: SparkSession): EnceladusSink = {
504506
val enceladusConfig = EnceladusConfig.fromConfig(conf)
505507
val alwaysEscapeColumnNames = ConfigUtils.getOptionBoolean(conf, HIVE_ALWAYS_ESCAPE_COLUMN_NAMES).getOrElse(true)
506508

507509
val hiveTemplates = HiveQueryTemplates.fromConfig(ConfigUtils.getOptionConfig(conf, TEMPLATES_DEFAULT_PREFIX))
508510
val queryExecutor = QueryExecutorSpark(spark)
509511

510512
val hiveHelper = new HiveHelperSql(queryExecutor, hiveTemplates, alwaysEscapeColumnNames)
513+
val neverRepairPartitions = ConfigUtils.getOptionBoolean(workflowConfig, NEVER_REPAIR_PARTITIONS).getOrElse(false)
511514

512-
new EnceladusSink(conf, enceladusConfig, hiveHelper)
515+
new EnceladusSink(conf, enceladusConfig, hiveHelper, neverRepairPartitions)
513516
}
514517
}

pramen/extras/src/test/scala/za/co/absa/pramen/extras/sink/EnceladusSinkSuite.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class EnceladusSinkSuite extends AnyWordSpec with SparkTestBase with TextCompari
6161
var sink: EnceladusSink = null
6262

6363
"constructed from a config" in {
64-
sink = EnceladusSink.apply(conf, "", spark)
64+
sink = EnceladusSink.apply(conf, conf, "", spark)
6565

6666
assert(sink.isInstanceOf[EnceladusSink])
6767
}
@@ -103,7 +103,7 @@ class EnceladusSinkSuite extends AnyWordSpec with SparkTestBase with TextCompari
103103
}
104104

105105
"autoDetectVersionNumber" should {
106-
val sink = EnceladusSink.apply(conf, "", spark)
106+
val sink = EnceladusSink.apply(conf, conf, "", spark)
107107

108108
withTempDirectory("enceladus_raw") { tempRaw =>
109109
withTempDirectory("enceladus_publish") { tempPublish =>
@@ -139,7 +139,7 @@ class EnceladusSinkSuite extends AnyWordSpec with SparkTestBase with TextCompari
139139

140140
implicit val qe: QueryExecutorSpy = new QueryExecutorSpy
141141

142-
val sink = EnceladusSink.apply(conf, "", spark)
142+
val sink = EnceladusSink.apply(conf, conf, "", spark)
143143

144144
sink.runEnceladusIfNeeded("my_table",
145145
infoDate,
@@ -167,7 +167,7 @@ class EnceladusSinkSuite extends AnyWordSpec with SparkTestBase with TextCompari
167167

168168
implicit val qe: QueryExecutorSpy = new QueryExecutorSpy(throwException = Some(new lang.IllegalStateException))
169169

170-
val sink = EnceladusSink.apply(conf, "", spark)
170+
val sink = EnceladusSink.apply(conf, conf, "", spark)
171171

172172
assertThrows[IllegalStateException] {
173173
sink.runEnceladusIfNeeded("my_table",
@@ -198,7 +198,7 @@ class EnceladusSinkSuite extends AnyWordSpec with SparkTestBase with TextCompari
198198

199199
implicit val qe: QueryExecutorSpy = new QueryExecutorSpy
200200

201-
val sink = EnceladusSink.apply(conf, "", spark)
201+
val sink = EnceladusSink.apply(conf, conf, "", spark)
202202

203203
val ex = intercept[RuntimeException] {
204204
sink.runEnceladusIfNeeded("my_table",

pramen/project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
# limitations under the License.
1414
#
1515

16-
sbt.version=1.12.11
16+
sbt.version=1.12.13

0 commit comments

Comments
 (0)