Azure表存储MySQL在列中导入表名

时间:2016-08-21 01:19:19

标签: mysql azure azure-table-storage

我想知道是否可以保存我导入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数据库导入到自己的分区吗?

2 个答案:

答案 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表结构。

enter image description here

答案 1 :(得分:0)

如果要将每个源表插入到表存储中的自己的分区中,唯一的方法是确保源表中的所有实体都使用相同的分区键写入。您还提到您需要找出最初属于哪个源表的实体,因此在将该表中的实体写入azure表存储和构造时,您实际上没有多少选项可以使用源表名作为分区键一个行键,允许您在该分区中唯一标识该实体。

如果您的源表有很多实体,或者您希望它们在未来增长更多,那么这不是推荐的可扩展设计。您可以保持分区键唯一,并将源表名附加或添加到行键中,并使用分隔符作为替代。

另外,请注意,不要尝试将源表名添加为属性并在以后对其进行过滤,这是最糟糕的设计:)它将导致整个大型azure表中的表扫描。

关于某些实体上缺少属性的下一个问题,Azure表存储是一个NoSql数据库,因此如果您插入一个缺少属性或属性的实体但它们具有空值(即空字符串),则该实体将被写入没有该属性的azure表存储。从azure表服务的角度来看,您正在请求编写键值对的字典,而且服务并不关心或知道您在应用程序/客户端有哪些约束或模式。

当您回读实体时,可以使用Storage SDK将它们读作DynamicTableEntities或具体类型。