1

如果我查看 Imapala Shell 或 Hue,我可以为 KUDU 编写足够复杂的 IMPALA 更新语句。例如用子选择更新什么的。美好的。

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

查看关于 KUD​​U - Apache KUDU - 使用 Apache KUDU 开发应用程序的文档,以下问题:

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

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

1 回答 1

0

在这方面多么糟糕的文档。

DML 插入,更新,......可能通过下面的“方法”,一些例子:

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 种方法,一种用于更常规的选择,一种用于 DML 非选择。不确定这是否可以全部在同一个程序模块中。再来一次。是的,它可以。

于 2017-11-09T17:19:21.997 回答