javascript - NodeJs 基于 CSV 输入创建动态 mySql 表

标签 javascript mysql node.js csv

我正在尝试构建一个执行以下操作(简化)的应用程序:

  1. 允许用户选择 CSV 文件
  2. 将该 CSV 上传到 NodeJS 服务器
  3. 解析文件并创建行数组(带标题)
  4. 根据 csv 中的列标题生成动态“创建表”sql,同时检测数据类型(列名称、数据类型等每次都会不同)
  5. 将 csv 数据插入到新创建的表中

我在第 4 步遇到了麻烦。有没有办法扫描数据元素数组并确定数据类型应该是什么?

我看过 Papa Parse 和 csv-parse 但都没有达到我的需要。 Papa Parse 虽然很接近,但它单独转换每个数组元素并且不获取日期。

最佳答案

即使您运行完整的文件扫描,也很难猜测确切的类型。

另一个问题是处理输入文件中的错误,例如列中的数字,应存储日期。

进一步:保险号(或帐号)是一个数字,但在数据库中应该存储为字符串。

我向您推荐一种直接来自大数据分析的方法。

分 3 个阶段运行整个过程:首先创建一个中间表,其中每列的类型为 Text 并使用 mysq 将数据导入其中:LOAD DATA INFILE ...

根据用户之前的选择、列名、内容分析进行初步分析,为用户展示表格的“向导”。 (或跳过显示向导)

分析应包括最短、最长、平均和最常见长度的计算(例如,前 100 行包含长字符串,错误消息为:未提供某些过程的某些日期 和其他均为有效日期);各种值(性别、国家、其他“字典”值);随机内容分析(检测日期和数字)

最后,您可以使用 INSERT INTO ... SELECT,更改列类型(不要忘记允许 NULL 来处理转换错误)或逐行转换和过滤操作。

//编辑

呃,我以为你的文件有几GB。在内存中加载大文件是没有意义的。

当然,您可以使用库来读取 CSV 并在内存中分析它,而不是使用 MySQL 中的临时表。但无论如何你都无法避免内容分析。没有什么可隐藏的 - 无需高级人工智能系统的自动分析效果一般。

如果您发现了一些可以检测数据类型的东西,您可以在它的基础上进行构建。也有帮助,我可以成为 tablesorter parsers .

关于javascript - NodeJs 基于 CSV 输入创建动态 mySql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54648485/

相关文章:

javascript - 通过 props 将父组件的当前状态传递给子组件

javascript - 更新 beforeShowDay 中的日期选择器工具提示

mysql - 如何执行 "on delete row from ` user`,用该用户名删除 `message` 中的所有内容”?FK 还是触发器?

php - 将php日期转换为mysql格式

javascript - 为什么javascript `for`循环会快速静音/取消静音视频

javascript - 使用 Javascript 垂直居中 div(可变高度)

mysql - MYSQL中,如何根据查询中未指定的参数汇总查询结果?

javascript - typescript 符号异步函数作为类型/接口(interface)属性

node.js - Sequelize-typescript 包含多对多仅包含多个结果之一

javascript - 不知道如何等待 Promise