如何定义以@开头的字段类型?
How do I define the type of a field starting with a @?
我正在尝试从一些 json 格式的 kakfa 消息创建流,例如:
"beat": {
"name": "xxxxxxx",
"hostname": "xxxxxxxxxx",
"version": "zzzzz"
},
"log_instance": "forwarder-2",
"type": "prod",
"message": "{ ... json string.... }",
"@timestamp": "2020-06-14T23:31:33.925Z",
"input_type": "log",
"@version": "1"
}
我试过使用
CREATE STREAM S (
beat STRUCT<
name VARCHAR,
hostname VARCHAR,
version VARCHAR
>,
log_instance VARCHAR,
type VARCHAR,
message VARCHAR, # for brevity - I also have this with a struct
@timestamp VARCHAR,
input_type VARCHAR,
@version` VARCHAR )
WITH (KAFKA_TOPIC='some_topic', VALUE_FORMAT='JSON');
但是我得到一个错误:
Caused by: line 10:5: extraneous input '@' expecting ....
我绑定了引号和前面的下划线,但没有成功。我也尝试在注册表中创建一个条目,但我无法通过这种方式创建合法的 avro。
PS。如何将主题“绑定”到注册表架构?
谢谢。
如果您使用的是足够新的 ksqlDB 版本,那么只需引用带有无效字符的列名就可以了:
CREATE STREAM S (
beat STRUCT<
name VARCHAR,
hostname VARCHAR,
version VARCHAR
>,
log_instance VARCHAR,
type VARCHAR,
message VARCHAR, # for brevity - I also have this with a struct
`@timestamp` VARCHAR,
input_type VARCHAR,
`@version` VARCHAR )
WITH (KAFKA_TOPIC='some_topic', VALUE_FORMAT='JSON');
如果上述方法不起作用,那么您可能使用的是旧版本的 ksqlDB。升级应该可以解决这个问题。
PS. How do I "bind" a topic to a registry schema?
如果您使用 JSON_SR
格式,而不只是 JSON
,ksqlDB 将自动将 JSON 模式发布到模式注册表。后者仅支持从模式注册表中读取模式。
如果您更多的是询问如何在 SR 中为现有主题注册模式...那么您最好查看 SR 文档。注意,ksqlDB 只支持 TopicNameStrategy
naming strategy。值模式具有主题 {topic-name}-value
,例如以下为 test
主题的值注册了一个 JSON 模式。
curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" --data '{"schema": "{\"type\":\"record\",\"name\":\"Payment\",\"namespace\":\"io.confluent.examples.clients.basicavro\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"double\"}]}"}' http://localhost:8081/subjects/test-value/versions
有关详细信息,请参阅 SR 教程:https://docs.confluent.io/current/schema-registry/schema_registry_tutorial.html
I also tried creating an entry in the registry but I could not create legit avro this way.
Avro 不允许在其字段名称中使用 @
。但是,看起来您的数据是 JSON 格式,这确实允许 @
。请参阅上面的 curl 示例,了解如何注册 JSON 架构。
我正在尝试从一些 json 格式的 kakfa 消息创建流,例如:
"beat": {
"name": "xxxxxxx",
"hostname": "xxxxxxxxxx",
"version": "zzzzz"
},
"log_instance": "forwarder-2",
"type": "prod",
"message": "{ ... json string.... }",
"@timestamp": "2020-06-14T23:31:33.925Z",
"input_type": "log",
"@version": "1"
}
我试过使用
CREATE STREAM S (
beat STRUCT<
name VARCHAR,
hostname VARCHAR,
version VARCHAR
>,
log_instance VARCHAR,
type VARCHAR,
message VARCHAR, # for brevity - I also have this with a struct
@timestamp VARCHAR,
input_type VARCHAR,
@version` VARCHAR )
WITH (KAFKA_TOPIC='some_topic', VALUE_FORMAT='JSON');
但是我得到一个错误:
Caused by: line 10:5: extraneous input '@' expecting ....
我绑定了引号和前面的下划线,但没有成功。我也尝试在注册表中创建一个条目,但我无法通过这种方式创建合法的 avro。
PS。如何将主题“绑定”到注册表架构?
谢谢。
如果您使用的是足够新的 ksqlDB 版本,那么只需引用带有无效字符的列名就可以了:
CREATE STREAM S (
beat STRUCT<
name VARCHAR,
hostname VARCHAR,
version VARCHAR
>,
log_instance VARCHAR,
type VARCHAR,
message VARCHAR, # for brevity - I also have this with a struct
`@timestamp` VARCHAR,
input_type VARCHAR,
`@version` VARCHAR )
WITH (KAFKA_TOPIC='some_topic', VALUE_FORMAT='JSON');
如果上述方法不起作用,那么您可能使用的是旧版本的 ksqlDB。升级应该可以解决这个问题。
如果您使用PS. How do I "bind" a topic to a registry schema?
JSON_SR
格式,而不只是 JSON
,ksqlDB 将自动将 JSON 模式发布到模式注册表。后者仅支持从模式注册表中读取模式。
如果您更多的是询问如何在 SR 中为现有主题注册模式...那么您最好查看 SR 文档。注意,ksqlDB 只支持 TopicNameStrategy
naming strategy。值模式具有主题 {topic-name}-value
,例如以下为 test
主题的值注册了一个 JSON 模式。
curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" --data '{"schema": "{\"type\":\"record\",\"name\":\"Payment\",\"namespace\":\"io.confluent.examples.clients.basicavro\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"double\"}]}"}' http://localhost:8081/subjects/test-value/versions
有关详细信息,请参阅 SR 教程:https://docs.confluent.io/current/schema-registry/schema_registry_tutorial.html
I also tried creating an entry in the registry but I could not create legit avro this way.
Avro 不允许在其字段名称中使用 @
。但是,看起来您的数据是 JSON 格式,这确实允许 @
。请参阅上面的 curl 示例,了解如何注册 JSON 架构。