【发布时间】:2021-12-13 16:59:15
【问题描述】:
我正在尝试使用以下命令将 CSV 数据插入 Redis
| Column1 | Column2 |
|---|---|
| long_ago/speech: | well-done speech |
| long-ago/debate: | well-done debate |
| long ago/work: | well-done work |
awk -F ',' 'FNR > 1 && $1 && $2 {printf("SET Topic:%s %s\n",$1,$2)}' data_topics.csv | redis-cli --pipe
期望是我做的时候
GET "Topic:long_ago/speech:"
应该打印
>"well-done speech"
但是当我尝试在 CSV 中插入 1000 行时,我没有得到任何输出。因此尝试使用 CSV 中的上述 3 行并得到以下错误
[admin~]$ awk -F ',' 'FNR > 1 && $1 && $2 {printf("SET Topic:%s %s\n",$1,$2)}' data_topics.csv | redis-cli --pipe
All data transferred. Waiting for the last reply...
ERR syntax error
ERR syntax error
ERR syntax error
Last reply received from the server.
errors: 3, Replies: 3
所以我尝试在第二列中添加双引号,现在我的 CSV 如下所示
| Column1 | Column2 |
|---|---|
| long_ago/speech: | "well-done speech" |
| long-ago/debate: | "well-done debate" |
| long ago/work: | "well-done work" |
这是我现在遇到的错误 -
[admin~]$ awk -F ',' 'FNR > 1 && $1 && $2 {printf("SET Topic:%s %s\n",$1,$2)}' data_topics.csv | redis-cli --pipe
All data transferred. Waiting for the last reply...
ERR Protocol error: unbalanced quotes in request
请帮我将我的 CSV 数据插入 Redis。
【问题讨论】:
-
在插入数据库之前,您可能需要清理您的值(可能还有您的键)。由于我们不知道您的数据集是什么,因此很难说需要哪种类型的清理。它可以像简单地引用值来处理空格和双引号一样简单。而且您可能不需要修改 CSV。您的 awk 脚本可以即时完成。但是,如果您的值中也有简单的引号(例如,
bob's hat),这还不够。如果您的钥匙也需要消毒,也一样。 -
您现在应该做的是尝试了解您的数据集出了什么问题。将您的数据集分成两半并尝试插入它们。重复导致错误的一半,直到找到一个导致错误的 CSV 行。查看它并尝试理解问题(空格、引号......)相应地调整您的 awk 脚本并再次测试。
标签: database csv awk redis redis-cluster