JDBC 或复制 INTO

Posted

技术标签:

【中文标题】JDBC 或复制 INTO【英文标题】:JDBC or Copy INTO 【发布时间】:2020-07-19 05:01:18 【问题描述】:

在确定将不同来源的数据加载到雪花的方法时,我需要帮助。要提取数据,我们有 etl,talend, 工具。现在的问题是,我们应该通过雪花的JDBC驱动将数据加载到雪花中,并在etl管道中将雪花作为目标,还是我们应该先在s3中创建一个文件,在snwoflake中创建s3的阶段,然后运行copy into命令来加载数据?从 s3 开始?我们会有很多工作,

最好的方法是什么?

谢谢

【问题讨论】:

【参考方案1】:

S3 和 copy into 绝对是一个更好的调用——无论是在时间还是最终数据结构方面。在进行真正的批量操作时,Snowflake 将能够优化数据的存储方式,因此您在加载的数据上运行的查询会执行得更好。

【讨论】:

谢谢,您能否提供更多详细信息,为什么 s3 /copy into 与 jdbc 相比最好?什么是最佳实践以及其他公司如何使用它? Snowflake 内部分区是不可变的 - 因此它们被创建,从那一刻起,唯一可能发生的事情就是从中删除一条记录。因此,从 Snowflake 的角度来看,JDBC(很可能)会执行大量的单行插入,从而导致为每一行创建单独的分区,从而显着增加读取数据所需的 IO 操作。另一方面,COPY 会将数据正确地分组到分区中,允许过滤(和相关的优化)和简单的 IOPS 来获取所需的数据 我在做研究,偶然看到一个视频,它说 Talend/Informatica 的本地 JDBC 连接将加载过程作为副本转换为 cmd,这是真的吗?我知道 tDBOutputBulkExec 组件会在命令中创建副本,但它需要文件作为输入。 不知道,您必须与 informatica/talend 人员核实一下

以上是关于JDBC 或复制 INTO的主要内容,如果未能解决你的问题,请参考以下文章

mysql insert into 或 select into - 将列从 tbl1 复制到 tbl2

通过 JDBC 与 COPY_INTO + GET 批量卸载雪花数据

oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

如何复制一个表到另一个数据库中

在没有 Class.forName() 或系统属性的情况下如何加载 JDBC 驱动程序? [复制]

慎用SELECT INTO复制表