在 java 上将 csv 文件加载到 GreenPlum 失败

Posted

技术标签:

【中文标题】在 java 上将 csv 文件加载到 GreenPlum 失败【英文标题】:Loading csv file to GreenPlum failed on java 【发布时间】:2016-03-29 16:36:01 【问题描述】:

我正在尝试将 csv 文件导入 GreenPlum DB,

它正在使用来自 psql 控制台(9.4.0,服务器 8.2.15)的以下命令

\COPY data."TableName" FROM 'D:/Document.csv' DELIMITER ',' CSV;

但是当我从我的 java 代码中尝试它时失败了:

public boolean InsertFile(Path tempFile, FileDetails file) 
   try
       Connection conn =  GetConnectionString();

       String cmd = "\\COPY data.\"TableName\" FROM 'D:/Document.csv' DELIMITER ',' CSV;";

       Statement st = conn.createStatement();
       int res = st.executeUpdate(selectCmd);

       conn.close();
       return true;
   
   catch(Exception e)
       return false;
   

例外是由于反斜杠(\)导致的语法错误

【问题讨论】:

你能把错误贴在这里吗? 【参考方案1】:

COPY 有两个不同的变体,COPY 和\COPY:COPY 是基于服务器的,\COPY 是基于客户端的。如果您只是尝试不带反斜杠的 COPY,它应该可以工作。

public static void main(String[] args) throws Exception 
    String url = "jdbc:postgresql://localhost:54380/gpadmin";
    Properties props = new Properties();
    props.setProperty("user","gpadmin");
    props.setProperty("password","changeme");
    Connection conn = DriverManager.getConnection(url, props);

    String cmd = "COPY timeout FROM '/tmp/timeout.csv' DELIMITER ',' CSV;";

    Statement st = conn.createStatement();
    int res = st.executeUpdate(cmd);
    System.out.println(res);

    conn.close();

这对我来说非常有效。

【讨论】:

不幸的是,这意味着我需要将文件上传到我想避免的服务器。

以上是关于在 java 上将 csv 文件加载到 GreenPlum 失败的主要内容,如果未能解决你的问题,请参考以下文章

如何在前端(TS、React)上将 CSV 转换并下载到 XLSX

如何在 Postgresql 上将表格导出为带有标题的 CSV?

在 iOS 上将数据导出到 XLS(不是通过 CSV)

在命令行上将 XLS 转换为 CSV

尝试在 DBFS 上将 Spark Dataframe 以 CSV 格式保存到磁盘

在 postgres 上将表导出为 CSV,而无需使用“文本到列”