我的表中有100多列,有些可以为null。我想从txt文件输入。因此,某些行可能没有全部100个奇数条目。
例如,我的文本文件中的一行可能有大约50个由“制表符”分隔的条目,但是如何指定这些50个条目必须从100多个列中生成哪些列?
我读过
LOAD DATA INFILE但我仍然对我的问题感到困惑。任何帮助表示赞赏。
假设文本文件是:
托比,洛杉矶,卡尔,246
我希望得到的表格是:
Toby NULL LA
Carl 246 NULL
我该怎么做?
答案 0 :(得分: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 ...你的表测试应该具有相同的结构
答案 1 :(得分: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