我正在尝试获取存储为图表
substring
中的 attribute
的字段 edge
。更具体地说 company-company edges
我已附上图形创建查询。
g.addV('company').property(id,'SHRTST01').property('name','Alphabet').next()
g.addV('company').property(id,'SHRTST02').property('name','Google').next()
g.addV('company').property(id,'SHRTST03').property('name','Youtube').next()
g.addV('company').property(id,'SHRTST05').property('name','YoutubeKids').next()
g.addV('person').property(id,'SHRTST01_1900-01-01_1_1').property('bu_id', 'SHRTST01_1900-01-01_1_1').property('name', 'W Karl David Laxton').next()
g.addV('person').property(id,'SHRTST02_1900-01-01_1_1').property('bu_id', 'SHRTST02_1900-01-01_1_1').property('name', 'Steven H Strong').next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('SHRTST01')).to(__.V('SHRTST01_1900-01-01_1_1')).property(id,'SHRTST01_HAS_SHRHLDING_PC_TO_SHRTST01_1900-01-01_1_1').property('perc_value', 30).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('SHRTST01')).to(__.V('SHRTST01_1900-01-01_1_1')).property(id,'SHRTST01_HAS_VOTING_PC_TO_SHRTST01_1900-01-01_1_1').property('perc_value', 50).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('SHRTST01')).to(__.V('SHRTST02')).property(id,'SHRTST01_HAS_SHRHLDING_PC_TO_SHRTST02_2002-01-01_2_2').property('perc_value', 75).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('SHRTST01')).to(__.V('SHRTST02')).property(id,'SHRTST01_HAS_VOTING_PC_TO_SHRTST02_2002-01-01_2_2').property('perc_value', 50).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('SHRTST02')).to(__.V('SHRTST02_1900-01-01_1_1')).property(id,'SHRTST02_HAS_SHRHLDING_PC_TO_SHRTST02_1900-01-01_1_1').property('perc_value', 25).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('SHRTST02')).to(__.V('SHRTST02_1900-01-01_1_1')).property(id,'SHRTST02_HAS_VOTING_PC_TO_SHRTST02_1900-01-01_1_1').property('perc_value', 23).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('SHRTST02')).to(__.V('SHRTST03')).property(id,'SHRTST02_HAS_SHRHLDING_PC_TO_SHRTST03_2002-01-01_2_2').property('perc_value', 80).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('SHRTST02')).to(__.V('SHRTST03')).property(id,'SHRTST03_HAS_VOTING_PC_TO_SHRTST02_2003-01-01_2_2').property('perc_value', 20).next()
g.addE('HAS_SHRHLDING_PC_TO').from(__.V('SHRTST03')).to(__.V('SHRTST05')).property(id,'SHRTST03_HAS_SHRHLDING_PC_TO_SHRTST05_2002-01-01_2_2').property('perc_value', 75).next()
g.addE('HAS_VOTING_PC_TO').from(__.V('SHRTST03')).to(__.V('SHRTST05')).property(id,'SHRTST03_HAS_VOTING_PC_TO_SHRTST05_2002-01-01_2_2').property('perc_value', 30).next()
下面的查询为我提供了以下输出,但我需要进一步完善它才能获得预期的输出。
g.V('SHRTST01').as('crn')
.repeat(
outE('HAS_SHRHLDING_PC_TO').as('edge_field')
.inV()
.simplePath())
.until(not(outE()))
.emit()
.hasLabel('company')
.select('crn','edge_field')
.project('crn', 'edge_field')
.by(select(keys).select('crn'))
.by(select(keys).select('edge_field'))
实际产量:
{'crn': v[SHRTST01], 'edge_field': e[SHRTST01_HAS_SHRHLDING_PC_TO_SHRTST02_2002-01-01_2_2][SHRTST01-HAS_SHRHLDING_PC_TO->SHRTST02]}
{'crn': v[SHRTST01], 'edge_field': e[SHRTST02_HAS_SHRHLDING_PC_TO_SHRTST03_2002-01-01_2_2][SHRTST02-HAS_SHRHLDING_PC_TO->SHRTST03]}
{'crn': v[SHRTST01], 'edge_field': e[SHRTST03_HAS_SHRHLDING_PC_TO_SHRTST05_2002-01-01_2_2][SHRTST03-HAS_SHRHLDING_PC_TO->SHRTST05]}
预期输出:
{'crn': v[SHRTST01], 'edge_field': [SHRTST01_HAS_SHRHLDING_PC_TO_SHRTST02_2002-01-01_2_2], 'shr_id':[SHRTST02_2002-01-01_2_2]}
{'crn': v[SHRTST01], 'edge_field': [SHRTST02_HAS_SHRHLDING_PC_TO_SHRTST03_2002-01-01_2_2], 'shr_id':[SHRTST03_2002-01-01_2_2]}
{'crn': v[SHRTST01], 'edge_field': [SHRTST03_HAS_SHRHLDING_PC_TO_SHRTST05_2002-01-01_2_2], 'shr_id':[SHRTST05_2002-01-01_2_2]}
我不确定,我怎样才能得出
shr_id
。正如您所看到的,shr_id
是substring
的edge_field
。任何有关这方面的线索都会非常有帮助。
我也有兴趣知道是否有更好的方法来处理用例。
谢谢。
最新版本的 Apache TinkerPop (3.7.1) 向 Gremlin 语言添加了许多新的字符串和列表操作。一旦 Amazon Neptune 升级到 Gremlin 级别,您将能够轻松执行
substring
之类的操作。在那之前,在应用程序中执行此操作可能是最简单的。
长期以来,这一直是 Gremlin 的一个空白(许多历史原因),但很高兴看到它现在得到解决。
此处讨论了这些新步骤:https://github.com/apache/tinkerpop/blob/3.7.1/CHANGELOG.asciidoc#release-3-7-1