如何使用 Apache Impala 进行插入(如果不存在)?

Posted

技术标签:

【中文标题】如何使用 Apache Impala 进行插入(如果不存在)?【英文标题】:How can I do INSERT IF NOT EXISTS using Apache Impala? 【发布时间】:2017-05-16 16:30:00 【问题描述】:

有没有人知道有没有办法解决

INSERT IF NOT EXISTS 

Apache Impala 中?

我知道 INSERT OVERWRITE,但它不适合我正在处理的用例。

谢谢。

【问题讨论】:

这是什么查询? INSERT VALUES? [以前从未见过这种语法] -- 或 INSERT SELECT WHERE NOT EXISTS (sub-query) [标准 SQL]? 我使用的语法只是一个示例,这是我获取 sql 示例的完整查询: INSERT INTO table (columns...) VALUES (...) WHERE NOT EXISTS ( SELECT *从 ....); (SQL 示例)我的问题的目的是了解是否可以在 Impala 上重现此逻辑,而不是语法本身。 所以您想使用专为批处理处理而设计的数据框架,一次插入一行 ——老实说,这似乎有点愚蠢。如果您需要实时键/值访问,您可以使用 HBase。或者 Kudu,使用 Java API (类似于 HBase API,高级) 我正在批量插入数千行。 "thousands of rows" 在 1980 年很大... Parquet 格式预计每个 HDFS 文件存储多个“行组”,我引用:"我们建议使用大行组 (512MB - 1GB)" - 表示压缩(字典编码)和/或压缩(例如 Snappy)后的 1 GB。那么,您为每个 JDBC 批处理创建的“行组”的实际大小是多少? 5MB?? >>parquet.apache.org/documentation/latest 【参考方案1】:

Impala 不支持这一点,至少在使用 HDFS 时是这样,因为需要主键。如果你可以使用Impala+Kudu,支持主键,INSERT IF NOT EXISTS可以通过插入和忽略错误来实现。

【讨论】:

谢谢。如果我要继续使用 Impala,我想 Kudu 是要走的路。缺乏 CRUD 操作确实是一个障碍。

以上是关于如何使用 Apache Impala 进行插入(如果不存在)?的主要内容,如果未能解决你的问题,请参考以下文章

有人知道在使用 impala 时如何选择数据模型吗?

Apache Impala(五) Impala数据导入方式

还在MapReduce?真正的并行计算引擎——Apache Impala你需要了解这些

如何使用 apache spark 访问从 impala 创建的 apache kudu 表

终于!Apache Hudi与Impala完成整合

Apache Impala:如何创建临时内存表?