From a420c98d7b725cc65bf00680fc330a6422f2e1cd Mon Sep 17 00:00:00 2001 From: Yas Okada Date: Mon, 10 Jun 2024 15:53:23 +0900 Subject: [PATCH] add treat_decimal_as_int parameter to set JDBC_TREAT_DECIMAL_AS_INT property of snowflake-jdbc. --- README.md | 1 + src/main/java/org/embulk/output/SnowflakeOutputPlugin.java | 6 ++++++ .../embulk/output/snowflake/TestSnowflakeOutputPlugin.java | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 17220a7..60a4108 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Snowflake output plugin for Embulk loads records to Snowflake. - **timezone**: If input column type (embulk type) is timestamp, this plugin needs to format the timestamp value into a SQL string. In this cases, this timezone option is used to control the timezone. (string, value of default_timezone option is used by default) - **before_load**: if set, this SQL will be executed before loading all records. In truncate_insert mode, the SQL will be executed after truncating. replace mode doesn't support this option. - **after_load**: if set, this SQL will be executed after loading all records. +- **treat_decimal_as_int**: If set to true, this plugin treats NUMBER columns as BigInt columns. If false, it treats as BigDecimal. (boolean, default: true) ### Modes diff --git a/src/main/java/org/embulk/output/SnowflakeOutputPlugin.java b/src/main/java/org/embulk/output/SnowflakeOutputPlugin.java index 7f34019..83b2937 100644 --- a/src/main/java/org/embulk/output/SnowflakeOutputPlugin.java +++ b/src/main/java/org/embulk/output/SnowflakeOutputPlugin.java @@ -86,6 +86,10 @@ public interface SnowflakePluginTask extends PluginTask { @ConfigDefault("\"none\"") public MatchByColumnName getMatchByColumnName(); + @Config("treat_decimal_as_int") + @ConfigDefault("true") + public boolean getTreatDecimalAsInt(); + public void setCopyIntoTableColumnNames(String[] columnNames); public String[] getCopyIntoTableColumnNames(); @@ -183,6 +187,8 @@ protected JdbcOutputConnector getConnector(PluginTask task, boolean retryableMet props.setProperty("CLIENT_METADATA_REQUEST_USE_CONNECTION_CTX", "true"); props.setProperty("MULTI_STATEMENT_COUNT", "0"); + props.setProperty("JDBC_TREAT_DECIMAL_AS_INT", t.getTreatDecimalAsInt() ? "true" : "false"); + props.putAll(t.getOptions()); logConnectionProperties(url, props); diff --git a/src/test/java/org/embulk/output/snowflake/TestSnowflakeOutputPlugin.java b/src/test/java/org/embulk/output/snowflake/TestSnowflakeOutputPlugin.java index 6594776..b1fc99b 100644 --- a/src/test/java/org/embulk/output/snowflake/TestSnowflakeOutputPlugin.java +++ b/src/test/java/org/embulk/output/snowflake/TestSnowflakeOutputPlugin.java @@ -1,6 +1,7 @@ package org.embulk.output.snowflake; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; @@ -209,7 +210,8 @@ public void testConfigDefault() throws Exception { assertEquals("", task.getPassword()); assertEquals("public", task.getSchema()); assertEquals("", task.getRole()); - assertEquals(false, task.getDeleteStage()); + assertFalse(task.getDeleteStage()); + assertTrue(task.getTreatDecimalAsInt()); } @Test