0

我正在尝试从 amazon S3 存储桶中读取 CSV(这可以是任何 CSV,所以我没有提前读取标题/数据类型信息。

我可以使用以下方式获取标题信息:

const params = {
    Bucket: 'mybucket',
    Key: file,
    ExpressionType: 'SQL',
    Expression: 'SELECT * FROM S3Object s LIMIT 1',
    InputSerialization: {
      CSV: {
        FileHeaderInfo: 'NONE',
        RecordDelimiter: '\n',
        FieldDelimiter: ','
      }
    },
    OutputSerialization: {
      CSV: {}
    }
  };

这给了我标题信息。

  1. 有没有办法获得最近的数据类型(或者它总是作为字符串)。有没有其他方法可以在 javascript 中获取 csv 的数据类型。(如果我知道我可以投射的列,但这是动态的)

  2. S3 Select docs 说可以进行聚合,但是在尝试相同的操作时,总是会出现“第 1 行第 12 列的列索引无效。请检查服务文档并重试”的错误。

select MAX(cast(totalamount as float)) from s3object s

错误


The column index at line 1, column 12 is invalid. Please check the service documentation and try again.

谢谢

4

1 回答 1

0
  1. S3 选择文档指出“如果未定义 CAST,则所有输入数据都被视为字符串。必要时必须将其转换为相关数据类型。” 所以 S3 select 会将所有内容都视为字符串。
  2. 为了对 csv 文件进行聚合,您需要排除标题行。尝试将 FileHeaderInfo 设置为 Use 以指定第一行是标题,您可以使用标题值来标识表达式中的列。然后查询应该给你预期的结果。 https://docs.aws.amazon.com/AmazonS3/latest/API/API_CSVInput.html
于 2021-08-20T19:25:19.353 回答