Validação de mapeamentos de dados - Amazon Neptune

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Validação de mapeamentos de dados

Os dados são replicados do Neptune no OpenSearch usando este processo:

  • Se já houver um mapeamento para o campo em questão no OpenSearch:

    • Se os dados puderem ser convertidos com segurança no mapeamento existente usando regras de validação de dados, armazene o campo no OpenSearch.

    • Caso contrário, elimine o registro de atualização de fluxos correspondente.

  • Se não houver mapeamento existente para o campo em questão, encontre um tipo de dados do OpenSearch correspondente ao tipo de dados do campo no Neptune.

    • Se os dados do campo puderem ser convertidos com segurança no tipo de dados do OpenSearch usando regras de validação de dados, armazene o novo mapeamento e os dados do campo no OpenSearch.

    • Caso contrário, elimine o registro de atualização de fluxos correspondente.

Os valores são validados em relação aos tipos equivalentes do OpenSearch ou aos mapeamentos existentes do OpenSearch e não aos tipos do Neptune. Por exemplo, a validação do valor "123" no "123"^^xsd:int é feita em relação ao tipo long e não ao tipo int.

Embora o Neptune tente replicar todos os dados no OpenSearch, há casos em que os tipos de dados no OpenSearch são totalmente diferentes dos tipos no Neptune e, nesses casos, os registros são ignorados em vez de serem indexados no OpenSearch.

Por exemplo, no Neptune, uma propriedade pode ter vários valores de tipos diferentes, enquanto no OpenSearch um campo deve ter o mesmo tipo em todo o índice.

Ao habilitar os logs de depuração, é possível ver quais registros foram descartados durante a exportação do Neptune para o OpenSearch. É um exemplo de entrada de log de depuração:

Dropping Record : Data type not a valid Gremlin type <Record>

