将数据从文件加载到特定的mysql分区

时间:2015-08-06 20:46:15

标签: mysql

我的系统每小时生成一个.tsv文件,以突出显示过去一小时内访问过的目录。该文件有以下格式的~100,000行:

dirName    parentDirHashcode    dirHashcode    numAccesses

我一直在尝试以编程方式将这些文件加载​​到mysql表中,但我想在表中添加一些额外的数据 - 表示日期的日期列(例如20150730)和表示该表的小时列小时(例如21)。

Apache Hive中,可以通过对表格进行分区(按日期,然后按小时)来完成 - 有没有办法在mysql中执行此操作?

我尝试了load data local infile 'file.tsv' into table newTable, date=20150730, hour=21但是没有用:(

如果有帮助,newTable的架构为(dirName varchar(1024), parentHash int, hash int, accesses bigint, date int, hour int)

2 个答案:

答案 0 :(得分:0)

您可以指定所需的任何额外字段:

LOAD DATA INFILE ...
INTO table newTable (dirname, parenthash, hash, ...)
SET date=curdate(), hour=hour(now())

答案 1 :(得分:0)

基于@ marc-b的回答,我最终做到了这一点:

CREATE TABLE newTable (dirname VARCHAR(1024), parentHash INT, hash INT, accesses BIGINT, date INT, hour INT)
    PARTITION BY RANGE (hour)
    SUBPARTITION BY HASH (date)
    SUBPARTITIONS 31 (
        PARTITION p0 VALUES LESS THAN (6),
        PARTITION p1 VALUES LESS THAN (12),
        PARTITION p2 VALUES LESS THAN (18),
        PARTITION p3 VALUES LESS THAN MAXVALUE
    );

LOAD DATA LOCAL INFILE 'file.tsv' INTO TABLE newTable (dirName, parentHash, hash, accesses)
    SET date=20150730, hour=12;

像魅力一样工作。