You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于通过AWS CLI调用Kinesis put-record上传CSV文件的技术问询

解决AWS Kinesis Put-Record上传S3中CSV文件的问题

我明白你遇到的问题了——直接把S3路径传给--data参数时,Kinesis会把路径本身当成字符串上传,而不是去读取S3里的CSV文件内容。这是因为AWS CLI的kinesis put-record命令本身不会自动解析S3路径并拉取文件,--data只接受字符串、本地文件内容或者标准输入流。

下面给你几个可行的解决方案:

方案1:先下载S3文件到本地再上传

这是最直观的方法,先把S3上的CSV文件下载到本地临时文件,再读取文件内容传给Kinesis命令:

# 1. 从S3下载CSV到本地临时文件
aws s3 cp s3://cona-sample-salesforce-data/testdata/your-target-file.csv ./temp-kinesis.csv

# 2. 读取本地文件内容并上传到Kinesis
aws kinesis put-record \
  --cli-binary-format raw-in-base64-out \
  --stream-name NagaTZeusStream \
  --partition-key 1 \
  --data "$(cat ./temp-kinesis.csv)" \
  --region us-west-2

注意替换your-target-file.csv为你实际的文件名,另外记得把region改成正确的(比如你示例里的us-west-2,之前的命令里写的us-west是无效的region)。

方案2:直接通过管道传递(无需本地文件)

如果不想在本地保存文件,可以利用AWS CLI的标准输入输出管道,直接把S3文件的内容传给Kinesis命令:

aws s3 cp s3://cona-sample-salesforce-data/testdata/your-target-file.csv - | \
aws kinesis put-record \
  --cli-binary-format raw-in-base64-out \
  --stream-name NagaTZeusStream \
  --partition-key 1 \
  --data - \
  --region us-west-2

这里的-是关键:

  • 第一个-表示aws s3 cp把文件内容输出到标准输出(stdout)
  • 第二个-表示aws kinesis put-record从标准输入(stdin)读取--data的内容

额外提示:如果CSV是多记录文件

如果你的CSV文件里每行是一条独立的业务记录,用put-record逐条上传效率很低,推荐用put-records批量上传。比如结合awk和jq把每行转换成Kinesis要求的格式:

aws s3 cp s3://cona-sample-salesforce-data/testdata/your-multi-record.csv - | \
awk '{printf "{\"Data\":\"%s\",\"PartitionKey\":\"1\"}\n", $0}' | \
jq -s '.' | \
aws kinesis put-records \
  --cli-binary-format raw-in-base64-out \
  --stream-name NagaTZeusStream \
  --records - \
  --region us-west-2

这个命令会把CSV的每一行转换成一条Kinesis记录,然后批量上传,比逐条调用put-record高效得多。

内容的提问来源于stack exchange,提问作者nagasatish chilakamarti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:29:01