Os tipos de dados são validados da seguinte forma:

  • text: todos os valores no Neptune podem ser associados com segurança ao texto no OpenSearch.

  • long: as seguintes regras para os tipos de dados do Neptune se aplicam quando o tipo de mapeamento do OpenSearch é longo (nos exemplos abaixo, presume-se que "testLong" tenha um tipo de mapeamento long):

    • boolean: inválido, não pode ser convertido e o registro de atualização de fluxos correspondente é descartado.

      São exemplos de Gremlin inválidos:

      "testLong" : true. "testLong" : false.

      São exemplos de SPARQL inválidos:

      ":testLong" : "true"^^xsd:boolean ":testLong" : "false"^^xsd:boolean
    • datetime: inválido, não pode ser convertido e o registro de atualização de fluxos correspondente é descartado.

      É um exemplo de Gremlin inválido:

      ":testLong" : datetime('2018-11-04T00:00:00').

      É um exemplo de SPARQL inválido:

      ":testLong" : "2016-01-01"^^xsd:date
    • float, double ou decimal: se o valor no Neptune for um número inteiro que caiba em 64 bits, ele será válido e será armazenado no OpenSearch como um valor longo, mas se tiver uma parte fracionária ou for NaN ou INF, ou for maior que 9.223.372.036.854.775.807 ou menor que -9.223.372.036.857.75.808, não será válido, e o registro de atualização de fluxos correspondente será descartado.

      São exemplos de Gremlin válidos:

      "testLong" : 145.0. ":testLong" : 123 ":testLong" : -9223372036854775807

      São exemplos de SPARQL válidos:

      ":testLong" : "145.0"^^xsd:float ":testLong" : 145.0 ":testLong" : "145.0"^^xsd:double ":testLong" : "145.0"^^xsd:decimal ":testLong" : "-9223372036854775807"

      São exemplos de Gremlin inválidos:

      "testLong" : 123.45 ":testLong" : 9223372036854775900

      São exemplos de SPARQL inválidos:

      ":testLong" : 123.45 ":testLong" : 9223372036854775900 ":testLong" : "123.45"^^xsd:float ":testLong" : "123.45"^^xsd:double ":testLong" : "123.45"^^xsd:decimal
    • string: se o valor no Neptune for uma representação em string de um valor inteiro que possa estar contido em um número inteiro de 64 bits, ele será válido e será convertido em um long no OpenSearch. Qualquer outro valor de string será inválido para um mapeamento long do ElasticSearch e o registro de atualização de fluxos correspondente será descartado.

      São exemplos de Gremlin válidos:

      "testLong" : "123". ":testLong" : "145.0" ":testLong" : "-9223372036854775807"

      São exemplos de SPARQL válidos:

      ":testLong" : "145.0"^^xsd:string ":testLong" : "-9223372036854775807"^^xsd:string

      São exemplos de Gremlin inválidos:

      "testLong" : "123.45" ":testLong" : "9223372036854775900" ":testLong" : "abc"

      São exemplos de SPARQL inválidos:

      ":testLong" : "123.45"^^xsd:string ":testLong" : "abc" ":testLong" : "9223372036854775900"^^xsd:string
  • double: se o tipo de mapeamento do OpenSearch for double, as seguintes regras se aplicarão (aqui, presume-se que o campo “testDouble” tenha um mapeamento double no OpenSearch):

    • boolean: inválido, não pode ser convertido e o registro de atualização de fluxos correspondente é descartado.

      São exemplos de Gremlin inválidos:

      "testDouble" : true. "testDouble" : false.

      São exemplos de SPARQL inválidos:

      ":testDouble" : "true"^^xsd:boolean ":testDouble" : "false"^^xsd:boolean
    • datetime: inválido, não pode ser convertido e o registro de atualização de fluxos correspondente é descartado.

      É um exemplo de Gremlin inválido:

      ":testDouble" : datetime('2018-11-04T00:00:00').

      É um exemplo de SPARQL inválido:

      ":testDouble" : "2016-01-01"^^xsd:date
    • Ponto flutuante NaN ou INF: se o valor em SPARQL for um ponto flutuante NaN ou INF, ele não será válido e o registro de atualização de fluxos correspondente será descartado.

      São exemplos de SPARQL inválidos:

      " :testDouble" : "NaN"^^xsd:float ":testDouble" : "NaN"^^double ":testDouble" : "INF"^^double ":testDouble" : "-INF"^^double
    • número ou string numérica: se o valor no Neptune for qualquer outro número ou representação de string numérica de um número que possa ser expresso com segurança como double, ele será válido e convertido em double no OpenSearch. Qualquer outro valor de string será inválido para um mapeamento double do OpenSearch e o registro de atualização de fluxos correspondente será descartado.

      São exemplos de Gremlin válidos:

      "testDouble" : 123 ":testDouble" : "123" ":testDouble" : 145.67 ":testDouble" : "145.67"

      São exemplos de SPARQL válidos:

      ":testDouble" : 123.45 ":testDouble" : 145.0 ":testDouble" : "123.45"^^xsd:float ":testDouble" : "123.45"^^xsd:double ":testDouble" : "123.45"^^xsd:decimal ":testDouble" : "123.45"^^xsd:string

      É um exemplo de Gremlin inválido:

      ":testDouble" : "abc"

      É um exemplo de SPARQL inválido:

      ":testDouble" : "abc"
  • date: se o tipo de mapeamento do OpenSearch for date, os valores date e dateTime do Neptune serão válidos, assim como qualquer valor de string que possa ser analisado com êxito em um formato dateTime.

    São exemplos válidos no Gremlin ou no SPARQL:

    Date(2016-01-01) "2016-01-01" " 2003-09-25T10:49:41" "2003-09-25T10:49" "2003-09-25T10" "20030925T104941-0300" "20030925T104941" "2003-Sep-25" " Sep-25-2003" "2003.Sep.25" "2003/09/25" "2003 Sep 25" " Wed, July 10, '96" "Tuesday, April 12, 1952 AD 3:30:42pm PST" "123" "-123" "0" "-0" "123.00" "-123.00"

    São exemplos inválidos:

    123.45 True "abc"