module.exports = defineComponent({
props: {
snowflake: {
type: "app",
app: "snowflake",
}
},
async run({steps, $}) {
// Example query
const sqlText = `SELECT CURRENT_TIMESTAMP();`
const { promisify } = require('util')
const snowflake = require('snowflake-sdk')
const connection = snowflake.createConnection(this.snowflake.$auth)
const connectAsync = promisify(connection.connect)
try {
await connectAsync()
} catch (err) {
console.error('Unable to connect: ' + err.message)
}
// util.promisify requires the last argument of the function you pass to
// it be the callback function, according to Node convention — see the docs at
// https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original .
// Since Snowflake's connection.execute function accepts a single argument —
// options, an object — using promisify won't work. So we wrap the callback
// with a Promise and await it below.
//
// Pass the same options object (e.g. sqlText, binds), _except_ for the callback
// parameter. Instead, you'll want to await the result, which contains the
// stmt and rows object the callback version of the function passes, using
// a catch block to catch any errors, e.g.
//
// try {
// const { stmt, rows } = await connExecuteAsync({
// sqlText: `insert into your_table select parse_json('{"foo": "bar"}')`,
// })
// } catch (err) {
// console.error(`Failed to execute statement due to the following error: ${err.message}`)
// }
//
async function connExecuteAsync(options) {
return new Promise((resolve, reject) => {
const statement = connection.execute({
...options,
complete: function(err, stmt, rows) {
if (err) {
reject(err)
} else {
resolve({stmt, rows})
}
}
})
})
}
try {
const { stmt, rows } = await connExecuteAsync({
sqlText,
fetchAsString: ['Number', 'Date'],
})
console.log(JSON.stringify(rows, null, 2))
} catch (err) {
console.error(`Failed to execute statement due to the following error: ${err.message}`)
}
},
})
Snowflake uses API keys for authentication. When you connect your Snowflake account, Pipedream securely stores the keys so you can easily authenticate to Snowflake APIs in both code and no-code steps.
Enter the username, password, and other details for your Snowflake database below. We recommend you create a read-only account if you only need to query Snowflake.
Enter your Snowflake account identifier in the account field. You may need to include the full identifier and region as a part of this string, e.g. au12345.us-east-1
. Please consult your instance and Snowflake docs for more detail.