$validate
Definição
O estágio $validate
verifica a conformidade dos documentos de streaming com um esquema de faixas, valores ou tipos de dados esperados.
Sintaxe
O estágio $validate
recebe um documento com os seguintes campos:
Campo | Tipo | necessidade | Descrição |
---|---|---|---|
validator | documento | Obrigatório | Documento de expressões usado para validar mensagens recebidas em relação a um esquema definido pelo usuário. Você pode usar todos, exceto os seguintes operadores de query, para definir expressões de validação:
|
validationAction | string | Opcional | Especifica a ação a ser tomada quando uma mensagem viola o esquema definido pelo usuário. Você pode especificar um dos seguintes valores:
|
Comportamento
Você pode usar $validate
em qualquer ponto de um pipeline após o estágio $source
e antes do estágio $emit
ou $merge
.
Se você especificar as opções discard
ou dlq
para o campo validationAction
, o Atlas Stream Processing registrará mensagens que falharão na validação no seguinte formato:
{ "t": <datetime>, "s": "<severity-level>", "c": "streams-<job-name>", "ctx": "<processed-pipeline>", "msg": "<message-body>", "attrs": { <result-of-logAttributes-evaluation> }, "tags": <array-of-strings>, "truncated": { <truncation-description> }, "size": <size-of-entry> }
A tabela a seguir descreve os campos de entrada de registro:
Campo | Tipo | Descrição |
---|---|---|
attrs | documento | documento que contém os resultados da avaliação do campo logAttributes na definição $validate . O resultado é uma lista de campos. |
c | string | Nome da Atlas Stream Processing tarefa específica em que ocorreu a falha. |
ctx | string | Nome do pipeline de dados de streaming que está sendo processado. |
msg | string | Corpo da mensagem que falhou na validação. |
Atlas Stream Processing suporta apenas JSON schema Rascunho 4 ou anterior.
Exemplo de validador
O documento a seguir mostra um exemplo de expressão de validador usando $and para executar uma operação lógica E:
{ $validate: { validator: { $and: [{ $expr: { $ne: [ "$Racer_Name", "Pace Car" ] } }, { $jsonSchema: { required: [ "Racer_Num", "Racer_Name", "lap", "Corner_Num", "timestamp" ], properties: { Racer_Num: { bsonType: "int", description: "'Racer_Num' is the integer number of the race car and is required" }, Racer_Name: { bsonType: "string", description: "'Racer_Name' must be a string and is required" }, lap: { bsonType: "int", minimum: 1, description: "'lap' must be a int and is required" }, Corner_Num: { bsonType: "int", minimum: 1, maximum: 4, description: "'Corner_Num' must be a int between 1 and 4 and is required" }, timestamp: { bsonType: "string", pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{6}$", description: "'timestamp' must be a string matching iso date pattern and is required" } } } }] }, validationAction : "dlq" } }