Skip to content

Instantly share code, notes, and snippets.

@graste
Forked from dhavaln/index.js
Created August 18, 2019 09:07
Show Gist options
  • Select an option

  • Save graste/daedf643dd962dc17a78f460442aa0cc to your computer and use it in GitHub Desktop.

Select an option

Save graste/daedf643dd962dc17a78f460442aa0cc to your computer and use it in GitHub Desktop.
S3 Select query from NodeJS
const
AWS = require('aws-sdk'),
{ Readable } = require('readable-stream');
const s3 = new AWS.S3({
region: 'ap-northeast-2'
});
s3SelectQuery = (query) => {
return new Promise((resolve, reject) => {
var params = {
Bucket: process.env.BUCKET_NAME,
Key: process.env.FILE_NAME,
Expression: query,
ExpressionType: 'SQL',
InputSerialization: {
CSV: {
FieldDelimiter: ',',
FileHeaderInfo: 'USE',
RecordDelimiter: '\n'
},
CompressionType: 'NONE'
},
OutputSerialization: {
CSV: {
FieldDelimiter: ',',
RecordDelimiter: '\n'
}
}
};
let resultData = "";
s3.selectObjectContent(params, function(err, data) {
if(!err){
data.Payload.on('data', (data) => {
if(data.Records && data.Records.Payload){
let str = Buffer.from(data.Records.Payload);
resultData += str;
}
});
data.Payload.on('end', (data) => {
resolve(resultData);
})
}else{
reject(err);
}
});
});
}
s3SelectQuery(
'Select s.InvoiceID, s.ProductCode, s.UsageQuantity, s.CurrencyCode, s.TotalCost from s3Object s limit 5'
).then( data => {
console.log(data);
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment