读取字段名称并检测文本文件的数据类型以创建表

时间:2014-01-24 02:50:21

标签: mysql sql

我想在终端中将一个大文本文件上传到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。如果有很多字段,则相当耗时。

当然有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我认为MySQL不会直接为你做这件事,但如果你有很多列,那么手动创建表结构会很痛苦。

您可能希望以编程方式构建数据定义语言(DDL)语句,可以是数据库外部的某种语言,也可以是SQL。您可以编写一些逻辑来自动确定字段的类型并相应地设置列类型,或者可能愿意在任何地方放置VARCHAR(WIDTH)列。

另外,我假设当你说“文本文件”时,它是一个类似CSV格式的文件,其中的字段以某种方式分隔(具有特定的分隔符)。这也是能够轻松加载表格的先决条件。

顺便提一下,如果这只是大型工作的一部分,或者您经常要做的事情,您可能想要四处寻找“ETL工具”。他们可能会为你提供一种不那么痛苦的方法。

修改

请注意,这些方法中的任何一种本身就存在风险:您要么希望算法查看足够的数据来推断列的正确类型,要么根本不需要任何数据类型(这是很重要的)部分验证)。

我自动听到了一些关于MS Access的战争故事,并且根据文件的头部错误地从数据中推断出数据类型,但是正确识别该类型的异常被深埋在文件中。

除非这是一次性的案例,否则你可能想要经历正确输入列的痛苦,以便以后节省更多的痛苦。

感谢Dan Bracuk提请注意这个警告。