在雪花上放置文件有什么更快?SnowSQL 或 JDBC 驱动程序



我们正在与一位客户讨论使用SnowSQL将文件放入Snowflake或使用JDBC驱动程序编写自定义代码是否更快。

有一种观点认为JDBC会比SnowSQL快,因为Java比Python快,Python是SnowSQL的编写语言。但并不是所有人都同意。

我们如何判断哪个更快?

我们可以编写一些最小的代码来比较Python和Java之间的PUT。

让我们从Java代码开始:

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import net.snowflake.client.jdbc.SnowflakeConnection;
public class App {
static String user = ""; 
static String password = ""; 
private static final String TMP_TEST_CSV = "/Users/fhoffa/Downloads/pageviews-20210601-000000.gz";
public static void main(String[] args) throws Exception {
Connection conn = DriverManager.getConnection(
"jdbc:snowflake://your-account.snowflakecomputing.com/?db=temp&role=sysadmin&schema=public", user,  password);
File file = new File(TMP_TEST_CSV);
FileInputStream fileInputStream = new FileInputStream(file);
conn.unwrap(SnowflakeConnection.class).uploadStream("my_int_stage", "testUploadStream", fileInputStream, "destFile.csv", true);
}
}

用Java放入这个文件花了47秒。我还将压缩选项更改为false,以测试是否会有很大变化,整个过程耗时46秒。

与SnowSQL同时,我做了这个:

#(no warehouse)@TEMP.PUBLIC> put 'file:///Users/fhoffa/Downloads/pageviews-20210601-000000.gz' @~/my_int_stage;
pageviews-20210601-000000.gz(38.59MB): [##########] 100.00% Done (41.330s, 0.93MB/s).
+------------------------------+------------------------------+-------------+-------------+--------------------+--------------------+----------+---------+
| source                       | target                       | source_size | target_size | source_compression | target_compression | status   | message |
|------------------------------+------------------------------+-------------+-------------+--------------------+--------------------+----------+---------|
| pageviews-20210601-000000.gz | pageviews-20210601-000000.gz |    40460014 |    40460014 | GZIP               | GZIP               | UPLOADED |         |
+------------------------------+------------------------------+-------------+-------------+--------------------+--------------------+----------+---------+
1 Row(s) produced. Time Elapsed: 43.344s

它花费了43秒,比JDBC花费的时间少了10%。因此,没有理由认为Java会比Python快得多。

您的结果可能会有所不同!当通过慢速网络发送文件时,大部分时间将用于处理网络,并且在Java中运行压缩可能会更快。

我在这个例子中使用的文件是一个压缩的CSV:

  • https://dumps.wikimedia.org/other/pageviews/2021/2021-06/pageviews-20210601-000000.gz

Snowflake中创建舞台的基本设置:

use role sysadmin;
use schema temp.public;
create stage my_int_stage;

最新更新