2017-05-27 75 views
0
insert into sys.new_table select id + (select max(id) from sys.Old_table),name from sys.Old_table; 

通過這個,我們可以將insert數據從一個表格移動到另一個表格Oracle。我如何在Cassandra中寫這個查詢?如何使用cassandra中的另一個表選擇cassandra表?

Old_table 
    ID,Case Number,Date 
    8534426,HV210935,03/19/2012 12:00:00 PM 
    8534427,HV210768,12/16/2011 04:30:00 AM 

我怎樣才能insert數據爲new_tablenew_table.ID = Max(Old_table.ID)+Old_table.ID和其他數據作爲Old_table使用Cassandra?我可以使用上述語法在mysql中進行插入。

new_table 
    ID,Case Number,Date 
    8534428,HV210935,03/19/2012 12:00:00 PM 
    8534429,HV210768,12/16/2011 04:30:00 AM 

請不要暗示我,如果這可以使用Spark也得到解決。

回答

0

這可以使用spark-cassandra連接器完成。

基本的事情要做。

  1. 從oldTable中獲取數據。

  2. 獲取從數據幀

  3. 最大ID使用舊的數據幀創建新的數據幀。注意.withColumn應具有相同的列名id

例如代碼使用階:

val oldTable = sc.read.formt("org.apache.spark.sql.cassandr") 
       .options(Map("keyspace"->"sys","table"->"Old_table")) 
       .load() 

val maxId = oldTable.select(max("id")).collect()(0).getAs[Int](0) 

val newTable = oldTable.withColumn("id",lit(maxId).plus(col("id"))) 

newTable.write.format("org.apache.spark.sql.cassandr") 
     .options(Map("keyspace"->"sys","table"->"new_table")) 
     .save() 

這僅僅是一個示例代碼,其中SC是SQLContext/HiveContext。

根據您的數據大小,你可以在oldTable使用.cache() ..等

修改根據您的需要的代碼。

相關問題