odbc impala糟糕的写作表现

时间:2016-06-05 16:18:33

标签: c# odbc impala

我必须在c#中编写一个从文件中读取数十亿条记录的应用程序,然后通过IMPALA ODBC在Impala表上写入记录。我已经尝试使用带参数

的单个语句执行插入查询
INSERT INTO table VALUES (?,?,.....,?)

或使用多个插页:

INSERT INTO table VALUES (?,?,.....,?),(?,?,.....,?),...,(?,?,.....,?)

但是第一个非常慢并且在hdfs上为每个记录创建一个文件;第二个更快但查询很长,对于数十亿条记录,我收到以下错误:

  

[Cloudera] [SQLEngine](31580)陈述的长度超过最大值:16384。

考虑到我必须使用c#作为我的应用程序的语言,有人可以解决我的问题。

由于

1 个答案:

答案 0 :(得分:0)

我认为你需要采用不同的方法来做到这一点。即不要通过C#读取CSV只是为了将值发送到服务器。而是针对服务器发出命令以便为您读取文件。

首先,在数据库中为CSV文件创建一个表。您决定是否需要以编程方式或通过工具完成。然后使用LOAD DATA语句将CSV读入新表。然后使用INSERT INTO SELECT ...语句来操作新创建的表。

伪代码示例:

CREATE TABLE DataHeap(whatever the structure of your CSV is)
LOAD DATA INPATH 'HDFS-PATH-TO-CSV-FILE' INTO TABLE DataHeap
INSERT INTO YOUR-DESTINATION-TABLE SELECT whatever FROM DataHeap WHERE ...