【问题标题】:odbc impala bad writing performanceodbc impala 写入性能不佳
【发布时间】:2016-06-06 15:36:07
【问题描述】:

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

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

或使用多个插入:

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

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

[Cloudera][SQLEngine] (31580) 语句长度超过最大值:16384。

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

谢谢

【问题讨论】:

  • 您正在读取记录的文件类型是什么?
  • 如何通过 ODBC 执行后一个示例?

标签: c# odbc impala


【解决方案1】:

我认为您需要不同的方法来做到这一点。 IE。不要通过 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 ...

【讨论】:

  • 谢谢,它运行良好并提高了我的应用程序的性能。
猜你喜欢
  • 1970-01-01
  • 2020-10-21
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
相关资源
最近更新 更多