将Azure表存储迁移到Cosmos DB

时间:2017-06-09 14:48:08

标签: azure azure-table-storage azure-data-factory azure-cosmosdb

是否有可用的工具将Azure Table存储迁移到Cosmos DB以使用Table API进行访问?我发现Data Migration Tool但它只支持通过Document API访问表存储。

更新:我尝试将数据工厂复制数据功能从表存储复制到文档数据库(我猜它现在是cosomosDb)。但它并没有将任何数据复制到Cosmos DB,尽管Data Factory管道说它复制了大量的数据,但我没有看到Target Cosmos Db Table中的任何实体。

迁移到Cosmos DB并使用Table API的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

  

迁移到Cosmos DB并使用Table API的最佳方法是什么?

如果我理解正确,您希望将Azure表存储迁移到Cosmos表API DB。如果是这种情况并且可以使用程序,我们可以使用Azure提供的Windows Azure Storage Premium Table SDK来实现。这是一个预览版。以下是我的演示代码,它可以正常工作。

1.我们需要实现 TableEntity 并添加我们的自定义属性。属性为private static final char[] VOWELS = { 'a', 'e', 'i', 'o', 'u' }; public boolean startsWithVowel(String s) { char first=s.charAt(0); for (char c : VOWELS) if (c==first) return true; return false; }

case sensitive

2.添加获取表格功能

    public class CustomerEntity : TableEntity
    {

        public CustomerEntity() { }
        public Type tableEntityProperty { get; set; } 
        ...
    }

3.尝试从Azure存储表中查询表实体,并将其添加到Azure cosmos表。

public static CloudTable GetTable(string connectionstring,string tableName)
        {
            CloudStorageAccount destStorageAccount = CloudStorageAccount.Parse(connectionstring);
            CloudTableClient destTableClient = destStorageAccount.CreateCloudTableClient();
            CloudTable destTable = destTableClient.GetTableReference(tableName);
            destTable.CreateIfNotExists();
            return destTable;
        }

packages.config

  var sourceConnectionString = "DefaultEndpointsProtocol=https;AccountName=storageName;AccountKey=yourkey;EndpointSuffix=core.windows.net";
  var destConnectionstring = "DefaultEndpointsProtocol=https;AccountName=cosmostableAPIAccount;AccountKey=yourkey;TableEndpoint=https://tomtableapi.documents.azure.com";

  CloudTable sourceTable = GetTable(sourceConnectionString, "source table");
  CloudTable destTable = GetTable(destConnectionstring, "dest table");
  TableQuery<CustomerEntity> query = new TableQuery<CustomerEntity>();

     foreach (CustomerEntity entity in sourceTable.ExecuteQuery(query))
     {
          TableOperation insertOperation = TableOperation.Insert(entity);
          // Execute the insert operation.
          destTable.Execute(insertOperation);
     }