我想知道是否可以保留我导入到Azure表存储中的表的名称?是否可以将具有相同列结构的多个数据库导入Azure Table Storage?
我在购买Azure Table Storage之前问这个问题,我只是想确保它能为我需要做的任何事情工作。
更新:所以我有一个大约500个表的数据库,它们都有相对相同的列Username,Email,Hash,Salt,Name,IP等。有些表格只有用户名和电子邮件,而有些表格则或多或少地有用户名和电子邮件。但是,所有的表最终都有完全相同的列拼写。我想创建一个包含所有列的Azure表存储。然后导入所有表。因此,缺少列的表在没有列的列中将只有null。但是我想将表名导入到列中。因此,如果导入table1,其中一列将被命名为“数据库名称”,表1的名称将在其中,依此类推。
更新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具有列username和email,并且名为Google,因此当导入websiteentity时,将是Google和website1.username和website1.email将自动创建。
非常感谢你,我是个新手。
更新3:在进一步研究之后,我的问题是,我可以将每个表从MySQL数据库导入到它自己的分区中吗?
发布于 2016-08-22 16:29:41
每个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; }
}并为MySQL Person表创建person。
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表结构。

发布于 2016-08-22 18:06:48
如果要将每个源表插入到表存储中各自的分区中,唯一的方法是确保源表中的所有实体都使用相同的分区键写入。您还提到,您需要找出哪个实体最初属于哪个源表,因此您没有太多选择,只能在将该表中的实体写入azure表存储时使用您的源表名称作为您的分区键,并构建一个允许您在该分区中唯一标识该实体的行键。
如果您的源表有很多实体,或者您希望它们在未来增长得更多,这不是推荐的可伸缩设计。例如,您可以保持分区键的唯一性,并使用分隔符将源表名称附加到行键或在行键前添加源表名称。
另外,请不要试图将源表名称添加为属性并在以后对其进行过滤,这是最糟糕的设计:)它将导致整个大azure表中的表扫描。
下一个关于某些实体上缺少属性的问题,Azure表存储是一个NoSql数据库,所以如果您插入一个缺少属性或属性的实体,但它们具有空值(即,.空字符串),则该实体将被写入没有该属性的azure表存储。从azure表服务的角度来看,您正在请求编写键值对的字典,这就是全部,服务不关心或不知道您在应用程序/客户端上有什么约束或模式。
当您读回实体时,您可以使用Storage SDK将它们读作DynamicTableEntities或具有具体类型。
https://stackoverflow.com/questions/39060059
复制相似问题