odbc impala写性能差

goucqfw6  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(427)

我必须用c语言编写一个应用程序,从文件中读取数十亿条记录,然后通过impala odbc在impala表中写入记录。我已经尝试使用带有参数的单个语句执行insert查询

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

或使用多个插入:

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

但是firs非常慢,并且为每个记录在hdfs上创建一个文件;第二个更快,但查询非常长,对于数十亿条记录,我收到以下错误:
[cloudera][sqlengine](31580)语句长度超过最大值:16384。
考虑到我的应用程序必须使用c语言,有人对我的问题有一些解决方案。
谢谢

tcomlyy6

tcomlyy61#

我认为你需要不同的方法来做这件事。i、 e.不要通过c读取csv,而只是将其中的值发送到服务器。而是对服务器发出命令来读取文件。
首先,为数据库中的csv文件创建一个表。您可以决定这是需要通过编程方式还是通过工具来完成。然后用 LOAD DATA 语句放入新表中。然后使用 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 ...

相关问题