本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Neptune DFE 查询引擎中使用 Gremlin
如果您在实验室模式下启用名为 DFE 的 Neptunes 替代查询引擎(通过将neptune_lab_mode
数据库集群参数设置为DFEQueryEngine=enabled
),那么 Neptune 会将只读的 Gremlin 查询/遍历转换为中间逻辑表示形式,并尽可能在 DFE 引擎上运行它们。
但是,DFE 尚不支持所有 Gremlin 步骤。当无法在 DFE 上原生运行某个步骤时,Neptune 会退回来运行该步骤。 TinkerPop explain
和 profile
报告包含发生这种情况时的警告。
注意
从引擎版本 1.0.5.0 开始,当 DFE 遇到原生不支持的步骤时,它会退回到基础 TinkerPop 引擎上,而不是像以前那样使用海王星小精灵引擎。
步骤名称 | 描述 | 从发行版 # 开始可用 |
---|---|---|
asDate ()-step(地图)将字符串或数字输入转换为日期。 |
1.4.5.0 |
|
call () 步骤允许访问提供商特定的自定义服务和未内置在 Gremlin 核心语言中的操作,允许静态和动态参数传递。 |
1.4.5.0 |
|
DateAdd () 步骤在遍历中向 Date 对象添加指定数量的时间单位(如天、分钟)。 |
1.4.5.0 |
|
dateDiff () 步骤以纪元时间(秒)计算两个 Date 对象之间的时差。 |
1.4.5.0 |
|
fail () 步骤强制遍历停止,但出现异常,通常用于遍历中的调试和验证检查。 |
1.4.5.0 |
|
id () 步骤提取并返回遍历中图形元素(顶点、边或属性)的唯一标识符。 |
1.4.5.0 之前的版本 |
|
inject () 步骤允许在任何时候将对象任意插入到遍历流中,从而可以将非源自图形的值添加到遍历管道中。 |
1.4.5.0 |
|
label ()-step (*map*) 获取一个元素并从中提取其标签。 |
1.4.5.0 |
|
path () 步骤揭示了遍历器在遍历中移动的完整历史,显示了沿途遇到的元素和标签。 |
1.4.5.0 |
|
project () 步骤将当前对象转换为带有自定义键和值的 Map,允许使用指定的标签和转换灵活地重构数据。 |
1.4.5.0 |
|
repeat () 步骤允许使用 do-while 或 while-do 语义进行遍历循环,并使用可选的 emit () 和 until () 调制器来控制迭代行为和结果发射。 |
1.4.5.0 |
|
sack () 步骤使遍历器能够携带可在遍历期间操作的本地数据结构(麻袋),包括初始值选项、遍历器分支的拆分操作以及遍历器合并时的合并操作选项。 |
1.4.5.0 |
|
select () 步骤允许从遍历中选择性地检索已标记的步骤或对象,从而允许在计算和从复杂数据结构中提取特定元素时向后移动。 |
1.4.5.0 |
|
unfold () 步骤将迭代器、迭代器或映射扁平化为单个元素的线性流,从而简化遍历中的复杂数据结构。 |
1.4.5.0 |
|
disjunct () 步骤计算传入列表和提供的列表之间的唯一元素,返回出现在任一列表中但不是同时出现在两个列表中的元素。 |
1.4.5.0 |
|
drop () 步骤从图形中移除元素(顶点、边或属性),但由于它既是过滤操作,又是副作用操作,因此不会产生任何输出。 |
1.4.5.0 |
|
identity ()-step (*map*) 是一个将当前对象映射到自身的标识函数。 |
1.4.5.0 |
|
intersect () 步骤在传入的列表遍历器和提供的列表参数之间查找公共元素,仅返回两个列表中都出现的元素。 |
1.4.5.0 |
|
length () 步骤计算传入字符串或列表的长度,并提供使用局部作用域处理单个元素的选项。 |
1.4.5.0 |
|
loops ()-step (*map*) 提取遍历器经过当前循环的次数。 |
1.4.5.0 |
|
merge () 步骤合并集合(列表或地图),同时消除重复项,要求传入的遍历器和参数都必须与集合类型相匹配。 |
1.4.5.0 |
|
mergeV () 步骤为顶点提供 “如果不存在则创建” 功能,允许通过 onCreate 和 onMatch 选项进行有条件的顶点创建和属性更新,同时支持单个属性和多属性。 |
1.4.5.0 |
|
barrier () 步骤将延迟遍历管道转换为批量同步管道,这对于强制执行顺序和启用批量优化以提高处理大量相似元素时的性能非常有用。 |
1.4.5.0 |
|
order () 步骤使用指定的比较标准和排序方向对遍历流中的遍历器进行排序。 |
1.4.5.0 |
|
range () step 筛选遍历器,仅允许指定数值范围内的遍历器通过遍历。 |
1.4.5.0 |
|
reverse () 步骤翻转列表中元素或字符串遍历器中字符的顺序。 |
1.4.5.0 |
|
sample () 步骤从遍历流中随机选择指定数量的遍历器,可以选择使用权重来影响选择概率。 |
1.4.5.0 |
|
cap () 步骤从遍历中发出命名的副作用,可以单独发出,也可以作为多个副作用的地图,充当先处理所有先前步骤的屏障步骤。 |
1.4.5.0 |
|
split () 步骤根据指定的分隔符或空格将字符串分成子字符串列表。 |
1.4.5.0 |
|
filter () 步骤有选择地允许遍历器根据布尔条件通过,移除那些计算结果为 false 的遍历器。 |
1.4.5.0 之前的版本 |
|
flatMap () 步骤通过将对象转换为迭代器,然后将其扁平化为遍历流,从而将每个遍历器转换为多个遍历器。 |
1.4.5.0 |
|
map () 步骤在映射操作中将每个遍历器从一个对象转换为另一个对象。 one-to-one |
1.4.5.0 |
|
sideEffect () 步骤在不修改遍历器的情况下对遍历器执行操作,从而允许原始遍历器继续遍历。 |
1.4.5.0 |
|
union () 步骤合并了来自多个遍历的结果,允许并行执行不同的路径并将它们的输出组合成一个流。 |
1.4.5.0 |
步骤名称 | 描述 | 从发行版 # 开始可用 |
---|---|---|
aggregate () 步骤将遍历中特定点的对象收集到副作用集合中,具有全局(急切)或局部(懒惰)评估选项,并且能够使用 by () 应用转换。 |
1.4.5.0 |
|
combine () 步骤将两个列表合并为一个,同时保留重复项,将传入的列表遍历器与提供的列表连接起来。 |
1.4.5.0 |
|
count () 步骤计算流中遍历器的数量,当与局部作用域一起使用时,可以选择对集合或地图元素进行本地计数。 |
1.4.5.0 |
|
dedup () 步骤从流中删除重复的遍历器,并提供基于遍历路径中的特定标签或属性进行重复数据删除的选项。 |
1.4.5.0 之前的版本 |
|
fold () 步骤将所有遍历器收集到一个列表中,或者使用 reduce 函数将它们聚合,从而创建一个屏障,在发出结果之前处理所有对象。 |
1.4.5.0 |
|
group () 步骤根据指定的键和值标准将遍历器组织成组,从而创建一个地图,其中键对值进行分组,值是匹配元素的列表。 |
1.4.5.0 |
|
GroupCount () 步骤计算遍历中对象的出现次数,创建了一个地图,其中键是对象,值是它们的计数,并带有自定义分组条件的选项。 |
1.4.5.0 |
步骤名称 | 描述 | 从发行版 # 开始可用 |
---|---|---|
移动到不是从中移动的顶点的顶点。 |
1.4.5.0 之前的版本 |
|
从边缘移动到传入或传出的顶点。 |
1.4.5.0 |
|
ElementMap () 步骤将图形元素(顶点或边)转换为包含其属性 IDs、标注和连通性信息的地图表示。 |
1.4.5.0 |
|
元素 () 步骤在图形结构中从属性移动到其父元素(顶点、边或 VertexProperty)。 |
1.4.5.0 |
|
V ()-step 旨在从图中读取顶点,通常用于开始 a GraphTraversal,但也可以在中间遍历中使用。 |
1.4.5.0 之前的版本 |
|
移动到与顶点相连的传出或传入顶点,或者同时移动到传出顶点和传入顶点。 |
1.4.5.0 之前的版本 |
步骤名称 | 描述 | 从发行版 # 开始可用 |
---|---|---|
properties () 步骤从遍历中的元素中提取属性对象,允许访问属性值及其元数据。 |
1.4.5.0 之前的版本 |
|
key ()-step (*map*) 获取一个属性并从中提取密钥。 |
1.4.5.0 |
|
PropertiesMap ()-step 生成元素属性的 Map 表示形式。 |
1.4.5.0 |
|
property () 步骤添加或修改图形元素的属性,支持顶点的单值和多值属性、属性映射、基数规范和元属性。 |
1.4.5.0 |
|
值 ()-step (*map*) 获取一个属性并从中提取值。 |
1.4.5.0 |
步骤名称 | 描述 | 从发行版 # 开始可用 |
---|---|---|
and ()-step 可确保所有提供的遍历都产生结果 (*filter*)。 |
1.4.5.0 |
|
coalesce ()-step 按顺序评估提供的遍历,并返回发出至少一个元素的第一个遍历。 |
1.4.5.0 |
|
要随机筛选出遍历器,请使用 coin ()-step (*filter*)。提供的双重参数偏向了 “掷硬币”。 |
1.4.5.0 |
|
has () step 根据元素属性、标签和筛选遍历器 IDs,支持各种比较谓词,并允许使用属性存在性、值和标签进行复杂的筛选条件。 |
1.4.5.0 之前的版本 |
|
index () 步骤为集合中的元素分配数字索引,并提供将结果输出为列表(元素、索引)或地图(索引:element)的选项。 |
1.4.5.0 |
|
is () step 根据相等性或谓词比较筛选遍历中的标量值,同时支持直接值匹配和复杂条件。 |
1.4.5.0 |
|
local () 步骤对流中的单个对象执行遍历操作,而不是对整个流执行遍历操作,这样可以进行特定对象的处理,但需要谨慎使用减少步骤。 |
1.4.5.0 |
|
none () 步骤过滤掉遍历流中的所有对象,这对于仅生成副作用且不需要返回结果的遍历很有用,尤其是在远程执行场景中。 |
1.4.5.0 |
|
not () 步骤会过滤掉所提供的遍历参数返回结果的遍历器,从而在遍历中有效地实现了逻辑 NOT 操作。 |
1.4.5.0 |
|
or () 步骤允许遍历器在提供的遍历参数中至少有一个产生结果时通过,从而在过滤中实现逻辑 OR 运算。 |
1.4.5.0 |
|
where () 步骤根据遍历器的当前状态或路径历史记录筛选遍历器,通常与 match () 或 select () 步骤一起使用,并且支持基于谓词和基于遍历的筛选条件。 |
1.4.5.0 之前的版本 |
步骤名称 | 描述 | 从发行版 # 开始可用 |
---|---|---|
concat () 步骤将字符串或遍历结果连接到传入的字符串遍历器,从而允许在遍历中灵活组合字符串。 |
1.4.5.0 |
|
lTrim () 步骤在遍历中从字符串值中删除前导空格,并在集合上使用局部作用域选项并保留空值。 |
1.4.5.0 |
|
rTrim () 步骤在遍历中从字符串值中删除尾随空格,并在集合上使用局部作用域选项并保留空值。 |
1.4.5.0 |
|
substring () 步骤使用起始索引和可选的结束索引提取字符串的一部分,同时支持正索引和负索引,并在集合上提供局部范围选项。 |
1.4.5.0 |
|
toLower () 步骤在遍历中将字符串值转换为小写字母,在集合上使用局部作用域选项并保留空值。 |
1.4.5.0 |
|
toupper () 步骤在遍历中将字符串值转换为大写字母,在集合上使用局部作用域选项并保留空值。 |
1.4.5.0 |
|
trim () 步骤在遍历中从字符串值中删除前导和尾随空格,保留空值并为非字符串输入抛出异常。 |
1.4.5.0 |
步骤名称 | 描述 | 在引擎版本中发布 |
---|---|---|
比较谓词提供了比较运算符(eq、neq、lt、lt、lte、gt、gt),用于根据相等性和数值比较过滤遍历。 |
1.4.5.0 |
|
within () 和 with () 谓词分别检查给定对象集合中是否存在一个值。 |
1.4.5.0 |
|
TextP 谓词提供字符串匹配操作(endingWith、containg、、、notCon notStartingWith taing) notEndingWith,用于比较遍历中的文本模式。 |
1.4.5.0 |
|
P 为复杂条件组合和遍历中的间隔检查提供了逻辑运算符(和、或)和范围谓词(介于、外部、内部)。 |
1.4.5.0 |
注意
从引擎版本 1.0.5.0 开始,当 DFE 遇到原生不支持的步骤时,它会退回到基础 TinkerPop 引擎上,而不是像以前那样使用海王星小精灵引擎。
限制
使用限制重复,DFE 中尚不支持重复遍历内的标签和重复数据删除。
// With Limit inside the repeat traversal g.V().has('code','AGR').repeat(out().limit(5)).until(has('code','FRA')) // With Labels inside the repeat traversal g.V().has('code','AGR').repeat(out().as('a')).until(has('code','FRA')) // With Dedup inside the repeat traversal g.V().has('code','AGR').repeat(out().dedup()).until(has('code','FRA'))
尚不支持带有嵌套重复项或分支步骤的路径。
// Path with branching steps g.V().has('code','AGR').union(identity, outE().inV()).path().by('code') // With nested repeat g.V().has('code','AGR').repeat(out().union(identity(), out())).path().by('code')
查询计划交错
当转换过程遇到没有相应原生 DFE 运算符的 Gremlin 步骤时,在回退到使用 Tinkerpop 之前,它会尝试查找其它可以在 DFE 引擎上原生运行的中间查询部分。它通过将交错逻辑应用于顶级遍历来实现这一点。结果是尽可能使用支持的步骤。
任何此类中间、非前缀的查询转换在 explain
和 profile
输出中都使用 NeptuneInterleavingStep
来表示。
为比较性能,您可能需要关闭查询中的交错功能,同时仍使用 DFE 引擎来运行前缀部分。或者,您可能只想使用 TinkerPop 引擎执行非前缀查询。您可以通过使用 disableInterleaving
查询提示执行该操作。
正如值为 false
的 useDFE 查询提示完全阻止在 DFE 上运行查询一样,值为 true
的 disableInterleaving
查询提示会关闭查询转换的 DFE 交错。例如:
g.with('Neptune#disableInterleaving', true) .V().has('genre','drama').in('likes')
更新了 Gremlin explain
和 profile
输出
Gremlin explain 提供有关 Neptune 用来运行查询的优化遍历的详细信息。有关启用 DFE 引擎时 explain
输出内容的示例,请参阅 DFE explain 输出示例。
Gremlin profile API 运行指定的 Gremlin 遍历,收集有关运行的各种指标,并生成 Profile 报告,其中包含有关优化查询计划的详细信息以及各种运算符的运行时系统统计数据。有关启用 DFE 引擎时 profile
输出内容的示例,请参阅 DFE profile 输出示例。
注意
由于 DFE 引擎是在实验室模式下发布的实验特征,因此 explain
和 profile
输出的确切格式可能会发生变化。