代码之家  ›  专栏  ›  技术社区  ›  Javier

使用kafka主题中的json值,并使用JQ将其写入csv文件并格式化

  •  1
  • Javier  · 技术社区  · 6 年前

    我正在尝试将卡夫卡主题中的键和值写入csv文件。我已经能够选择所需的键和值,但我无法将它们按行分隔(每行三个值,行中的值用逗号分隔)。

    这是我在kafka主题中使用的两条json记录的示例,没有进行任何过滤。我使用的命令是:

    ./kafka-run-class.sh kafka.tools.ConsoleConsumer --bootstrap-server kafka1.example.net:9092 --topic prod.example.v1 --max-messages 2 | jq -r '. '

    { "count": "0", "source": 3, "lastModified": "2018-03-09T21:03:54.039Z", "isBusiness": false, "countryCode": " MX", "phone": "52/4446789864" } { "count": "0", "source": 3, "lastModified": "2018-03-09T21:03:54.039Z", "isBusiness": false, "countryCode": " GB", "phone": "44/0187567846" }

    我尝试使用此命令,但每个值都被放入自己的行中:

    ./kafka-run-class.sh kafka.tools.ConsoleConsumer --bootstrap-server kafka1.example.net:9092 --topic prod.example.v1 --max-messages 3 | jq -r ' .isBusiness, .countryCode, .phone ' > file.csv

    理想输出为:

    false, MX, 52/4446789864
    false, GB, 44/0187567846
    true, BE, 32/8745687645
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   peak    6 年前
    jq -r '[.isBusiness, .countryCode, .phone] | @csv'
    

    生成CSV:

    false," MX","52/4446789864"
    false," GB","44/0187567846"
    

    过滤器:

    "\(.isBusiness), \(.countryCode), \(.phone)"
    

    生产

    false,  MX, 52/4446789864
    false,  GB, 44/0187567846
    

    您可能希望“修剪”字符串值,例如使用:

    def trim: sub("^ +";"") | sub(" +$";"");