Snowflake Upgrade & Migration
Overview
Guide for upgrading Snowflake driver versions, handling Snowflake behavior change releases, and migrating between editions.
Prerequisites
- Current driver version identified
- Test suite available
- Staging Snowflake account
- Git for version control
Instructions
Step 1: Check Current Versions
npm list snowflake-sdk
npm view snowflake-sdk version
pip show snowflake-connector-python
pip index versions snowflake-connector-python 2>/dev/null | head -5
Step 2: Review Snowflake Release Notes
open https://github.com/snowflakedb/snowflake-connector-nodejs/blob/master/CHANGELOG.md
open https://docs.snowflake.com/en/release-notes/clients-drivers/python-connector-2025
open
Step 3: Upgrade on a Branch
git checkout -b chore/upgrade-snowflake-sdk
npm install snowflake-sdk@latest
npm test
git checkout -b chore/upgrade-snowflake-connector
pip install --upgrade snowflake-connector-python
pytest
Step 4: Handle Common Breaking Changes
Node.js Driver Changes (1.x to 2.x+):
import snowflake from 'snowflake-sdk';
snowflake.configure({
logLevel: process.env.NODE_ENV === 'development' ? 'DEBUG' : 'WARN',
});
const conn = snowflake.createConnection({ });
await conn.connectAsync();
await new Promise((resolve, reject) => {
conn.connect((err, c) => err ? reject(err) : resolve(c));
});
Python Connector Changes:
from snowflake.connector.pandas_tools import write_pandas
cursor = conn.cursor(snowflake.connector.DictCursor)
conn = snowflake.connector.connect(
arrow_number_to_decimal=True,
)
Snowflake Platform BCR (Behavior Change Releases):
SELECT SYSTEM$SHOW_ACTIVE_BEHAVIOR_CHANGE_BUNDLES();
ALTER ACCOUNT SET BCR_ENABLED = '2024_08';
Step 5: Validate After Upgrade
describe('Post-upgrade validation', () => {
it('should connect with existing credentials', async () => {
const conn = createConnection();
await connectAsync(conn);
expect(conn.getId()).toBeTruthy();
});
it('should execute parameterized queries', async () => {
const rows = await query(conn,
'SELECT ? AS test_value', [42]
);
expect(rows[0].TEST_VALUE).toBe(42);
});
it('should stream large results', async () => {
let count = 0;
for await (const row of streamQuery(conn,
'SELECT SEQ4() AS n FROM TABLE(GENERATOR(ROWCOUNT => 10000))'
)) {
count++;
}
expect(count).toBe(10000);
});
it('should handle errors correctly', async () => {
await expect(
(conn, )
)..();
});
});
Step 6: Rollback Procedure
npm install snowflake-sdk@1.9.0 --save-exact
pip install snowflake-connector-python==3.6.0
git checkout main -- package-lock.json package.json
npm ci
Error Handling
| Issue | Cause | Solution |
|---|
connectAsync is not a function | Old SDK version | Use callback-based connect() |
Arrow deserialization error | Arrow format mismatch | Set arrow_number_to_decimal |
BCR behavior change | New Snowflake release | Test BCR bundle in staging first |
ImportError: pandas | Missing pandas extra | Install with [pandas] extra |
SSL certificate error | Driver TLS change | Update CA bundle, don't use insecureConnect |
Resources
Next Steps
For CI integration during upgrades, see snowflake-ci-integration.