可以直接或通过Impala JDBC Driver实现SPARK KUDU复杂更新语句吗?

时间:2017-11-08 11:24:46

标签: apache-spark impala apache-kudu

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

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

查看有关KUDU的文档 - Apache KUDU - 使用Apache KUDU开发应用程序,以下是以下问题:

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

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

1 个答案:

答案 0 :(得分: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。不确定是否可以在同一个程序模块中。再过一次。是的,它可以。