我的系统每小时生成一个.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)
。
答案 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;
像魅力一样工作。