只需“INSERT INTO”即可有效过滤 .sql 文件

只需“INSERT INTO”即可有效过滤 .sql 文件

有几次,我发现自己处理的数据已导出到.sql我想要处理的文件中,而不是导入到数据库中。

我只谈论“纯数据”sql 文件。那些除了INSERT INTO声明之外什么也没有的。 (他们可能在顶部有一些我可以忽略的序言。)

通常,文件将有许多以 开头INSERT INTO和结尾的行,其间将以 开头、以 结尾并以 分隔的;可变数量的“记录” 。每个“记录”将由固定数量的“字段”组成,这些“字段”也用 分隔。(),,

过滤器应该去掉所有 SQL 语句、分隔符、终止符等。它应该每行只输出一个“记录”,每个“字段”之间用逗号或制表符分隔。

在我看来,它应该是完全微不足道和常见的,它一定已经被实现了很多次。但我似乎永远无法找到现有的工具或脚本。

我通常尝试在 Perl 中通过将其),(视为记录分隔符来解决这个问题,\n但我总是陷入恼人的细节中。

有没有人得到(或可以制作)一个非常简单的脚本来执行此操作?我不在乎它是否是 bash、sed、awk、Perl、Python 等。

这是一些真实的示例数据。我已将其更改为每行只有几条记录。实际文件在到达;并开始下一个之前,每行/语句大约有一百万个字符。

INSERT INTO `categorylinks` VALUES
(0,'Wikisaurus','RunJobs.php','2008-01-27
03:10:30','','','page'),(8,'Wiktionary','TEXT OF THE GNU FREE
DOCUMENTATION LICENSE','2011-01-26
23:50:34','','uppercase','page'),(12,'Wiktionary','WHAT WIKTIONARY IS
NOT\nWHAT WIKTIONARY IS NOT','2011-04-10 18:22:23','What Wiktionary is
not','uppercase','page'),(12,'Wiktionary:Help','WHAT WIKTIONARY IS
NOT\nWHAT WIKTIONARY IS NOT','2011-04-10 18:22:23','What Wiktionary is
not','uppercase','page'); INSERT INTO `categorylinks` VALUES
(2184,'Swedish_nouns','RELIGION','2011-01-06
00:04:41','','uppercase','page'),(2184,'Translations_to_be_checked_(Albanian)','RELIGION','2007-01-27
08:16:34','','uppercase','page'),(2184,'Translations_to_be_checked_(Bulgarian)','RELIGION','2007-01-27
08:16:34','','uppercase','page');

输出会是这样的。字段是否被引用可能并不重要。逗号或制表符分隔并不重要。不过,需要正确转义逗号。

 0,'Wikisaurus','RunJobs.php','2008-01-27 03:10:30','','','page'
 8,'Wiktionary','TEXT OF THE GNU FREE DOCUMENTATION LICENSE','2011-01-26 23:50:34','','uppercase','page'
 12,'Wiktionary','WHAT WIKTIONARY IS NOT\nWHAT WIKTIONARY IS NOT','2011-04-10 18:22:23','What Wiktionary is not','uppercase','page'
 12,'Wiktionary:Help','WHAT WIKTIONARY IS NOT\nWHAT WIKTIONARY IS NOT','2011-04-10 18:22:23','What Wiktionary is not','uppercase','page'
 2184,'Swedish_nouns','RELIGION','2011-01-06 00:04:41','','uppercase','page'
 2184,'Translations_to_be_checked_(Albanian)','RELIGION','2007-01-27 08:16:34','','uppercase','page'
 2184,'Translations_to_be_checked_(Bulgarian)','RELIGION','2007-01-27 08:16:34','','uppercase','page'

我通常使用的数据是维基百科和维基词典转储的一部分。

答案1

这将是微不足道的:

1)导入SQL数据存入 SQL 数据库

2) 使用任何现有的 SQL 工具以您想要的格式输出数据。例如 SELECT INTO OUTFILE

这完全是可以编写脚本的。如果存在速度问题,请获取更快的硬件,尤其是驱动器。如果你绝对想用其他语言来解析它,你可能会发现自己编写了一个完整的 SQL 解析器,只是为了处理所有引号/大括号/保留字等。虽然这绝对是可行的,但我不认为它是微不足道的。

相关内容