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 回答
0

将 offset 重命名为 k_offset 解决了这个问题。

于 2020-08-06T11:46:29.200 回答