default AlarmMessage buildAlarmMessage(AlarmRecord alarmRecord) {
        AlarmMessage message = new AlarmMessage();
        message.setId(String.valueOf(alarmRecord.getId0()));
        message.setId1(String.valueOf(alarmRecord.getId1()));
        message.setName(alarmRecord.getName());
        message.setMessage(alarmRecord.getAlarmMessage());
        message.setStartTime(alarmRecord.getStartTime());
        message.setScope(Scope.Finder.valueOf(alarmRecord.getScope()));
        message.setScopeId(alarmRecord.getScope());
        AlarmSnapshot alarmSnapshot = message.getSnapshot();
        message.setSnapshot(alarmSnapshot);
        String snapshot = alarmRecord.getSnapshot();
        if (StringUtil.isNotBlank(snapshot)) {
            AlarmSnapshotRecord alarmSnapshotRecord = GSON.fromJson(snapshot, AlarmSnapshotRecord.class);
            alarmSnapshot.setExpression(alarmSnapshotRecord.getExpression());
            JsonObject jsonObject = alarmSnapshotRecord.getMetrics();
            if (jsonObject != null) {
                for (final var obj : jsonObject.entrySet()) {
                    final var name = obj.getKey();
                    MQEMetric metrics = new MQEMetric();
                    metrics.setName(name);
                    List<MQEValues> values = GSON.fromJson(
                        obj.getValue().getAsString(), new TypeToken<List<MQEValues>>() {
                        }.getType());
                    metrics.setResults(values);
                    alarmSnapshot.getMetrics().add(metrics);
                }
            }
        }
        return message;
    }
Build the alarm message from the alarm record.
The Tags in JDBC storage is base64 encoded, need to decode in different way.
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java