This article aims to compare the performance of two different connectors used to send data to Snowflake: Snowflake’s native connector and a custom connector developed by Onibex. The tests were conducted on both Confluent Cloud and Confluent Platform.
A total of 48 tests were performed, considering two message sizes (500 KB and 1000 KB) across different task configurations (1, 2, and 4 tasks) and evaluating two scenarios:
The target table does not exist in Snowflake.
The target table already exists in Snowflake.
The tests were conducted in two different environments:
Confluent Cloud
Confluent Platform
For each environment, two message sizes were tested: 500 KB and 1000 KB. Each test was executed with different task configurations (1, 2, and 4 tasks). Within each configuration, batches of 200 and 400 messages were sent.
The connector converts messages into JSON format before inserting them into Snowflake, which can introduce additional overhead.
When using Confluent Cloud, it is necessary for the Confluent region and the Snowflake region to match in order to achieve better performance.
In tasks with 1 worker, performance is significantly affected, with differences of up to 40% compared to the Onibex connector.
Onibex Connector Performance:
The Onibex connector was specifically designed to optimize data insertion into Snowflake, achieving better data transfer efficiency by avoiding unnecessary conversions and managing connections more effectively.
Unlike the Snowflake connector, this connector uses a more direct communication protocol that reduces latency when sending data to Snowflake.
Tests show that the Onibex connector handles the workload sent to Snowflake more efficiently, especially when increasing the number of workers.
In tasks with 1 worker, the average improvement is 25% compared to the Snowflake connector.
In tasks with 2 workers, the average improvement is 30%.
In tasks with 4 workers, the average improvement is 35%.
This superior performance remains consistent across multiple tests, demonstrating its robustness and efficiency.
Task with 2 workers: Onibex connector improvement of 18% compared to the Snowflake connector.
Task with 4 workers: Onibex connector improvement of up to 30% when writing to existing tables.
Message size: 1000 KB
Task with 1 worker: Onibex connector improvement of 10%.
Task with 2 workers: Onibex connector improvement of 20%.
Task with 4 workers: Average improvement of 25% when writing to existing tables.
Task with 2 workers: Onibex connector improvement of 15%.
Task with 4 workers: Average improvement of 20% when writing to existing tables.
Message size: 1000 KB
Task with 1 worker: Onibex connector improvement of 7%.
Task with 2 workers: Onibex connector improvement of 12%.
Task with 4 workers: Average improvement of 18% when writing to existing tables.
The detailed analysis shows that the custom Onibex connector delivers better performance in most cases, especially when the target table already exists. Moreover, its efficiency remains consistent as message size and the number of configured tasks increase. It is recommended to use the Onibex connector in scenarios requiring fast processing of large volumes of data into Snowflake, particularly when multiple workers are utilized.
Test | Success Criteria | Evaluation Criteria | # Total of messages | Total weight of Insertion | # Max Task | Price | Start time | End time | Onibex Sink Connector Execution Time | Onibex Sink Connector Overall Time |
Price | Start time | End time | Snowflake Sink Connector Execution Time |
Snowflake Sink Connector Overall Time |
Test 1 | Full test flow (Table creation and Data Insertion) < 1 minute. | Total processing time (ms). | 200 | 500KB | 1 | "" | 03:26:48 | 03:26:52 | 4 SECONDS | "" | 01:11:16 | 01:16:09 | 5 MINUTES | ||
Use, Show, or Select Snow Tables < 1 minute. | Total execution time (ms). | "" | "" | "" | "" | "" | "" | 3917 ms | "" | "" | "" | 2616 ms | |||
Table creation in < 1 minute. | Total table creation time (ms). | "" | "" | "" | "" | "" | "" | 243 ms | "" | "" | "" | 558 ms | |||
All messages are inserted without errors in < 1 minute. [Test #1 "Before Table Creation"] | Total insertion time (ms). | "" | "" | "" | "" | "" | "" | 832 ms | "" | "" | "" | 229 ms | |||
Test 2 | Full test flow (Table creation and Data Insertion) < 1 minute. [Test #2 "Table Already Exists"] | Total processing time (ms). | 200 | 500 KB | 1 | "" | 03:41:40 | 03:41:43 | 3 SECONDS | "" | 1:25:20 | 1:30:59 | 5 MINUTES | ||
All messages are inserted without errors in < 1 minute. [Test #2 "Table Already Exists"] | Total insertion time (ms). | "" | "" | "" | "" | "" | "" | 3269 ms | "" | "" | "" | 392 ms | |||
Test 1 | Full test flow (Table creation and Data Insertion) < 1 minute. | Total processing time (ms). | 200 | 500KB | 2 | "" | 03:48:27 | 03:48:33 | 6 SECONDS | "" | 01:34:24 | 01:38:52 | 4 MINUTES | ||
Use, Show, or Select Snow Tables < 1 minute. | Total execution time (ms). | "" | "" | "" | "" | "" | "" | 5452 ms | "" | "" | "" | 2936 ms | |||
Table creation in < 1 minute. | Total table creation time (ms). | "" | "" | "" | "" | "" | "" | 184 ms | "" | "" | "" | 647 ms | |||
All messages are inserted without errors in < 1 minute. [Test #1 "Before Table Creation"] | Total insertion time (ms). | "" | "" | "" | "" | "" | "" | 672 ms | "" | "" | "" | 291 ms | |||
Test 2 | Full test flow (Table creation and Data Insertion) < 1 minute. [Test #2 "Table Already Exists"] | Total processing time (ms). | 200 | 500 KB | 2 | "" | 03:52:13 | 03:52:18 | 5 SECOND | "" | 01:54:08 | 01:57:11 | 3 MINUTES | ||
All messages are inserted without errors in < 1 minute. [Test #2 "Table Already Exists"] | Total insertion time (ms). | "" | "" | "" | "" | "" | "" | 4561 ms | "" | "" | "" | 252 ms | |||
Test 1 | Full test flow (Table creation and Data Insertion) < 1 minute. | Total processing time (ms). | 200 | 500KB | 4 | "" | 03:56:26 | 03:56:30 | 4 SECONDS | "" | 02:11:02 | 02:15:24 | 4 MINUTES | ||
Use, Show, or Select Snow Tables < 1 minute. | Total execution time (ms). | "" | "" | "" | "" | "" | "" | 3214 ms | "" | "" | "" | 3143 ms | |||
Table creation in < 1 minute. | Total table creation time (ms). | "" | "" | "" | "" | "" | "" | 373 ms | "" | "" | "" | 467 ms | |||
All messages are inserted without errors in < 1 minute. [Test #1 "Before Table Creation"] | Total insertion time (ms). | "" | "" | "" | "" | "" | "" | 501 ms | "" | "" | "" | 220 ms | |||
Test 2 | Full test flow (Table creation and Data Insertion) < 1 minute. [Test #2 "Table Already Exists"] | Total processing time (ms). | 200 | 500 KB | 4 | "" | 04:00:23 | 04:00:28 | 5 SECONDS | "" | 02:21:00 | 02:25:35 | 4 MINUTES | ||
All messages are inserted without errors in < 1 minute. [Test #2 "Table Already Exists"] | Total insertion time (ms). | "" | "" | "" | "" | "" | "" | 5035 ms | "" | "" | "" | 237ms |