如何在不下载整个文件的情况下获取S3对象的CSV标头?

时间:2020-07-26 17:49:03

标签: java amazon-web-services csv object amazon-s3

我在S3中有一个非常大的CSV文件,只需要获取该文件的标头(CSV的第一行,即具有列名,而不是HTTP标头)。有没有一种方法,而无需先下载整个文件?我正在使用Java AWS开发工具包。我不认为这些信息存储在对象元数据中,但是我可能是错的。

编辑:

下面选择的答案有效,并且使用了S3 Select,但是对我有用的查询是

select s.* from S3Object s limit 1

2 个答案:

答案 0 :(得分:4)

您可以使用S3 select AWS S3 中存储的任何文件中查询数据。

aws docs中的Java示例。

要从CSV文件中选择列标题,您可以将结果limit one record。在此处查看SELECT command

例如:

QUERY = "select s.* from S3Object s limit 1";

检查different type of query examples here

答案 1 :(得分:2)

我知道您可以从文件中下载一定范围的字节。因此,您可以下载大约文件的10%(但是您必须自己弄清楚这个数字),然后将这些字节转换为chars,然后转换为字符串。

输出可能是标头+一些值,因此您必须查看如何解析内容,以便仅保留标头。

// Get a range of bytes from an object and print the bytes.
            GetObjectRequest rangeObjectRequest = new GetObjectRequest(bucketName, key)
                    .withRange(0, 9);