云服务器内容精选

  • Cypher预置条件 当前的Cypher查询编译过程中使用了基于label的点边索引,如需正常使用Cypher,请使用新建索引API构建索引,示例如下: 点label索引添加命令示例,索引名称为cypher_vertex_index,索引类型为全局点索引。 POST http://{SERVER_URL}/ges/v1.0/{project_id}/graphs/{graph_name}/indices { "indexName": "cypher_vertex_index", "indexType": "GlobalCompositeVertexIndex", "hasLabel": "true", "indexProperty": [] } 边label索引添加命令示例,索引名称为cypher_edge_index,索引类型为全局边索引。 POST http://{SERVER_URL}/ges/v1.0/{project_id}/graphs/{graph_name}/indices { "indexName": "cypher_edge_index", "indexType": "GlobalCompositeEdgeIndex", "hasLabel": "true", "indexProperty": [] } 图规格为一亿边、十亿边、百亿边规格时,不需要进行此步骤(图版本要求2.3.6及以上)。 需要同时添加两个索引(点label索引和边label索引)才能正常使用Cypher查询。 如果图中已经存在hasLabel为true, indexProperty为空的点索引或边索引,则不需要重复构建。 添加索引API为异步接口,查询索引是否添加成功,请使用查询Job状态API。 细粒度权限开启时使用子账号创建索引,需要子账号具有schema权限、所有label(包括默认label“__DEFAULT__”)的读权限。否则创建索引后需要使用具备相应权限的账号发送“call db.schema()”对Cypher查询编译缓存进行刷新。 父主题: Cypher操作API(2.2.16)
  • 响应参数 表4 响应Body参数说明 参数 类型 说明 results List 一个List,每个元素是一条Cypher语句的返回结果。 errors List 一个List,每个元素包含字符串形式的code和message信息。 表5 参数results中各要素说明 参数 类型 说明 columns List 返回的字段名。 data List 返回的数据值,每个元素代表一条记录。 stats Object 返回的增删改统计信息。 plan Object 如果cypher语句带explain或者profile前缀,则此字段输出查询计划,否则不显示该字段,正常执行查询。profile特性2.3.12版本开始支持。 jobId(2.3.10) String 请求为异步执行模式下,该字段用于输出异步任务id。 jobType(2.3.10) Integer 请求为异步执行模式下,该字段用于输出异步任务的类型。 表6 参数data中各要素说明: 参数 类型 说明 row List 表示具体一行的内容,每个元素对应该行的一个字段,仅当resultDataContents为空或者包含“row”类型时显示。 meta List 表示该行每个字段的类型信息,仅当resultDataContents为空或者包含“row”类型时显示。 graph Object 以“graph”样式返回该行信息,仅当resultDataContents包含“graph”类型时显示。 raw(2.2.27) List 以“raw”样式返回该行信息,仅当resultDataContents包含“raw”类型时显示。 表7 stats各要素响应参数: 参数 类型 说明 contains_updates Boolean 表示本次查询是否有数据修改。 edges_created Integer 创建的边数目。 edges_deleted Int 删除的边数目。 labels_set Integer 设置的label数目。 properties_set Integer 设置的属性数目。 vertices_created Integer 创建的点数目。 vertices_deleted Integer 删除的点数目。
  • 响应示例 状态码: 200 成功响应示例(同步任务) Http Status Code: 200 { "results": [ { "columns": ["n"], "data": [ { "row": [ { "occupation": "artist", "gender": "F", "Zip-code": "98133", "userid": 0, "age": "25-34" } ], "meta": [ { "id": "46", "type": "node", "labels": [ "user" ] } ] } ], "stats": { "contains_updates": false, "edges_created": 0, "edges_deleted": 0, "labels_set": 0, "properties_set": 0, "vertices_created": 0, "vertices_deleted": 0 } } ], "errors": [] } 状态码: 200 成功响应示例(异步任务) Http Status Code: 200 { "results": [ { "columns": [ "jobId", "jobType" ], "jobId": "b64a5846-e306-4f87-b0f1-d595ee2a9910", "jobType": 1, "data": [ { "row": [ "b64a5846-e306-4f87-b0f1-d595ee2a9910", 1 ], "meta": [ null, null ] } ] } ], "errors": [] } 状态码: 400 失败响应示例 Http Status Code: 400 { "results": [], "errors": [ { "code": "GES.8904", "message": "Label index in vertices is not found." } ] }
  • 请求示例 执行Cypher查询,Cypher语句为match (n) return n limit 1,返回的结果样式是每个元素对应该行的一个字段。 POST http://{SERVER_URL}/ges/v1.0/{project_id}/graphs/{graph_name}/action?action_id=execute-cypher-query { "statements": [{ "statement": "match (n) return n limit 1", "parameters": {}, "resultDataContents": ["row"], "includeStats": false }] }
  • 请求参数 表2 Body参数说明 参数 是否必选 类型 说明 statements 是 List statements为一个语句组,包含一到多条语句。其中每个元素的格式如表 statements参数说明。 表3 statements参数说明 参数 是否必选 类型 说明 statement 是 String Cypher语句。 parameters 是 Object Cypher语句参数,在进行参数化查询时使用,默认为空。 如需使用,请参考参数化查询。 resultDataContents 否 String或List 返回的结果样式,样式可设置一个或多个。可选参数有“row”,”graph”, “raw”(2.2.27版本新增)。 includeStats 否 Boolean 控制返回结果是否携带增删改统计信息的开关,若不设置此字段,默认为不携带。 runtime 否 String 执行器类型,可选值为“map”、“slotted” 、“block”,默认为“map”。slotted执行器自2.3.15版本开始支持,block执行器自2.4.1版本开始支持。 executionMode(2.2.23) 否 String 执行模式。同步执行模式填写“sync”,异步执行填写“async”,不写默认同步执行。异步模式下,获取查询结果参见查询Job状态。 limit(2.2.23) 否 Int 该字段仅在异步模式下生效,表示对异步结果的最大结果数限制,默认值为100000。 transactional 否 Bool 控制Cypher请求是否为事务的。默认为false。更多详细Cypher事务介绍参见Cypher事务。 在语句前可以添加explain和profile前缀,用于显示查询计划: explain只显示查询计划,不执行语句;profile显示查询计划,并执行语句。 runtime字段说明:与map执行器相比,slotted执行器在语句的计划生成阶段完成了更多的语句数据流分析,在大部分情况下执行速度更快,占用内存更少。 在异步模式(executionMode参数值为async)下,支持cypher查询结果以csv格式导出到文件(GES版本2.3.4及以上支持该功能),详情请参考导出job返回结果到文件(2.2.1)。目前支持下列对象的返回: 点边单值属性、点边id、分组计数结果等值类型。 对于对象类型,目前的版本暂不支持导出,csv中视作空值处理。 Cypher事务(仅持久化版规格有效): 持久化版规格下Cypher支持事务,用户可以通过设置transactional为true来开启Cypher的事务功能,以保证单条Cypher语句的原子性。对于多条Cypher语句的事务暂不支持。事务的隔离级别为串行化(serializability)。 由于底层存储引擎存在5s的事务时间窗口限制,因此Cypher的事务不可超过5s。对于复杂的查询,比如说多跳,运行时间可能会超过5s,从而触发超时导致提交失败。 使用Cypher的dbms.killQuery过程可以终止Cypher事务(详见Cypher API-函数和过程), 并回滚这条Cypher请求造成的所有改动。