我想知道是否可以保存我导入Azure Table Storage的表的名称?是否可以将具有相同列结构的多个数据库导入Azure表存储?
我在购买Azure Table Storage之前就问过这个问题我只是想确保它适用于我需要做的任何事情。
更新: 所以我有一个包含大约500个表的数据库,它们都有相对相同的列用户名,电子邮件,哈希,盐,名称,IP等...有些表只有用户名和电子邮件,而其他表或多或少。但是,最后所有表都具有完全相同的列拼写。我想创建一个包含所有列的Azure表存储。然后导入所有表。缺少列的SO表只会在它们没有的列中具有空值。但我想将表名导入一列。因此,如果导入table1,则一列将被命名为“Database Name”,table1的名称将在其中,依此类推。
更新2: 那么有可能做这样的事情。正如
中here所见 CustomerEntity customer1 = new CustomerEntity("Harp", "Walter");
customer1.Email = "Walter@contoso.com";
customer1.PhoneNumber = "425-555-0101";
我想要
WebsiteEntity website1 = new WebsiteEntity("Google");
website1.Username = "username1"
website1.email = "email@gmail.com"
我想我所说的是可以将我导入的表名放到上面显示的WebsiteEntity中吗?而且如果在导入的SQL表中,它会自动创建.username和.email?像专栏一样。因此,表1包含列用户名和电子邮件,并且名为Google,因此在导入网站实体时将是Google,并且将自动创建website1.username和website1.email。
先谢谢你,我对此很新。
更新3: 经过进一步的研究,我的问题是我可以将每个表从MySQL数据库导入到自己的分区吗?
答案 0 :(得分:0)
每个azure表实体都有分区键和行键,实体的分区和行键唯一地标识表中的实体。我们可以使用MySQL表名作为分区键,并使用MySQL主键作为行键。这样我们就可以使用分区键来了解我们实体的位置。
例如,如果在MySQL中有一个名为User的表,则创建一个实体
public class UserEntity : TableEntity
{
public UserEntity(string tablename, string primarykey)
{
this.PartitionKey = "User";
this.RowKey = primarykey;
}
public UserEntity() { }
public string UserName { get; set; }
public string Email { get; set; }
}
并创建Person for MySQL人员表。
public class PersonEntity : TableEntity
{
public UserEntity(string tablename, string primarykey)
{
this.PartitionKey = "Person";
this.RowKey = primarykey;
}
public PersonEntity() { }
public string UserName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
然后我们从MySQL读取数据。并使用MySQL中的值创建实体,插入Azure表。请参阅this article以了解如何开始使用Azure表。
以下是Azure Storage Explorer的结果。我们可以从" Person"中知道第一个实体。 MySQL表和第二个实体来自" User" MySQL表。这是一个简单的成就。如果您有特殊要求,请创建新的Azure表结构。
答案 1 :(得分:0)
如果要将每个源表插入到表存储中的自己的分区中,唯一的方法是确保源表中的所有实体都使用相同的分区键写入。您还提到您需要找出最初属于哪个源表的实体,因此在将该表中的实体写入azure表存储和构造时,您实际上没有多少选项可以使用源表名作为分区键一个行键,允许您在该分区中唯一标识该实体。
如果您的源表有很多实体,或者您希望它们在未来增长更多,那么这不是推荐的可扩展设计。您可以保持分区键唯一,并将源表名附加或添加到行键中,并使用分隔符作为替代。
另外,请注意,不要尝试将源表名添加为属性并在以后对其进行过滤,这是最糟糕的设计:)它将导致整个大型azure表中的表扫描。
关于某些实体上缺少属性的下一个问题,Azure表存储是一个NoSql数据库,因此如果您插入一个缺少属性或属性的实体但它们具有空值(即空字符串),则该实体将被写入没有该属性的azure表存储。从azure表服务的角度来看,您正在请求编写键值对的字典,而且服务并不关心或知道您在应用程序/客户端有哪些约束或模式。
当您回读实体时,可以使用Storage SDK将它们读作DynamicTableEntities或具体类型。