更新:添加了一个示例来阐明数据的格式。
考虑CSV格式,每行格式如下:
tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5,[tbl2.col1:tbl2.col2]+
其中[tbl2.col1:tbl2.col2] +表示可能有任意数量的这些对重复
例如:
tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2
这些表将使用行号作为关键字彼此相关,除了上面提到的任何列之外,还必须创建该键。
mysql load
data infile
加载数据
两个单独的表?答案 0 :(得分:1)
您可以做的是将数据加载到临时表中,然后使用insert into
选择2个最终表中的各列。如果您对tbl2的值使用不同的分隔符,则可能还需要substring_index
。行号由登台表中的自动递增列处理(最简单的方法是在登台表定义中使自动列最后)。
格式不是很清楚,最好用perl / php / python完成,但如果你真的想使用shell工具:
cut -d , -f 1-5 file | awk -F, '{print NR "," $0}' > table1
cut -d , -f 6- file | sed 's,\:,\,,g' | \
awk -F, '{i=1; while (i<=NF) {print NR "," $(i) "," $(i+1); i+=2;}}' > table2
这将创建包含以下内容的table1和table 2文件:
1,tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5
2,tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5
3,tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5
和
1,tbl2.col1,tbl2.col2
1,tbl2.col1,tbl2.col2
2,tbl2.col1,tbl2.col2
2,tbl2.col1,tbl2.col2
3,tbl2.col1,tbl2.col2
3,tbl2.col1,tbl2.col2
答案 1 :(得分:1)
如你所说,有问题的部分是每行中声明的[tbl2.col1:tbl2.col2]对的未知数量。我想通过sed
来解决这个问题:将一个文件拆分成两个文件,每个文件一个。然后,您可以使用load data infile
将每个文件加载到相应的表中。