当前位置: 首页 > 知识库问答 >
问题:

从CSV中创建具有正确列类型的SQL表

党建义
2023-03-14
  1. 读取CSV文件。
  2. 基于记录子集(10-100行?),迭代地检查每行的每列,以自动确定CSV中数据的正确列类型。因此,如果第1行A列的值为12345(int),但第2行A列的值为ABC(varchar),系统将根据在前两次传递中找到的数据的组合自动确定它应该是varchar(5)格式。只要用户认为有必要确定列的可能类型和大小,这个过程就可以进行多少次。
  3. 按照CSV的列检查定义构建CREATE TABLE查询。
  4. 执行create table查询。
  5. 将数据加载到新表中。

SQL、PostgreSQL和Python中是否已经存在类似的工具,或者应该使用另一个应用程序来完成此操作(类似于pgAdmin3)?

共有1个答案

孔厉刚
2023-03-14

看来你需要预先了解结构。只要读第一行就知道你有多少列。

CSV不携带任何类型信息,因此必须从数据的上下文中推导出来。

改进之前稍微错误的答案,您可以创建一个包含x个文本列的临时表,用数据填充它,然后处理这些数据。

BEGIN;
CREATE TEMPORARY TABLE foo(a TEXT, b TEXT, c TEXT, ...) ON COMMIT DROP;
COPY foo FROM 'file.csv' WITH CSV;
<do the work>
END;
 类似资料:
  • 假设我有一个使用CustomObject列表的API操作。对于这些对象中的每一个,它都会调用一个创建Mono的服务方法。如何以一种惯用的无阻塞方式从这些单一对象创建流量? 我现在想到的是这个。我更改了方法名称,以更好地反映它们的预期目的。 此外,我需要订阅通量才能真正让它返回一些东西吗?

  • 我目前有一个表,定期从提供的CSV导入数据。问题是,我有6个数据类型为Decimal(5,2)的列,并且可以为空,当我导入一个不报告任何数字的文件时,这些逗号中显示为“,,,,,,,,,,,,,,,,,,”通常是我希望导入到表中的数字。 当SSIS尝试导入这些“空白”csv时,我得到以下错误 错误:2014-08-04 23:45:01.31代码:0xC020901C来源:数据流任务OLE DB

  • 问题内容: 在我的spring项目中,我的Dao类具有以下模板: 我的每个Dao类都具有以下结构: 这意味着当我调用方法findById,findByField,findAll时,我应该从Usuario,Usuario和List类型接收对象。 这两个拳头类的返回正确值,但最后一个不返回。当我运行此方法时(从我的服务类中): 我应该看到“ usuario”时收到“对象”作为响应。有人可以告诉我我在做

  • 如果我有一个单文件Vue类组件,例如: 然后我把它导入其他地方,得到一个实例。 使用标准Vue CLI 3设置,这会出现错误,因为它包含,内容如下: 据我所知,这意味着每当您编写导入Foo时,将只是的别名,您将无法访问其成员。 如果您从文件导入,情况似乎确实如此。如果您从文件导入,它会神奇地工作! 不幸的是,我所有的测试都是文件,因此我无法导入任何组件的类型。这使得测试变得困难。有办法解决这个问题

  • 为了优化存储,在任何情况下均应使用最精确的类型。例如,如果列的值的范围为从1到99999,若使用整数,则MEDIUMINT UNSIGNED是好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。 用精度为65位十进制数(基于10)对DECIMAL列进行所有基本计算(+、-、*、/)。参见11.1.1节,“数值类型概述”。 使用双精度操作对DECIMAL值进行计算。如果准确度不是太重要或如