2

更新:添加了一个示例来阐明数据的格式。

考虑每行格式如下的 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

这些表将使用行号作为除了上述任何列之外必须创建的键来相互关联。

  1. 有没有办法mysql load data infile将数据加载到两个单独的表中?
  2. 如果不是,什么 Unix 命令行工具最适合这个?
4

2 回答 2

1

不,不直接。加载数据只能插入到一张表或分区表中。

您可以做的是将数据加载到临时表中,然后用于insert into将各个列选择到 2 个最终表中。substring_index如果您对 tbl2 的值使用不同的分隔符,您可能还需要。行号由临时表中的自动递增列处理(最简单的方法是使自动列在临时表定义中最后)。

格式不是很清楚,最好用/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
于 2010-01-24T22:07:14.600 回答
1

正如您所说,有问题的部分是每行中声明的 [tbl2.col1:tbl2.col2] 对的未知数量。我很想通过以下方式解决这个问题sed:将一个文件分成两个文件,每个表一个文件。然后您可以使用load data infile将每个文件加载到其对应的表中。

于 2010-01-24T22:35:48.167 回答