如何从闪亮写入 bigquery 表?

Posted

技术标签:

【中文标题】如何从闪亮写入 bigquery 表?【英文标题】:How do I write to a bigquery table from shiny? 【发布时间】:2016-10-28 18:53:07 【问题描述】:

我正在尝试编写一个闪亮的应用程序,该应用程序将文件作为输入并将该文件中的数据上传到 bigquery 表中,在该表中会执行一些其他操作。就将数据导入我的应用程序而言,一切似乎都运行良好,但是当我尝试将数据上传到 bigquery 时,什么也没有发生。没有错误消息,什么都没有。

我可以自己运行代码,它执行得很好。我在弄清楚如何创建可重现的示例时遇到了一些麻烦,因为您无法写入公共数据集,但我在下面包含了我的代码。

附加信息:

工作目录包含我的 .httr-oauth 文件 数据在我闪亮的应用程序中可见

如果我可以添加一些内容以使这个问题更容易回答,请告诉我。谢谢。

############# UI ############
#

library(shiny)

shinyUI(fluidPage(

  # Application title
  titlePanel("Upload"),

  # Sidebar with a slider input for number of bins
  sidebarLayout(
    sidebarPanel(
      fileInput('list', 'Choose file to upload',
                accept = c(
                  'text/csv',
                  'text/comma-separated-values',
                  '.csv'
                )),
      tags$hr(),
      textInput('sql', 'Or give a query to get the customer_ids you want'),
      tags$hr(),
      actionButton('go', 'Go')
    ),

    # Show a plot of the generated distribution
    mainPanel(
      tableOutput('log')
    )
  )
))


############# server ##############

### setting up the environment
library(shiny)
library(data.table)
library(bigrquery)

### setting up the constants
project <- 'xxxxxxx'
dest_dataset <- 'temp'
dest_table <- 'custs_hash'
cd <- 'CREATE_IF_NEEDED'
wd <- 'WRITE_TRUNCATE'

options(shiny.maxRequestSize = 100*1024^2)


shinyServer(function(input, output) 

  logs <- eventReactive(input$go, 
    inFile <- input$list
    dat <- fread(inFile$datapath)
    dat <- head(dat)
    return(list(dat = dat))
  )

  upload <- eventReactive(input$go, 
    data <- dat()$dat
    ins <- insert_upload_job(project, dataset = dest_dataset, table = dest_table, values = data,
                            create_disposition = cd, write_disposition = wd)
    return(list(ins = ins))
  )

  output$log <- renderTable(logs()$dat)

)

【问题讨论】:

我没有看到 upload eventReactive 在您的代码中的任何地方使用/调用。 我不确定您所说的 upload eventReactive 是什么意思。这是一个特殊的功能吗?服务器中的日志功能能够检索输入文件并将其加载到我的闪亮会话中。是一样的吗? 你有upload &lt;- eventReactive(...)。请注意,除非您使用 upload() 调用它,否则 eventReactive 不会自行运行。 logs 起作用的原因是因为您在 renderTable 中调用了它 哦。谢谢你。我显然不明白这一点。我调用了该上传功能,它现在运行良好。非常感谢。 @warmoverflow - 你能发表你的评论作为答案吗? OP - 然后应该接受答案:) 【参考方案1】:

eventReactive 返回一个反应式表达式对象。像其他反应对象一样,您需要像函数一样明确地调用它。否则它不会自己运行。

所以在你的情况下,你有upload &lt;- eventReactive(...),那么你需要使用upload()来调用它。

【讨论】:

以上是关于如何从闪亮写入 bigquery 表?的主要内容,如果未能解决你的问题,请参考以下文章

闪亮:从具有多个值的 textInput 中子集表

DT::datatable - 选择要删除的行并写入没有闪亮的 csv

如何将闪亮的输入值转换为闪亮的输出表

将数据写入闪亮应用程序的不同目录

使用 purrr::pwalk 从 tibble 创建多个闪亮的 observeEvents

编辑表时如何使用数据表在闪亮表中创建下拉列表?