如何使用 Java 将 CSV 文件复制到 Snowflake DB 中

2023-12-24

我正在尝试编写一个工具来将 CSV 文件加载到多个数据库中。 在尝试在线搜索如何在 Snowflake 中使用 COPY 命令时,我找不到如何在 Java 中执行此操作的信息。这就是我使用 PostgreSQL 的方式

public void loadData(Message message) throws Exception {
    try (Connection connection = DriverManager.getConnection(message.getJdbcUrl(),
            message.getUser(), message.password)) {
        loadDataWithMode(loadRequest, (BaseConnection) connection);
    } catch (Throwable error){
        throw error;   
    }
}


public void loadDataWithMode(Message message, BaseConnection connection) throws Exception {
    CopyManager copyManager = new CopyManager(connection);
    String fields = message.getFields();
    final String targetTableWithFields = message.getTableName() + "(" + fields + ")";
        try (InputStream input = fileService.load(loadRequest.getFilePath())) {
            try (InputStreamReader reader = new InputStreamReader(input, "UTF-8")) {
                copyManager.copyIn("COPY " + targetTableWithFields + " from STDIN 
            }
        }
 }

我不熟悉雪花如何做到这一点,任何帮助将不胜感激。


public void loadDataWithMode(Message message, Connection connection) throws Exception {
        String fields = message.getFields();
        final String targetTableWithFields = message.getTableName() + "(" + fields + ")";
            LOG.info("about to copy data into table: " + targetTableWithFields);
            try (Statement statement = connection.createStatement()) {

            final SnowflakeConnectionV1 snowflakeConnectionV1 = (SnowflakeConnectionV1) connection;
            final File tempFile = fileSystemService.asLocalFile(message.getFilePath());
            try (Statement stmt = snowflakeConnectionV1.createStatement(); InputStream inputStream = new FileInputStream(tempFile)) {
                final String createStage = buildCreateStageStatement();
                LOG.info("Executing sql:{}", createStage);
                stmt.execute(createStage);
                LOG.info("Create stage was successfully executed");
                snowflakeConnectionV1.uploadStream("COPYIN_STAGE", "", inputStream, tempFile.getName(), false);
                LOG.info("Upload stream was successfully executed");
                stmt.execute("USE WAREHOUSE "+ message.getExportConnectionDetails().getWarehouse());
                LOG.info("Warehouse was successfully set to: "+message.getExportConnectionDetails().getWarehouse());
                final boolean purgeData = !(message.getLoadMode() == LoadMode.INCREMENTAL);
                String sql = String.format("copy into %s(%s) from @COPYIN_STAGE/%s file_format = ( type='CSV', skip_header=1) purge=" + purgeData + "   ", message.getTableName(), fields, tempFile.getName());
                LOG.info("Executing sql:{}", sql);
                stmt.execute(sql);
            }
        connection.commit();
        LOG.info("data was successfully copied " + targetTableWithFields);
    }
}

private String buildCreateStageStatement() {
    return "CREATE OR REPLACE TEMPORARY STAGE COPYIN_STAGE " + "file_format = ( type ='CSV')";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Java 将 CSV 文件复制到 Snowflake DB 中 的相关文章

随机推荐

  • Postgresql 不提示输入密码

    我在 Linux 机器上设置了一个 postgresql 8 3 db 以及一个用户 postgres pg hba conf 读取 local all postgres ident sameuser local all all md5 所
  • 无法将名称 [org.hibernate.spatial.dialect.postgis.PostgisDialect] 解析为策略 [org.hibernate.dialect.Dialect]

    spring jpa properties hibernate dialect org hibernate spatial dialect postgis PostgisDialect 我有一个 Spring Boot v1 5 应用程序和
  • Karate-Gattle:将 uriPatterns 列表添加到 karateProtocol() 中

    我有一个 uriPatterns 的 Collection String 包含在karateProtocol 有没有办法迭代集合并添加MethodPause 本例中为 Nil 无需硬编码吗 如果您看到内部代码PreDef scala htt
  • $0 和 $SHELL 之间的区别

    我想知道 0 和 SHELL 之间的确切区别 我知道这两个是用来了解shell信息的 如果有人用例子来解释那就太好了 如果两者显示不同的值 如下所示 这表明什么 echo 0 ksh echo SHELL sbin sh SHELL只是一个
  • 创建具有 24 或以上突发点的“新”尖峰标签

    我正在尝试制作如下图所示的点爆发 目前 我已经使用伪元素尝试过此操作 但是 我只能生成 12 点突发 并且不能反映图像中显示的内容 有没有办法只用几个元素来创建点爆发 下面是我用来尝试此解决方案的代码 div width 100px hei
  • WPF 中 HTML 类 id 的等效项是什么?

    我有一些 StackPanel 我希望具有相同的宽度 然而 这不应该影响所有 StackPanel 我不想为此进行子类化 我知道以下情况是可能的
  • Python Regex 在某些情况下需要很长时间

    我编译了以下模式 pattern re compile r P
  • Zend Lucene 需要 Java Lucene 吗?

    在实现Zend Lucene时 我们的服务器上是否需要安装Java 虽然我没用过 但看来不需要Java来使用Zend Search Lucene 组件 http framework zend com manual en zend searc
  • 在 JavaScript 中正确使用“for...in”循环?

    在我提出问题之前 我想让每个人都知道 我很感激总有人愿意提供帮助 而就我而言 我将尽力回馈社区 谢谢 现在 我想获得一些关于如何正确利用 JavaScript 中的 for in 循环的指导 我已经做了一些研究并尝试了一些事情 但我仍然不清
  • Rails 命令错误

    我即将开始开发另一个 Web 应用程序 我将目录更改为 rails projects 并输入 导轨新空白 然后我得到这个错误 Error Command not recognized Usage rails COMMAND ARGS The
  • 将公历日期转换为回历日期

    我想从公历日期转换为回历 伊斯兰 日期 我需要一个 java 类来进行此转换 我想给它一个 yyyy mm dd 格式的公历日期作为字符串 它给我相同格式的回历日期 谁能帮我 首先 将转换部分与格式化 解析部分分开 您稍后可以轻松处理这些问
  • 在Restangle中为单个请求设置标头和http参数

    我正在尝试使用 Restangle 进行文件上传发布请求 我想在 Restangle 中实现与下面相同的功能 但是 我不确定如何为这个特定请求设置内容类型和transformRequest 如果我理解正确的话 setDefaultHeade
  • 在numpy中绘制随机元素

    比方说 我有一系列元素概率 0 1 0 2 0 5 0 2 该数组的总和为 1 0 使用普通的 Python 或 numpy 我想绘制与其概率成比例的元素 第一个元素大约为 10 第二个为 20 第三个为 50 等 draw 应该返回所绘制
  • 使用 Chartjs 显示混合类型的图例(条形图和线条)

    我使用以下方法制作了堆叠组条形图Chartjs与线数据集混合 我想区分第一项的图例Productivit 通过将其渲染为一条线 而不是显示为矩形 我经历了图例文档 http www chartjs org docs latest confi
  • 如何使用 PHP 计算 HTML 代码的行数?

    我有一些由所见即所得编辑器 WordPress 生成的 HTML 我想通过仅显示最多 3 行文本 HTML 格式 来显示此 HTML 的预览 HTML 示例 始终以新行格式化 p Hello this is some generated H
  • URL 重写过滤器不适用于包含特殊字符的查询参数

    我正在使用 URL 重写过滤器将一些丑陋的 URL 转发到漂亮的 URL 参考基于 URL 参数的条件 http devtidbits com 2011 11 28 tuckey urlrewrite how to 我使用 UrlRewri
  • 通过从非 React 组件分派操作来更新 React 组件

    当用户将商品添加到购物车时 我试图更新项目上的购物车按钮 我在 React js 中构建了网站的部分内容 例如购物车 购物车按钮等 配置Store js export default function configureStore init
  • 如何为多个动态文本框启用 Google 音译 (ASP.Net)

    下面是将 Google 音译代码集成到 ASP Net 页面中的示例代码 随处可用 但我的问题是 如何在运行时生成的文本框中启用音译 该脚本需要文本框的 ID 来应用音译 但我的文本框将在运行时生成 这行代码需要替代方案 control m
  • C# 中的联合:结构成员似乎没有对齐

    我定义了以下结构来模拟 C 联合 最终将用于 C 互操作 StructLayout LayoutKind Sequential internal struct STRUCT1 public Guid guid public String s
  • 如何使用 Java 将 CSV 文件复制到 Snowflake DB 中

    我正在尝试编写一个工具来将 CSV 文件加载到多个数据库中 在尝试在线搜索如何在 Snowflake 中使用 COPY 命令时 我找不到如何在 Java 中执行此操作的信息 这就是我使用 PostgreSQL 的方式 public void