[英]How Create KSQLdb Stream fields from nested JSON Object
我有一個主題,我正在以以下格式發送 json:
{
"schema": {
"type": "string",
"optional": true
},
"payload": “CustomerData{version='1', customerId=‘76813432’, phone=‘76813432’}”
}
我想用 customerId 和電話創建一個流,但我不確定如何根據嵌套的 json 對象定義流。 (已編輯)
CREATE STREAM customer (
payload.version VARCHAR,
payload.customerId VARCHAR,
payload.phone VARCHAR
) WITH (
KAFKA_TOPIC='customers',
VALUE_FORMAT='JSON'
);
它會是那樣的嗎? 如何在定義流字段時取消引用嵌套對象?
實際上,上面的內容不適用於它所說的字段定義:
Caused by: line 2:12:
extraneous input '.' expecting {'EMIT', 'CHANGES',
'INTEGER', 'DATE', 'TIME', 'TIMESTAMP', 'INTERVAL', 'YEAR', 'MONTH', 'DAY',
extractjsonfield
您可以使用一個名為extractjsonfield的ksqlDB 函數。
首先,您需要提取架構和負載字段:
CREATE STREAM customer (
schema VARCHAR,
payload VARCHAR
) WITH (
KAFKA_TOPIC='customers',
VALUE_FORMAT='JSON'
);
然后您可以選擇 json 中的嵌套字段:
SELECT EXTRACTJSONFIELD(payload, '$.version') AS version FROM customer;
但是,您的負載數據似乎沒有有效的 JSON 格式。
如果您的整個有效負載被編碼為 JSON 字符串,這意味着您的數據如下所示:
{
"schema": {
"type": "string",
"optional": true
},
"payload": {
"version"="1",
"customerId"="76813432",
"phone"="76813432"
}
}
您可以定義結構如下:
CREATE STREAM customer (
schema STRUCT<
type VARCHAR,
optional BOOLEAN>,
payload STRUCT<
version VARCHAR,
customerId VARCHAR,
phone VARCHAR>
)
WITH (
KAFKA_TOPIC='customers',
VALUE_FORMAT='JSON'
);
最后可以像這樣引用單個字段:
CREATE STREAM customer_analysis AS
SELECT
payload->version as VERSION,
payload->customerId as CUSTOMER_ID,
payload->phone as PHONE
FROM customer
EMIT CHANGES;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.