0

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

4

2 に答える 2

2

offsetは SQL の予約語です。という名前の列がある場合は、offsetそれを二重引用符で囲む必要があります。"offset".

于 2020-08-06T11:27:54.470 に答える