s3 中的查询标头选择 nodejs



我正在使用 s3 选择查询以及 where 子句从 s3 检索数据。 查询工作正常,当没有 where 子句时返回预期结果。虽然当我使用 where 子句时,过滤后的数据是正确的,但对象中的键是标题之后的第一行,而不是标题。

例 : csv 文件

阿 乙 C

1 2 3

1 5 6

查询 :select * from s3object s where s._1 = '1' limit 100

预期输出 :[{A : 1, B:2, C:3}, {A:1, B:5, C:6}]

实际输出 :[{1:1, 2:5, 3:6}]

这是我用来查询的参数对象:

let params = {
Bucket: S3_BUCKET,
Key: S3_PATH,
Expression: "select * from s3object s where s._1 = '1' limit 100"
ExpressionType: "SQL",
InputSerialization: {
CSV: {
FileHeaderInfo: "NONE",
RecordDelimiter: "n",
FieldDelimiter: ","
}
},
OutputSerialization: {
CSV: {}
}
};

即使使用FileHeaderInfo : "USE",我也得到相同的输出,并将查询更改为select * from s3object s where id = '22' and s.date > '2020-05-01' limit 100

AWS 文档 : https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html

因此,在从 s3 获取查询结果时,似乎也不可能获取标头。我们可以使用 headerNames 或 columnNumber 进行查询,但是如果我们使用 where 子句,那么我们应该使用 headerNames,在这种情况下,标题行不会出现在结果中。

因此,我现在已经从调用 s3 select 查询的地方对 api 调用中的标头进行了硬编码,并将其附加到结果中。

params更改为以下内容应该有效。

let params = {
Bucket: S3_BUCKET,
Key: S3_PATH,
ExpressionType: "SQL",
Expression: "select * from s3object s where s.A = '1' limit 100"
InputSerialization: {
CSV: {
FileHeaderInfo: "USE",
RecordDelimiter: "n",
FieldDelimiter: ","
}
},
OutputSerialization: {
JSON: {}
}
};

最新更新