【问题标题】:Adding row to redshift table rather than replacing table向红移表添加行而不是替换表
【发布时间】:2017-07-19 21:58:02
【问题描述】:

我使用替换表命令将以下数据发送到 redshift - 是否有命令向表中添加新行而不是替换整个数据?

PipelineSimulation<-matrix(,42,7)
PipelineSimulation<-as.data.frame(PipelineSimulation)
PipelineSimulation[1,1]<-"APAC"
PipelineSimulation[1,2]<-"Enterprise"
and so on through
PipelineSimulation[42,3]<-"Commit"
PipelineSimulation[42,4]<-"Upsell"
PipelineSimulation[42,5]<-NAMEFURate
PipelineSimulation[42,6]<-mean(NFUEntTotals)
PipelineSimulation[,7]<-Sys.time()

然后我用它进入红移

library(RPostgres)
library(redshiftTools)
library(RPostgreSQL)
library("aws.s3")
library("DBI")
drv<-dbDriver('PostgreSQL')
con <- dbConnect(RPostgres::Postgres(), host='bi-prod-dw-
instance.cceimtxgnc4w.us-west-2.redshift.amazonaws.com', port='5439', 
dbname= '***', user="***", password="***", sslmode='require')
query="select * from everyonesdb.jet_pipelinesimulation_historic;"
result<-dbGetQuery(con,query)
print (nrow(result))
Sys.setenv("AWS_ACCESS_KEY_ID" = "***",
       "AWS_SECRET_ACCESS_KEY" = "***",
       "AWS_DEFAULT_REGION" = "us-west-2")
b=get_bucket(bucket = 'bjnbi-bjnrd/jetPipelineSimulation')
rs_replace_table(PipelineSimulation, con, 
tableName='everyonesdb.jet_pipelinesimulation_historic', bucket='bjnbi-
bjnrd/jetPipelineSimulation',split_files =2)

因此,我想保留旧数据,而不是 rs_replace_table,如果可能的话,只需将新行添加到现有表中

【问题讨论】:

    标签: r amazon-redshift


    【解决方案1】:

    来自How to bulk upload your data from R into Redshift

    rs_replace_table 截断目标表,然后从数据框中完全加载它,只有在您不关心它保存的当前数据时才这样做。

    另一方面,rs_upsert_table 替换具有重合键的行,并插入表中不存在的行。

    使用rs_upsert_table 代替rs_replace_table 能解决您的问题吗?

    【讨论】:

    • 如何为此定义重合键?
    • 用户在rs_upsert_table 中将重合键定义为rs_upsert_table(my_other_data, dbcon=con, tableName = 'mytable', bucket="mybucket", keys=c('id', 'date'))。在这种情况下,重合键将是具有相同 id 和日期值的行。
    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    相关资源
    最近更新 更多