如何运行 GQL 或 openCypher 查询

使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息
适用于: ✅ Azure 数据资源管理器

若要运行 GQL 或 openCypher 查询,需要创建一个图形,它可以是永久性的或暂时性的。

创建图形

  • 对于暂时性图形,请创建一个以 生成图形 运算符结尾的函数。 根据需要设置标签。 标签数据可以是字符串列或数组列。

以下示例创建电影与人之间的关系的电影图。

.create-or-alter function G()
 {
     let Movies = datatable (Title: string, Description: string, Year: int, Label2: dynamic)
     [
         'T1', 'A movie about space', 1995, dynamic(["Movie","Survival","Adventure","Drama","History"]),
         'T2', 'Romantic comedy',     2011, dynamic(["Movie","Comedy","Drama","Romance"]),
         'T3', 'War film',            2020, dynamic(["Movie","Drama","History","War"]),
     ]
     | extend Label = 'Movie';
     let People = datatable (Name: string, Born: int, Label2: dynamic)
     [
         'Tom',   1956, dynamic(["Person","Male","BestActorAward"]),
         'Kevin', 1958, dynamic(["Person","Male"]),
         'Ron',   1954, dynamic(["Person","Male","BestDirectorAward"]),
         'Julia', 1967, dynamic(["Person","Female","BestActressAward"]),
     ]
     | extend Label = 'Person';
     let Actions = datatable(Name: string, Movie: string, Label: string, Label2: dynamic, Role: string)
     [
         'Tom',   'T1', 'ACTED_IN', dynamic(["ACTED_IN"]), 'Role1',
         'Kevin', 'T1', 'ACTED_IN', dynamic(["ACTED_IN"]), 'Role2',
         'Ron',   'T1', 'DIRECTED', dynamic(["DIRECTED"]), 'Director',
         'Tom',   'T2', 'ACTED_IN', dynamic(["ACTED_IN"]), 'Role3',
         'Tom',   'T2', 'DIRECTED', dynamic(["DIRECTED"]), 'Director',
         'Tom',   'T3', 'ACTED_IN', dynamic(["ACTED_IN"]), 'Role4',
     ];
     Actions
    | make-graph Name --> Movie with People on Name, Movies on Title
 }

在上面的示例中,实体标签数据可以是 Label 列(单个字符串)或 Label2 列(字符串数组)。

Tip

对于生产方案,建议使用图形模型快照。

例:

.create-or-alter graph_model MyGraphModel1 ```
 {
  "Schema": {
    "Nodes": {
      "Person": { "Name":"string", "Born":"int" },
      "Movie": { "Title":"string", "Description":"string", "Year":"int" }
    },
    "Edges": {
      "ACTED_IN": { "Name":"string", "Movie":"string", "Role":"string" },
      "DIRECTED": { "Name":"string", "Movie":"string", "Role":"string" }
    }
  },
  "Definition": {
    "Steps": [
      {
        "Query": "datatable(Name:string, Born:int, Label2:dynamic)
                    [
                        'Tom',   1956, dynamic(['Male', 'BestActorAward']),
                        'Kevin', 1958, dynamic(['Male']),
                        'Ron',   1954, dynamic(['Male', 'BestDirectorAward']),
                        'Julia', 1967, dynamic(['Female', 'BestActressAward']),
                    ]",
        "NodeIdColumn": "Name",
        "Kind": "AddNodes",
        "Labels": ["Person"],
        "LabelsColumn" :"Label2",
      },
      {
        "Query": "datatable(Title:string, Description:string, Year:int, Label2:dynamic) 
                    [
                        'T1', 'A movie about space', 1995, dynamic(['Survival', 'Adventure', 'Drama', 'History']),
                        'T2', 'Romantic comedy', 2011, dynamic(['Comedy', 'Drama', 'Romance']),
                        'T3', 'War film', 2020, dynamic(['Drama', 'History', 'War']),
                    ]",
        "NodeIdColumn": "Title",
        "Kind": "AddNodes",
        "Labels": ["Movie"],
        "LabelsColumn" :"Label2",
      },
      {
        "Query": "datatable(Name:string, Movie:string, Role:string, Label2:string)
                    [
                         'Tom',   'T1', 'Role1',    'ACTED_IN',
                         'Kevin', 'T1', 'Role2',    'ACTED_IN',
                         'Tom',   'T2', 'Role3',    'ACTED_IN',
                         'Tom',   'T3', 'Role4',    'ACTED_IN',
                         'Ron',   'T1', 'Director', 'DIRECTED',
                         'Tom',   'T2', 'Director', 'DIRECTED',
                    ]",
        "SourceColumn": "Name",
        "TargetColumn": "Movie",
        "Kind": "AddEdges",
        "LabelsColumn" :"Label2",
      } 
    ]
  }
}```

为模型创建快照:

.make graph_snapshot MySnapshot1 from MyGraphModel1

查询图

可以通过 SDK、API 或直接在 Kusto 资源管理器Azure 数据资源管理器 Web UI 中查询图形。

根据需要设置下面所述的指令,然后运行 GQL 或 openCypher 查询。

  • 设置查询语言(运行以下指令):
#crp query_language=gql // or #crp query_language=opencypher
  • 设置图形引用(运行以下指令):
#crp query_graph_reference=G

如果图形是模型,并且客户端是 Web UI(请运行以下指令):

#crp query_graph_reference = graph("MyGraphModel1","MySnapshot1")

如果图形是模型,并且客户端是 Kusto Explorer 桌面应用程序 (运行以下指令):

 #crp query_graph_reference = 'graph("MyGraphModel1", "MySnapshot1")'
  • 如果图形是暂时性的,请设置标签列名称(默认值: Label)。 运行以下指令:
 #crp query_graph_label_name = Label2

Important

在运行查询之前单独运行每个指令。

以下屏幕截图显示了已设置的三个客户端请求属性的示例:

显示客户端请求属性的屏幕截图。

通过桌面 UI 查询图形

可以通过 UI(默认:GQL):在 Kusto 资源管理器中,可以通过 工具>选项>查询编辑器>图形查询语言选择语言,而不是使用指令:

显示如何选择查询语言的屏幕截图。

通过 SDK 或 API 查询图形

设置以下客户端请求属性:

  • query_language:设置为 "opencypher""gql"
  • query_graph_reference:设置为图形函数名称(例如 "G")。
  • query_graph_label_name:设置为标签列名称(例如 "Label2")。

有关详细信息,请参阅 此处的客户端请求属性。