我正在使用sparklyr中的spark_write_table函数将表写入HDFS,使用partition_by参数定义如何存储它们:
INSERT INTO TABLE mytable
PARTITION (col1 = 'my_partition')
VALUES (myvalues..)
但是,现在我想通过改变一个分区来更新表,而不是再次写整个表。
在Hadoop-SQL中,我会做类似的事情:
StackNavigator
-StackNavigator
-TabNavigator
--Tab1
---Route 1 (Stack) (initial)
---Route 2 (Stack)
--Tab2
---Route 3 (Stack) (initial)
---Route 4 (Stack)
是否有相同的选项在sparklyr中正确执行此操作?我在文档中找不到它。
重复重复说明:这个问题具体是关于使用sparklyr函数在R中执行此操作的方法,而另一个问题是关于一般Hive语法
答案 0 :(得分:0)
感谢大家的评论。
似乎没有办法直接用sparklyr做这个,但这就是我要做的。
简而言之,我将新分区文件保存在临时表中,使用Hadoop SQL命令删除分区,然后使用另一个SQL命令将临时表插入其中。
> dbGetQuery(con,
"ALTER TABLE mytable DROP IF EXISTS PARTITION (mycol='partition1');")
> spark_write_table(new_partition, "tmp_partition_table")
> dbGetQuery(con,
"INSERT VALUES INTO TABLE mytable
PARTITION (mycol='partition1')
SELECT *
FROM tmp_partition_table "
)