如何在Azure Cosmos DB中导入Graph数据库的数据?

时间:2017-07-10 17:34:44

标签: azure azure-cosmosdb

文档表明,只有在将数据导入Azure Cosmos DB以便与DocumentDB API一起使用而不是使用表API或图谱API时,才能使用数据迁移工具。那么,有没有办法从其他来源导入数据以在CosmosDB图形数据库中使用?

2 个答案:

答案 0 :(得分:0)

通过下载Graph API演示项目

,我抓住了这种变化

https://github.com/Azure-Samples/azure-cosmos-db-graph-dotnet-getting-started

然后使用文本文件,手动构建查询:

--INIT
--g.V().drop()


--CREATE
------
--vertex
g.addV('person').property('id', 'dave').property('firstName', 'Dave').property('lastName', 'Andersen').property('age', 49)
g.addV('person').property('id', 'mary').property('firstName', 'Mary').property('lastName', 'Andersen').property('age', 39)
--edge
g.V('dave').addE('knows').to(g.V('mary'))


--READ
--filter
--g.V().hasLabel('person').order().by('firstName', decr)
--project
--g.V().hasLabel('person').values('firstName')
--traverse
--g.V('thomas').outE('knows').inV().hasLabel('person')
--loop
--g.V('thomas').repeat(out()).until(has('id', 'robin')).path()
--g.V().count()
--g.E().count()


--UPDATE
--------
--g.V('thomas').property('age', 44)


--DELETE
--dropedge
--g.V('thomas').outE('knows').where(inV().has('id', 'mary')).drop()
--dropvertex
--g.V('thomas').drop()

然后从代码中循环显示:

string queriesPath = AppDomain.CurrentDomain.BaseDirectory + "queries.txt";

            var queries = File.ReadAllLines(queriesPath).Where(l => !l.StartsWith("--") && !string.IsNullOrWhiteSpace(l));

            foreach (var query in queries)
            {
                Console.WriteLine("Running " + query);

                IDocumentQuery<dynamic> gremlinQuery = client.CreateGremlinQuery<dynamic>(graph, query);
                while (gremlinQuery.HasMoreResults)
                {
                    foreach (dynamic result in await gremlinQuery.ExecuteNextAsync())
                    {
                        Console.WriteLine($"\t {JsonConvert.SerializeObject(result)}");
                    }
                }

                Console.WriteLine();
            }

答案 1 :(得分:0)

对于图形api,它取决于您使用的数据库。

  • 对于neo4j,有这个回购:https://github.com/bsherwin/neo2cosmos
  • 对于arangodb,我能够使用数据迁移工具将顶点和边的集合上传为json,然后你可以编写一个简单的存储过程来连接连接顶点。

我被困在查询图表集合的位置(似乎不支持),所以我们可以在同一个集合中上传边缘和顶点并使用脚本来创建边缘