

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á.

# A dica de consulta `EvaluationStrategy` SPARQL
<a name="sparql-query-hints-evaluationStrategy"></a>

A dica de consulta `evaluationStrategy` informa ao mecanismo de consulta do Amazon Neptune que o fragmento de consulta anotado deve ser avaliado de baixo para cima, como uma unidade independente. Isso significa que nenhuma solução das etapas anteriores da avaliação é usada para computar o fragmento de consulta. O fragmento de consulta é avaliado como uma unidade autônoma, e suas soluções produzidas são unidas ao restante da consulta após serem computadas.

Usar a dica de consulta `evaluationStrategy` implica em um bloqueio (sem pipeline) do plano de consulta, o que significa que as soluções do fragmento anotado com a dica de consulta são materializadas e armazenadas em buffer na memória principal. Usar essa dica de consulta pode aumentar significativamente a quantidade de memória principal necessária para avaliar a consulta, especialmente se o fragmento de consulta anotado calcula um grande número de resultados.

## Sintaxe de `dicas do EvaluationStrategy` SPARQL
<a name="sparql-query-hints-evaluationStrategy-syntax"></a>

A dica de consulta `evaluationStrategy` é especificada como um padrão triplo incluído em uma consulta SPARQL.

Para fins de clareza, a seguinte sintaxe usa um prefixo `hint` definido e incluído na consulta para especificar o namespace de dica de consulta do Neptune:

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
hint:SubQuery hint:evaluationStrategy "BottomUp" .
```

**Escopos disponíveis**
+ `hint:SubQuery`

**nota**  
Essa dica de consulta é compatível apenas com subconsultas aninhadas.

Para obter mais informações sobre escopos de dica de consulta, consulte [Escopo de dicas de consulta do SPARQL no Neptune](sparql-query-hints.md#sparql-query-hints-scope).

## Exemplo de `dica EvaluationStrategy` SPARQL
<a name="sparql-query-hints-evaluationStrategy-example"></a>



Esta seção mostra uma consulta gravada com e sem a dica de consulta `evaluationStrategy` e otimizações relacionadas.

Para este exemplo, suponha que o dataset tenha as seguintes características:
+ Ele contém 1.000 pontos rotulados `:connectedTo`.
+ Cada nó `component` está conectado a uma média de 100 outros nós `component`.
+ O número típico de conexões cíclicas de quatro saltos entre nós é em torno de 100.

Como um exemplo típico, a dica `evaluationStrategy` pode ser útil para otimizar padrões de consulta contendo ciclos.

**Nenhuma dica de consulta**  
A seguinte consulta SPARQL extrai todos os nós `component` que estão ciclicamente conectados entre si por meio de quatro saltos:

```
PREFIX : <https://example.com/>
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
SELECT * {
  ?component1 :connectedTo ?component2 .
  ?component2 :connectedTo ?component3 .
  ?component3 :connectedTo ?component4 .
  ?component4 :connectedTo ?component1 .
}
```

A abordagem do mecanismo de consulta do Neptune é avaliar essa consulta usando as seguintes etapas:
+ Extrair todos os 1.000 pontos `connectedTo` no gráfico.
+ Expandir em 100x (o número de pontos de saída `connectedTo` de component2).

  Resultados intermediários: 100.000 nós.
+ Expandir em 100x (o número de pontos de saída `connectedTo` de component3).

  Resultados intermediários: 10.000.000 nós.
+ Examinar os 10.000.000 nós para o fechamento do ciclo.

Isso resulta em um plano de consulta de streaming, que tem uma quantidade constante de memória principal.

**Dica de consulta e subconsultas**  
Talvez você queira trocar o espaço da memória principal para computação acelerada. Ao reescrever a consulta usando uma dica de consulta `evaluationStrategy`, você pode forçar o mecanismo a calcular uma junção entre dois subconjuntos menores e materializados.

```
PREFIX : <https://example.com/>
          PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
SELECT * {
  {
    SELECT * WHERE {
      hint:SubQuery hint:evaluationStrategy "BottomUp" .
      ?component1 :connectedTo ?component2 .
      ?component2 :connectedTo ?component3 .
    }
  }
  {
    SELECT * WHERE {
      hint:SubQuery hint:evaluationStrategy "BottomUp" .
      ?component3 :connectedTo ?component4 .
      ?component4 :connectedTo ?component1 .
    }
  }
}
```

Em vez de avaliar os padrões triplos em sequência enquanto usa interativamente os resultados dos padrões interativos triplos anteriores como entrada para os próximos padrões, a dica `evaluationStrategy` faz com que duas subconsultas sejam avaliadas de forma independente. Ambas as subconsultas produzem 100.000 nós para os resultados intermediários, que são, por sua vez, unidos para formar a saída final. 

Especificamente, quando você executar o Neptune nos tipos de instância maiores, armazenar temporariamente esses dois subconjuntos de cem mil nós na memória principal aumentará o uso de memória em troca de acelerar significativamente a avaliação.