如何通过awk将CSV数据以JSON格式导入Redis?
解决CSV数据导入Redis的问题
你的问题出在没有遵循Redis批量导入的协议格式,redis-cli --pipe需要的是Redis RESP协议格式的命令,而不是直接拼接SET和JSON字符串。下面是具体的修复方案:
1. 明确存储结构
先确定每条CSV记录的存储方式:用唯一标识(比如numberDocument)作为Redis键,值为该记录的JSON字符串。例如键名设为user:$2($2对应CSV第二列的numberDocument),值是该条记录的JSON对象。
2. 正确的Awk脚本(生成RESP协议格式)
这个脚本会生成符合Redis批量导入要求的RESP格式数据,避免转义问题:
BEGIN { FS = "," } NR > 1 { # 跳过CSV表头(如果没有表头,直接删掉这行的判断) # 构造单条记录的JSON字符串 json = "{\"typeDocument\":\"" $1 "\",\"numberDocument\":\"" $2 "\",\"phone\":\"" $3 "\",\"state\":\"" $4 "\"}" # 构造Redis键名 key = "user:" $2 # 输出RESP格式的SET命令 print "*3" print "$3" print "SET" print "$" length(key) print key print "$" length(json) print json }
3. 执行导入命令
把脚本保存为csv_to_redis.awk,然后运行:
awk -f csv_to_redis.awk data.csv | redis-cli --pipe
4. 验证导入结果
导入完成后,用Redis命令检查数据:
redis-cli GET "user:你的numberDocument值"
原脚本失败的原因
你之前的不可行脚本存在两个核心问题:
- 没有正确构造SET命令结构:SET需要明确的「键」和「值」两个参数,你的脚本里SET后的格式完全混乱,没有分隔参数。
- 不符合
redis-cli --pipe的输入规范:该命令要求输入是Redis RESP协议格式,而非随意拼接的字符串,否则Redis无法解析命令。
如果CSV没有表头,直接去掉NR>1的判断即可;如果需要用其他字段作为键,修改key = "user:" $2中的$2为对应列号就行。
内容的提问来源于stack exchange,提问作者CristianG
相关产品推荐
相关产品推荐

