odbc impala 写入性能差

odbc impala bad writing performance

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

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

或使用多个插入:

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

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

[Cloudera][SQLEngine] (31580) The length of the statement exceeds the maximum: 16384.

考虑到我必须使用 c# 作为我的应用程序的语言,有人对我的问题提出了一些解决方案。

谢谢

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

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

伪代码示例:

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 ...