如何使用 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 进行插入(如果不存在)?的主要内容,如果未能解决你的问题,请参考以下文章
还在MapReduce?真正的并行计算引擎——Apache Impala你需要了解这些