kafkacat を使用して Kafka からのデータを Postgres テーブルに入力しようとすると、bash コマンドで構文エラーが発生します。
[k ~]$ kafkacat -b XXX.XX.Y.Z:9092 -t test -o 20501 -f '%k|%s|%T|%p|%o|213\n' -e | psql -c "copy raw_from_kafka(key, value, timestamp, partition, offset, load_cycle) from stdin delimiter '|'" -d dwh_dev -h XXX.ZZ.Y.ZZ -U konstantin
% Auto-selecting Consumer mode (use -P or -C to override)
ERROR: syntax error at or near "offset"
LINE 1: ... raw_from_kafka(key, value, timestamp, partition, offset, lo...
^
% ERROR: Write error for message of 34 bytes in test [0] at offset 20567: Broken pipe
構文は単純なので、エラーが表示される理由がわかりません。
奇妙なことに、このエラーは、入力する列のリストを指定した場合にのみ表示されます。テーブルのすべての列に同じコマンドを使用すると、すべてがうまくスムーズに進み、データがテーブルに表示されます。
[k ~]$ kafkacat -b XXX.XX.Y.Z:9092 -t test -o 20501 -f '%k|%s|%T|%p|%o|2020-08-05 22:33:44+03|213\n' -e | psql -c "copy raw_from_kafka from stdin delimiter '|'" -d dwh_dev -h XXX.ZZ.Y.ZZ -U konstantin
% Auto-selecting Consumer mode (use -P or -C to override)
% Reached end of topic test [0] at offset 23437: exiting
しかし、特定の列のみに Kafka のデータを入力し、残りの列にはデフォルト値を入力できるようにしたいと考えています。したがって、コマンドの最初のバージョンが機能する必要があります。
なぜエラーが表示されるのか、誰にも分かりますか?
Postgres バージョン: 12 kafkacat バージョン: 1.6.0 システム: CentOS 7