Могу ли я выполнить запрос BigQuery SQL, а затем продолжить обработку данных с помощью dbplyr?

В другом проекте, работающем с Amazon Athena, я мог сделать это:

con <- DBI::dbConnect(odbc::odbc(), Driver = "path-to-driver", 
                 S3OutputLocation = "location", 
                 AwsRegion = "eu-west-1", AuthenticationType = "IAM Profile", 
                 AWSProfile = "profile", Schema = "prod")


tbl(con,
    # Run SQL query
    sql('SELECT *
    FROM TABLE')) %>%
  # Without having collected the data, I could further wrangle the data inside the database
  # using dplyr code
  select(var1, var2) %>%
  mutate(var3 = var1 + var2)

Однако теперь, используя BigQuery, я получаю следующую ошибку

con <- DBI::dbConnect(bigrquery::bigquery(),
                      project = "project")

tbl(con,
    sql(
      'SELECT *
    FROM TABLE'
    ))

Error: dataset is not a string (a length one character vector).

Любая идея, если с BigQuery невозможно сделать то, что я пытаюсь сделать?


person Fernando Torres    schedule 11.03.2021    source источник


Ответы (1)


Не пользователь BigQuery, поэтому не могу проверить это, но посмотрев этот пример кажется, что это не связано с тем, как вы отправляете запросы (%>%). Вместо этого похоже, что BigQuery не поддерживает получение tbl со строкой sql в качестве второго аргумента.

Так что, скорее всего, это сработает, когда второй аргумент - это строка с именем таблицы:

tbl(con, "db_name.table_name")

Но вы должны ожидать, что это не удастся, если второй аргумент имеет тип sql:

query_string = "SELECT * FROM db_name.table_name"
tbl(con, sql(query_string))

Другие вещи для тестирования:

  • Использование odbc::odbc() для подключения к BigQuery вместо bigquery::bigquery(). Проблема могла быть вызвана пакетом bigquery.
  • Второй подход без разговора с sql: tbl(con, query_string)
person Simon.S.A.    schedule 11.03.2021
comment
Спасибо за это. Я пытаюсь использовать пакет ODBC, но у меня проблемы с подключением - person Fernando Torres; 29.04.2021