SPARK KUDU 复杂更新语句直接或通过 Impala JDBC 驱动程序可能吗?

SPARK KUDU Complex Update statements directly or via Impala JDBC Driver possible?

如果我看一下 Imapala Shell 或 Hue,我可以为 KUDU 编写足够复杂的 IMPALA 更新语句。例如。用 sub-select 更新什么不是。很好

查看旧的 JDBC 连接方法,例如 mySQL 通过 SPARK / SCALA,通过这种连接进行复杂更新的可能性不大,那就是可以理解。但是,有了 KUDU,我认为情况发生了变化。

查看有关 KUDU 的文档 - Apache KUDU - Developing Applications with Apache KUDU,以下问题:

  1. 不清楚我是否可以通过 IMPALA JDBC 驱动程序从 SPARK / SCALA 环境发出复杂的更新 SQL 语句(由于 KUD​​U 的安全问题)。
  2. 在 SPARK KUDU 本机模式 DML 中似乎与使用 INSERT 和 UPSERT 的数据帧方法相关联。如果我只想写一个自由格式的 SQL DML 语句,比如 UPDATE 怎么办?我看到我们可以使用 Spark SQL 将 INSERT(默认情况下视为 UPSERT)插入 Kudu table。例如

    sqlContext.sql(s"INSERT INTO TABLE $kuduTableName SELECT * FROM source_table")
    
  3. 我对 SPARK SQL INSERT ... 的理解是 KUDU table 也必须是临时的 table。我不能直接接近它。那么,综上所述,我们如何在 SPARK 中直接处理 KUDU table?我们不能在 SPARK / KUDU 中,通过 SPARK SCALA / KUDU 或 SPARK SCALA 通过 Impala JDBC 连接到 KUDU 的复杂 UPDATES 语句也不允许这样做。我注意到,在某些情况下,我可以通过 shell 使用保存的环境变量编写脚本来做一些事情。

这方面的文档多么糟糕。

DML 插入、更新...可以通过下面的 "approach" 实现,一些示例:

stmt.execute("update KUDU_1 set v = 'same value' where k in ('1', '4')  ;") 
stmt.execute("insert into KUDU_1 select concat(k, 'ABCDEF'), 'MASS INSERT' from KUDU_1  ;") 

如果使用相应的 stmt.executequery,唯一会返回一个 Java 结果集,这与从 JDBC 来源读取并保存结果的更标准方法不同。给我一个小惊喜。可能需要 2 种方法,一种用于更常规的 selects,另一种用于非 select 的工作 DML。不确定这是否可以全部在同一个程序模块中。下一次。是的,可以。