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á.
AWS IoT TwinMaker recursos adicionais do gráfico de conhecimento
Esta seção fornece exemplos básicos da sintaxe do partiQL usada para escrever consultas no gráfico de conhecimento, bem como links para a documentação do partiQL que fornecem informações sobre o modelo de dados do gráfico de conhecimento.
Esse conjunto de exemplos mostra consultas básicas com suas respostas. Use isso como referência para escrever suas próprias consultas.
- Consultas básicas
-
-
Obtenha todas as entidades com um filtro
SELECT entity FROM EntityGraph MATCH (entity) WHERE entity.entityName = 'room_0'Essa consulta retorna todas as entidades em um espaço de trabalho com o nome
room_0.FROMcláusula:EntityGraphé a coleção de gráficos que contém todas as entidades e seus relacionamentos em um espaço de trabalho. Essa coleção é criada e gerenciada automaticamente AWS IoT TwinMaker com base nas entidades em seu espaço de trabalho.Cláusula
MATCH: especifica um padrão que corresponde a uma parte do gráfico. Nesse caso, o padrão(entity)corresponde a cada nó no gráfico e está vinculado à variável da entidade. A cláusulaFROMdeve ser seguida pela cláusulaMATCH.WHEREcláusula: especifica um filtro noentityNamecampo do nó, onde o valor deve corresponder.room_0SELECTcláusula: especifica aentityvariável para que todo o nó da entidade seja retornado.Resposta:
{ "columnDescriptions": [ { "name": "entity", "type": "NODE" } ], "rows": [ { "rowData": [ { "arn": "arn:aws:iottwinmaker:us-east-1: 577476956029: workspace / SmartBuilding8292022 / entity / room_18f3ef90 - 7197 - 53 d1 - abab - db9c9ad02781 ", "creationDate": 1661811123914, "entityId": "room_18f3ef90-7197-53d1-abab-db9c9ad02781", "entityName": "room_0", "lastUpdateDate": 1661811125072, "workspaceId": "SmartBuilding8292022", "description": "", "components": [ { "componentName": "RoomComponent", "componentTypeId": "com.example.query.construction.room", "properties": [ { "propertyName": "roomFunction", "propertyValue": "meeting" }, { "propertyName": "roomNumber", "propertyValue": 0 } ] } ] } ] } ] }columnDescriptionsRetorna metadados sobre a coluna, como nome e tipo. O tipo retornado éNODE. Isso indica que o nó inteiro foi retornado. Outros valores para o tipo podemEDGEindicar uma relação ouVALUEindicar um valor escalar, como um inteiro ou uma string.O
rowsretorna uma lista de linhas. Como apenas uma entidade foi correspondida, umrowDataé retornado, que contém todos os campos em uma entidade.nota
Ao contrário do SQL, em que você só pode retornar valores escalares, você pode retornar um objeto (como JSON) usando partiQL.
Cada nó contém todos os campos em nível de entidade
entityId, como,arne campos em nível de componentecomponents, comocomponentName,componentTypeIde também campos em nível de propriedade,propertiescomo e, tudo como um JSONpropertyNameaninhadopropertyValue. -
Obtenha todos os relacionamentos com um filtro:
SELECT relationship FROM EntityGraph MATCH (e1)-[relationship]->(e2) WHERE relationship.relationshipName = 'isLocationOf'Essa consulta retorna todos os relacionamentos em um espaço de trabalho com o nome do relacionamento
isLocationOf.A
MATCHcláusula: especifica um padrão que corresponde a dois nós (indicados por()) conectados por uma borda direcionada (indicada por-[]->) e vinculados a uma variável chamada.relationshipA
WHEREcláusula: especifica um filtro norelationshipNamecampo da borda, onde está o valor.isLocationOfA
SELECTcláusula: especifica a variável de relacionamento para que todo o nó de borda seja retornado.Resposta
{ "columnDescriptions": [{ "name": "relationship", "type": "EDGE" }], "rows": [{ "rowData": [{ "relationshipName": "isLocationOf", "sourceEntityId": "floor_83faea7a-ea3b-56b7-8e22-562f0cf90c5a", "targetEntityId": "building_4ec7f9e9-e67e-543f-9d1b- 235df7e3f6a8", "sourceComponentName": "FloorComponent", "sourceComponentTypeId": "com.example.query.construction.floor" }] }, ... //rest of the rows are omitted ] }O tipo da coluna em
columnDescriptionsé umEDGE.Cada um
rowDatarepresenta uma borda com campos comorelationshipName. É o mesmo nome da propriedade do relacionamento definido na entidade. OsourceEntityId,sourceComponentNameesourceComponentTypeIdfornece informações sobre em qual entidade e componente a propriedade do relacionamento foi definida. OtargetEntityIdespecifica para qual entidade esse relacionamento está apontando. -
Obtenha todas as entidades com um relacionamento específico com uma entidade específica
SELECT e2.entityName FROM EntityGraph MATCH (e1)-[r]->(e2) WHERE relationship.relationshipName = 'isLocationOf' AND e1.entityName = 'room_0'Essa consulta retorna todos os nomes de entidades de todas as entidades que têm um
isLocationOfrelacionamento com aroom_0entidade.A
MATCHcláusula: especifica um padrão que corresponde a quaisquer dois nós (e1,e2) que tenham uma borda direcionada (r).A cláusula
WHERE: especifica um filtro no nome do relacionamento e no nome da entidade de origem.A
SELECTcláusula: retorna oentityNamecampo noe2nó.Resposta
{ "columnDescriptions": [ { "name": "entityName", "type": "VALUE" } ], "rows": [ { "rowData": [ "floor_0" ] } ] }Em ColumnDescriptions, o tipo da coluna é
VALUEporqueentityNameé uma string.Uma entidade,
floor_0, é retornada.
-
- MATCH
-
Os seguintes padrões são suportados em uma
MATCHcláusula:-
Combine o nó 'b' apontando para o nó 'a':
FROM EntityGraph MATCH (a)-[rel]-(b) -
Combine o nó 'a' apontando para o nó 'b':
FROM EntityGraph MATCH (a)-[]->(b)Não há nenhuma variável vinculada a um relacionamento, supondo que um filtro não precise ser especificado no relacionamento.
-
Combine o nó 'a' apontando para o nó 'b' e o nó 'b' apontando para o nó 'a':
FROM EntityGraph MATCH (a)-[rel]-(b)Isso retornará duas correspondências: uma de 'a' para 'b' e outra de 'b' para 'a', então a recomendação é usar bordas direcionadas sempre que possível.
-
O nome do relacionamento também é um rótulo do gráfico de propriedades
EntityGraph, então você pode simplesmente especificar o nome do relacionamento após dois pontos (:) em vez de especificar um filtrorel.relationshipNamenaWHEREcláusula.FROM EntityGraph MATCH (a)-[:isLocationOf]-(b) -
Encadeamento: os padrões podem ser encadeados para corresponder a vários relacionamentos.
FROM EntityGraph MATCH (a)-[rel1]->(b)-[rel2]-(c) -
Os padrões de salto variáveis também podem abranger vários nós e bordas:
FROM EntityGraph MATCH (a)-[]->{1,5}(b)Essa consulta corresponde a qualquer padrão com bordas de saída do nó 'a' em 1 a 5 saltos. Os quantificadores permitidos são:
{m,n}- entre m e n repetições{m,}- m ou mais repetições.
-
- FROM:
-
Um nó de entidade pode conter dados aninhados, como componentes que, por sua vez, contêm mais dados aninhados, como propriedades. Eles podem ser acessados desaninhando o resultado do padrão MATCH.
SELECT e FROM EntityGraph MATCH (e), e.components AS c, c.properties AS p WHERE c.componentTypeId = 'com.example.query.construction.room', AND p.propertyName = 'roomFunction' AND p.propertyValue = 'meeting'Acesse campos aninhados pontilhando
.em uma variável. Uma vírgula (,) é usada para desaninhar (ou unir) entidades com os componentes internos e, em seguida, com as propriedades dentro desses componentes.ASé usado para vincular uma variável às variáveis não aninhadas para que elas possam ser usadas nas cláusulas or.WHERESELECTEssa consulta retorna todas as entidades que contêm uma propriedade nomeadaroomFunctioncom valormeetingem um componente com id do tipo de componentecom.example.query.construction.room.Para acessar vários campos aninhados de um campo, como vários componentes em uma entidade, use a notação de vírgula para fazer uma junção.
SELECT e FROM EntityGraph MATCH (e), e.components AS c1, e.components AS c2 - SELECT:
-
-
Retorne um nó:
SELECT e FROM EntityGraph MATCH (e) -
Retorne uma borda:
SELECT r FROM EntityGraph MATCH (e1)-[r]->(e2) -
Retorne um valor escalar:
SELECT floor.entityName, room.description, p.propertyValue AS roomfunction FROM EntityGraph MATCH (floor)-[:isLocationOf]-(room), room.components AS c, c.properties AS pFormate o nome do campo de saída atribuindo um alias a ele usando
AS. Aqui, em vez depropertyValuecomo nome da coluna na resposta,roomfunctioné retornado. -
Retorne os aliases:
SELECT floor.entityName AS floorName, luminaire.entityName as luminaireName FROM EntityGraph MATCH (floor)-[:isLocationOf]-(room)-[:hasPart]- (lightingZone)-[:feed]-(luminaire) WHERE floor.entityName = 'floor_0' AND luminaire.entityName like 'lumin%'É altamente recomendável usar aliases para ser explícito, aumentar a legibilidade e evitar ambigüidades em suas consultas.
-
- WHERE:
-
Os operadores lógicos suportados são
ANDNOT,ORe.Os operadores de comparação compatíveis são
<,<=,>,=>,=e!=.Use a
INpalavra-chave se quiser especificar váriasORcondições no mesmo campo.-
Filtrar em um campo de entidade, componente ou propriedade:
FROM EntityGraph MATCH (e), e.components AS c, c.properties AS p WHERE e.entityName = 'room_0' AND c.componentTypeId = 'com.example.query.construction.room', AND p.propertyName = 'roomFunction' AND NOT p.propertyValue = 'meeting' OR p.propertyValue = 'office' -
Filtre na
configurationpropriedade. Aquiunitestá a chave no mapa de configuração eCelsiusé o valor.WHERE p.definition.configuration.unit = 'Celsius' -
Verifique se uma propriedade do mapa contém uma determinada chave e valor:
WHERE p.propertyValue.length = 20.0 -
Verifique se uma propriedade do mapa contém uma determinada chave:
WHERE NOT p.propertyValue.length IS MISSING -
Verifique se uma propriedade da lista contém um determinado valor:
WHERE 10.0 IN p.propertyValue -
Use a função
lower()para comparações sem distinção entre maiúsculas e minúsculas. Por padrão, todas as comparações são sensíveis a maiúsculas e minúsculas.WHERE lower(p.propertyValue) = 'meeting'
- LIKE:
-
Útil se você não souber o valor exato de um campo e puder realizar uma pesquisa de texto completo no campo especificado.
%representa zero ou mais.WHERE e.entityName LIKE '%room%'-
Pesquisa de infixos:
%room% -
Pesquisa de prefixos:
room% -
Pesquisa de sufixo:
%room -
Se você tiver '%' em seus valores, coloque um caractere de escape no
LIKEe especifique o caractere de escape comESCAPE.
WHERE e.entityName LIKE 'room\%' ESCAPE '\' -
- DISTINCT:
-
SELECT DISTINCT c.componentTypeId FROM EntityGraph MATCH (e), e.components AS c-
A palavra-chave
DISTINCTelimina duplicatas do resultado final.DISTINCTnão é compatível com tipos de dados complexos.
-
- CONTAGEM
-
SELECT COUNT(e), COUNT(c.componentTypeId) FROM EntityGraph MATCH (e), e.components AS cA
COUNTpalavra-chave calcula o número de itens em um resultado de consulta.COUNTnão é compatível com campos complexos aninhados e campos de padrões gráficos.COUNTa agregação não é compatível com consultasDISTINCTaninhadas.Por exemplo, não há suporte para
COUNT(DISTINCT e.entityId).
- CAMINHO
-
As seguintes projeções de padrões são suportadas na consulta usando a projeção de caminho:
Consultas de salto variável
SELECT p FROM EntityGraph MATCH p = (a)-[]->{1, 3}(b)Essa consulta combina e projeta metadados de nós de qualquer padrão com bordas de saída do nó a em 1 a 3 saltos.
Consultas de salto fixo
SELECT p FROM EntityGraph MATCH p = (a)-[]->(b)<-[]-(c)Essa consulta combina e projeta metadados de entidades e bordas de entrada para b.
Consultas não direcionadas
SELECT p FROM EntityGraph MATCH p = (a)-[]-(b)-[]-(c)Essa consulta combina e projeta os metadados dos nós em padrões de 1 salto conectando a e c via b.
{ "columnDescriptions": [ { "name": "path", "type": "PATH" } ], "rows": [ { "rowData": [ { "path": [ { "entityId": "a", "entityName": "a" }, { "relationshipName": "a-to-b-relation", "sourceEntityId": "a", "targetEntityId": "b" }, { "entityId": "b", "entityName": "b" } ] } ] }, { "rowData": [ { "path": [ { "entityId": "b", "entityName": "b" }, { "relationshipName": "b-to-c-relation", "sourceEntityId": "b", "targetEntityId": "c" }, { "entityId": "c", "entityName": "c" } ] } ] } ] }Essa resposta de
PATHconsulta é composta apenas por metadados que identificam todos os nós e bordas de cada um path/pattern entre a e c via b.
- LIMITE e COMPENSAÇÃO:
-
SELECT e.entityName FROM EntityGraph MATCH (e) WHERE e.entityName LIKE 'room_%' LIMIT 10 OFFSET 5LIMITespecifica o número de resultados a serem retornados na consulta eOFFSETespecifica o número de resultados a serem ignorados. - LIMIT e maxResults:
-
O exemplo a seguir mostra uma consulta que retorna 500 resultados no total, mas exibe apenas 50 por vez por chamada de API. Esse padrão pode ser usado quando você precisa limitar a quantidade de resultados exibidos, por exemplo, se você só puder exibir 50 resultados em uma interface de usuário.
aws iottwinmaker execute-query \ --workspace-id exampleWorkspace \ --query-statement "SELECT e FROM EntityGraph MATCH (e) LIMIT 500"\ --max-results 50-
A
LIMITpalavra-chave afeta a consulta e limita as linhas resultantes. Se você precisar controlar o número de resultados retornados por chamada de API sem limitar o número total de resultados retornados, useLIMIT. -
max-resultsé um parâmetro opcional para a ação ExecuteQuery da API.max-resultssó se aplica à API e à forma como os resultados são lidos dentro dos limites da consulta acima.O uso
max-resultsem uma consulta permite reduzir o número de resultados exibidos sem limitar o número real de resultados retornados.
A consulta abaixo percorre a próxima página de resultados. Essa consulta usa a chamada de
ExecuteQueryAPI para retornar as linhas 51 a 100, onde a próxima página de resultados é especificada pelonext-token— nesse caso, o token é:."H7kyGmvK376L"aws iottwinmaker execute-query \ --workspace-id exampleWorkspace \ --query-statement "SELECT e FROM EntityGraph MATCH (e) LIMIT 500"\ --max-results 50 --next-token "H7kyGmvK376L"-
A
next-tokenstring especifica a próxima página de resultados. Para obter mais informações, consulte a ação ExecuteQueryda API.
-
AWS IoT TwinMaker a consulta do gráfico de conhecimento tem os seguintes limites:
| Nome do limite | Quota | Ajustável |
|---|---|---|
|
Tempo limite de execução da consulta |
10 segundos | Não |
|
Número máximo de saltos |
10 | Sim |
|
Número máximo de |
20 | Sim |
|
Número máximo de campos projetados |
20 | Sim |
|
Número máximo de expressões condicionais ( |
10 | Sim |
|
Tamanho máximo de um padrão de |
20 | Sim |
Número máximo de itens que podem ser especificados em uma IN cláusula |
10 | Sim |
Valor máximo para OFFSET |
3000 | Sim |
|
Valor máximo para |
3000 | Sim |
|
Valor máximo para travessias (+) |
3000 | Sim |