2012-12-11 113 views
0

我们目前已经由管道分隔的文本,它具有格式mysqlimport可以接受JSON输入吗?

field1:value1|field2:value2|...|fieldN:valueN\n 
field1:value1|field2:value2|...|fieldN:valueN\n 
etc. 

我有进口商脚本(bash中运行的Perl,然后mysqlimport的),目前从年初消除了几句话的某些日志每行,然后在生成的文本文件上运行mysqlimport。

我们正在将我们的日志升级到输出JSON的数据服务。导入器脚本仍然会将该JSON的内容导入到MySQL数据库表中。这感觉像不好的形式采取这个漂亮的JSON,并将其转换为管道分隔文件与mysqlimport使用 - 但我有任何选择?我在mysql文档或论坛中找不到任何东西。

+0

事实证明,mysqlimport有很好的日志输出,我们的脚本使用下游来提供状态电子邮件。我不愿意接触到这个过程的更多部分,而我正在添加JSON。毕竟,我实际上是将JSON解析为管道分隔文件,以便与mysqlimport一起使用。 – barclay

回答

0

我宁愿转换的固体JSON平等固体,兼容SQL multiline insert statement一个mysqldump的:使用VALUES语法可以插入多行

INSERT语句。为此,请包含多个列值列表,每个列表值都包含在括号内,并用逗号分隔。例如:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 

由于您使用Perl脚本无论如何,这应该不会造成太大的问题。

+0

这是我觉得非常愚蠢的事情之一,我没有想到这个我自己。谢谢。 – barclay

0

只是一个友好的批评:对我来说,这是不好的转换:

  • JSON字符串 - >管道分隔的数据 - >到管道分隔解析器 - >数据库或
  • json文本字符串 - >到管道分隔的数据 - >到管道分隔符 - >到数组 - >到数据库。

管道分隔的支持比json字符串小。

最好的办法是将数据保存在json字符串中。

然后,你可以用任何你喜欢的编程语言来解析它。例如,把它放在一个数组中。然后,相应地将每个数组保存在数据库中。

,如果这是你的公司使用,他们已经有一个管道分隔的解析器,如果他们已经正在建设一个,或者是你很难认为(无论不可能的方式情况下,说服他们)。那么,最好的办法就是坚持一会儿。

如果你有时间,你自己,你可以可以建立自己的

  • JSON解析器 - >数组 - >数据库应用程序。
  • json parser - >到数据库应用程序。 (根据关键和价值)

这很容易。