0

我的表中有 100 多列,有些可以为空。我想从一个txt文件输入。因此,某些行可能没有全部 100 个奇数条目。

例如,我的文本文件中的一行可能有大约 50 个条目,由一个“制表符”分隔,但我如何指定这 50 个条目必须从 100 多列中组成哪些列?

我已经阅读了有关 LOAD DATA INFILE 的信息,但我仍然对我的问题感到困惑。任何帮助表示赞赏。


假设文本文件是:
Toby, LA
Carl, 246

,我希望结果表是:
Toby NULL LA
Carl 246 NULL
我该怎么做?

4

2 回答 2

0

需要组织文本文件,使其具有一致的列集。如果您在一行中有 50 个制表符分隔的值,然后在下一行中有 100 个制表符分隔的值,那么您将永远无法将数据干净地加载到 MySQL 中。

在文本文件中仍然需要考虑缺失值,使用空字符串、NULL 等来表示缺失值。

如果您的表中有一些包含 NULL 值的现有数据,那么您可以将该数据的子集转储到磁盘,以获得在制表符分隔的文件中格式化缺失值的正确方法的示例:

select *
into outfile '/tmp/test.tsv'
FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
from your_table
limit 1000
于 2013-04-04T19:59:13.487 回答
0

使用此指令:

LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'

这是您的txt的路线:

'/tmp/test.txt' 

您将 txt 转储到名为 test 的表上。

您的 txt 应具有以下结构:

Toby, 245, LA
Carl, 246, CA

对于这样的结果:

Toby NULL LA 
Carl 246 NULL 

txt 应该是这样的:

Toby, NULL, LA 
Carl, 246 , NULL 

那是因为未指定 FIELD SCAPED BY。

来自 Mysql 文档:

NULL 值的处理因使用的 FIELDS 和 LINES 选项而异:

对于默认的 FIELDS 和 LINES 值,NULL 被写入为 \N 的字段值用于输出,而 \N 的字段值被读取为 NULL 用于输入(假设 ESCAPED BY 字符为“\”)。

如果 FIELDS ENCLOSED BY 不为空,则将包含文字 NULL 作为其值的字段读取为 NULL 值。这与包含在 FIELDS ENCLOSED BY 字符中的单词 NULL 不同,后者被读取为字符串“NULL”。

如果 FIELDS ESCAPED BY 为空,则将 NULL 写入单词 NULL。由 ',' 分隔的 3 个字段 \n .....您的表测试应该具有相同的结构

于 2013-04-04T19:55:07.937 回答