当我尝试使用 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