5.9.2版本转发到kafka,SQL如何编写性能最好

需求

{租户ID}/{data,resp,ack,cmd, reply}/clientId(雪花Long,19位数字)/一级分类/二级分类 这样的主题转发到 kafka,过滤掉 L2 不符合 data,resp,ack,cmd, reply 这5个值和 payload.messageId 不为 UUID 格式的。

我目前的 SQL 语句如下:

SELECT
  timestamp as clientSendAt, username, payload, topic, qos, publish_received_at as brokerReceiveAt, payload.messageId as messageId
FROM
  "+/data/+/+/+", "+/resp/+/+/+", "+/ack/+/+/+", "+/cmd/+/+/+", "+/reply/+/+/+"
WHERE
  regex_match(payload.messageId, '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$')

问题1: 这个 FROM 是否有更好的写法

问题2: payload 我希望将它处理成标准 json 再发送,但是 QA 说给 payload 起别名会非常影响性能,不知道有没有更好的处理方式?

应该是 regex_match 效率差一点。
如果你的业务就是这样,那应该也没有更好的写法了。
如果可以,你直接在 payload里面再加一个字段来标记要不要过滤呗(如果客户端改不了,就当我没说。。。)

json_decode(payload) as payload这样的写法可取吗?
如果都比较影响效率,我就都扔到server层来处理。
还有就是FROM语句这样写就是标准写法是吧?

是的,
搞到 server 处理过滤也不错。

了解了,多谢:pray: