Gerenciamento de conexões¶
Para executar instruções para o Snowflake, primeiro é preciso estabelecer uma conexão. O driver Node.js do Snowflake permite estabelecer conexões da seguinte forma:
Criação de uma única conexão¶
Para criar uma única conexão com o Snowflake:
Chame
snowflake.createConnection
para criar um novo objetoConnection
, e passe um objeto JavaScript que especifica as opções de conexão.Usando o objeto
Connection
, chame o métodoconnect
para estabelecer uma conexão.Nota
Se você definir a opção
authenticator
paraEXTERNALBROWSER
(para usar SSO baseado em navegador) ouhttps://<nome_conta_okta>.okta.com
(para usar SSO nativo através do Okta), chame o métodoconnectAsync
, em vez do métodoconnect
.Para lidar com erros de conexão, passe uma função de retorno de chamada que tenha a seguinte assinatura
function(err, conn)
onde:
err
é um objeto JavaScriptError
.conn
é o objeto atualConnection
.
Se ocorrer um erro durante a conexão, o método
connect
passa um objetoError
para sua função de retorno de chamada. Você pode usar este objeto em sua função de retorno de chamada para obter detalhes sobre o erro. Se você precisar de informações sobre o objetoConnection
atual, você pode usar o argumentoconn
passado para sua função de retorno de chamada.
O exemplo a seguir estabelece uma conexão e utiliza uma senha para autenticação. Para utilizar outros métodos de autenticação, consulte Opções de autenticação.
// Load the Snowflake Node.js driver. var snowflake = require('snowflake-sdk');// Create a Connection object that we can use later to connect. var connection = snowflake.createConnection({ account: account, username: user, password: password, application: application });// Try to connect to Snowflake, and check whether the connection was successful. connection.connect( function(err, conn) { if (err) { console.error('Unable to connect: ' + err.message); } else { console.log('Successfully connected to Snowflake.'); // Optional: store the connection ID. connection_ID = conn.getId(); } } );
Ao criar uma conexão, você pode definir as opções de conexão como descrito em Referência de opções.
Como verificar se uma conexão está pronta para receber consultas¶
Antes de enviar consultas do Snowflake, você pode usar o método connection.isValidAsync()
(na versão 1.6.23 e posterior) para garantir que a conexão esteja ativa e pronta para executar solicitações no Snowflake. O método retorna true
se a conexão estiver pronta ou false
, caso contrário.
// Create a Connection object and connect to Snowflake
// ..
// Verify if connection is still valid for sending queries over it
const isConnectionValid = await connection.isValidAsync();
// Do further actions based on the value (true or false) of isConnectionValid
Criação de um pool de conexões¶
Em vez de criar uma conexão cada vez que seu aplicativo cliente precisar acessar o Snowflake, você pode definir um cache de conexões Snowflake para reutilização conforme necessário. O pool de conexões geralmente reduz o tempo de espera para fazer uma conexão. Entretanto, pode retardar o failover do cliente para um DNS alternativo quando ocorre um problema de DNS.
Para criar um pool de conexões:
Chame
snowflake.createPool(connectionOptions, poolOptions)
para criar um novo objetoConnectionPool
e passe dois objetos JavaScript que especificam as opções de conexão e as opções de pool.Nota
O driver Node.js do Snowflake utiliza a biblioteca de código aberto node-pool para implementar pools de conexão. Para obter mais informações sobre
poolOptions
com suporte, consulte a descrição do argumento opts na documentação da biblioteca node-pool.Com o objeto
ConnectionPool
, chame a funçãouse
para executar instruções para uma única conexão no pool de conexões.Para lidar com erros de conexão, passe uma função de retorno de chamada que tenha a seguinte assinatura
function(err, stmt, rows)
onde:
err
é um objeto JavaScriptError
.stmt
é um objeto com informações sobre a instrução SQL que foi executada, incluindo o texto literal da instrução.rows
é uma matriz contendo o “conjunto de resultados” da instrução.
Se ocorrer um erro durante a execução da instrução, o método
connect
passa um objetoError
para sua função de retorno de chamada. Você pode usar este objeto em sua função de retorno de chamada para obter detalhes sobre o erro.
O exemplo seguinte cria um pool de conexões que suporta um máximo de dez conexões ativas. Ele usa uma senha para autenticação. Para utilizar outros métodos de autenticação, consulte Opções de autenticação.
// Create the connection pool instance const connectionPool = snowflake.createPool( // connection options { account: account, username: user, password: password }, // pool options { max: 10, // specifies the maximum number of connections in the pool min: 0 // specifies the minimum number of connections in the pool } );
O exemplo seguinte usa o método connectionPool.use
para executar uma instrução SQL usando as conexões no pool. O método clientConnection.execute
especifica a instrução SQL a executar e define uma função de chamada de retorno.
// Use the connection pool and execute a statement connectionPool.use(async (clientConnection) => { const statement = await clientConnection.execute({ sqlText: 'select 1;', complete: function (err, stmt, rows) { var stream = stmt.streamRows(); stream.on('data', function (row) { console.log(row); }); stream.on('end', function (row) { console.log('All rows consumed'); }); } }); });
Ao criar um pool de conexões, você pode definir as opções de conexão como descrito em Referência de opções.
Conexão por um proxy autenticado¶
Você pode se conectar ao Snowflake através de um proxy autenticado, fornecendo credenciais de autenticação como opções de conexão ao criar um objeto Connection
.
Nota
A conexão através de um servidor proxy autenticado tem suporte a partir da versão 1.6.4 do driver Node.js do Snowflake.
O exemplo seguinte mostra como se conectar a um proxy autenticado usando HTTP:
var connection = snowflake.createConnection({
account: "account",
username: "user",
password: "password",
proxyHost: "localhost",
proxyPort: 3128,
proxyUser: "myname",
proxyPassword: "mypass"
});
Para conectar-se a um proxy autenticado usando HTTPS você também deve fornecer a propriedade de conexão proxyProtocol
, como mostrado abaixo:
var connection = snowflake.createConnection({
account: "account",
username: "user",
password: "password",
proxyHost: "localhost",
proxyPort: 3128,
proxyUser: "myname",
proxyPassword: "mypass",
proxyProtocol: "https"
});
Verificação da conexão da rede ao Snowflake com SnowCD¶
Após configurar seu driver, você pode avaliar e solucionar problemas de conectividade de rede com o Snowflake usando o SnowCD.
Você pode usar o SnowCD durante o processo de configuração inicial e sob demanda a qualquer momento para avaliar e solucionar problemas de sua conexão de rede ao Snowflake.
OCSP (online certificate status protocol)¶
Quando o driver se conecta, o Snowflake envia um certificado para confirmar que a conexão é com o Snowflake e não com um host que está se fazendo passar pelo Snowflake. O driver envia esse certificado para um servidor OCSP (Online Certificate Status Protocol) para verificar se o certificado não foi revogado.
Se o driver não puder chegar ao servidor OCSP para verificar o certificado, ele pode usar “fail-open” ou “fail-close”.
Encerramento de uma conexão¶
Uma conexão pode ser encerrada chamando o método connection.destroy()
. Isto encerra imediatamente a sessão associada à conexão sem esperar que as instruções em execução sejam concluídas:
connection.destroy(function(err, conn) { if (err) { console.error('Unable to disconnect: ' + err.message); } else { console.log('Disconnected connection with id: ' + connection.getId()); } });