我想在终端中将一个大文本文件上传到MySQL。
我发现这篇SO帖子的答案解释了它:import text file into mysql workbench?
似乎必须首先在MySQL中创建一个与.txt文件列标题具有相同字段标题的表,并且必须首先确定每个字段数据类型。
链接的SO示例中的答案给出了:
CREATE TABLE `tablename` (
`FEATURE_ID` int(11) unsigned NOT NULL,
`FEATURE_NAME` varchar(512) DEFAULT NULL,
`FEATURE_CLASS` varchar(512) DEFAULT NULL,
PRIMARY KEY (`FEATURE_ID`)
)
我的问题是,不是必须先创建要在sql中加载的表,我不能告诉mySQL“读取文本文件并从第一行开头创建每列的字段。查看每一列数据并神奇地确定它是什么数据类型,例如FEATURE_ID` int(11)unsigned NOT NULL。如果有很多字段,则相当耗时。
当然有更好的方法吗?
答案 0 :(得分:1)
我认为MySQL不会直接为你做这件事,但如果你有很多列,那么手动创建表结构会很痛苦。
您可能希望以编程方式构建数据定义语言(DDL)语句,可以是数据库外部的某种语言,也可以是SQL。您可以编写一些逻辑来自动确定字段的类型并相应地设置列类型,或者可能愿意在任何地方放置VARCHAR(WIDTH)
列。
另外,我假设当你说“文本文件”时,它是一个类似CSV格式的文件,其中的字段以某种方式分隔(具有特定的分隔符)。这也是能够轻松加载表格的先决条件。
顺便提一下,如果这只是大型工作的一部分,或者您经常要做的事情,您可能想要四处寻找“ETL工具”。他们可能会为你提供一种不那么痛苦的方法。
修改强>
请注意,这些方法中的任何一种本身就存在风险:您要么希望算法查看足够的数据来推断列的正确类型,要么根本不需要任何数据类型(这是很重要的)部分验证)。
我自动听到了一些关于MS Access的战争故事,并且根据文件的头部错误地从数据中推断出数据类型,但是正确识别该类型的异常被深埋在文件中。
除非这是一次性的案例,否则你可能想要经历正确输入列的痛苦,以便以后节省更多的痛苦。
感谢Dan Bracuk提请注意这个警告。