如何像我们在 hive 中一样为每个 id 分区 MySQL table

How to partition MySQL table for every id just like we do in hive

在我们的应用程序中,我们为每个查询构建一个唯一的查询 ID,并根据此查询 ID 插入到 table。 我们曾经为此使用 Hive,这很容易;

create table hivetable (
...
)PARTITIONED BY ( query_id INT ) ...

插入到 table 是这样的:

alter table hivetable add partition (query_id=?);
insert into hivetable  partition(query_id=?) select ...;

现在我们要迁移到 MySQL,我很困惑。我在下面尝试 table 并像这样插入:

create table mytable (...)  PARTITION BY HASH(query_id);

insert into mysql values(?,?,...,<query_id>);

显然它没有以我想要的方式工作。它将所有 query_ids 的数据插入一个分区中。 所以我真的很感激一些帮助 谢谢

这里是关于如何使用 Mysql Partitions 的文档。下面是一个使用哈希的例子。

警告: 如果不包含 PARTITIONS 子句,分区数默认为 1。

    CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT,
    store_id INT
)
PARTITION BY HASH(store_id)
PARTITIONS 4;

请勿使用 MySQL 的 PARTITIONing 完成此任务。只需让唯一的 query_id 成为 PRIMARY KEY。然后 INSERT tblUPDATE tblSELECT ... FROM tbl,视情况而定。

最后索引对我来说效果很好。由于固定到 select、删除操作,我们想像 Hive 分区一样使用 smth。我发现 MySQL 中的索引非常符合我们的需求。如果您索引您使用 where 语句的列,它将很好地固定您的查询。您可以在以下 link 中找到更多信息:https://dev.mysql.com/doc/refman/8.0/en/create-index.html