hs2-thrift
Version:
Hive Server 2 client using Apache Thrift RPC able to query Impala for Javascript.
78 lines (71 loc) • 2.14 kB
JavaScript
// const client = require("hs2-thrift"); // Use this if example.js is outside hs2-thrift package e.g. used 'npm install hs2-thrift'
const client = require("../index.js");
const config = {
host: "example.com.au", // Change to correspond with your config
port: 1234, // Change to correspond with your config
username: "", // Change to correspond with your config
password: "", // Change to correspond with your config
protocol_ver: 5, // Version 1 - 11. Change to suit your HS2 Protocol Version, defaults to V5
retain_session: false // true - will NOT close connection and session
// false - will close connection and session
// Default: false, connection and session will close unless specified
};
var sqlQuery = "select * from default.temp"; // Change this query to suit your db/table
function getSession(config) {
return new Promise((resolve, reject) => {
console.log(
"Attempting to connect to: " + config.host + ":" + config.port
);
client
.connect(config)
.then(session => {
resolve(session);
})
.catch(error => {
reject(error);
});
});
}
function endSession(session) {
return new Promise((resolve, reject) => {
console.log("Attempting to disconnect from server and close session.");
client
.disconnect(session)
.then(response => {
resolve(response);
})
.catch(error => {
reject(error);
});
});
}
function sendQuery(session) {
return new Promise((resolve, reject) => {
console.log("Sending query: " + sqlQuery);
client
.query(session, sqlQuery)
.then(result => {
resolve(result);
})
.catch(error => {
reject(error);
});
});
}
async function queryImpala() {
try {
const session = await getSession(config);
console.log("Session created.");
const result = await sendQuery(session);
console.log("Result: " + sqlQuery + " => \n" + JSON.stringify(result));
const response = await endSession(session);
console.log(
"Disconnected from server and closed session successfully. " +
JSON.stringify(response)
);
process.exit(0);
} catch (error) {
console.log(JSON.stringify(error));
}
}
queryImpala();