Как получить полный результат при запросе AWS Athena через пакет p aws в R? - PullRequest
0 голосов
/ 15 января 2020

Я пытался получить данные из Афины через пакет p aws в R. До сих пор я успешно выполнял запрос и возвращал некоторые результаты. Но я получаю максимальное значение по умолчанию, равное 1000. Я видел некоторые решения для библиотеки Boto3 в Python, но даже несмотря на то, что синтаксис схож, я могу вызвать функцию разбиения на страницы, как у Boto3.

Кто-нибудь знает, как сделать нумерацию страниц или как использовать следующий лексемный аргумент функции?

Вот как выглядит мой код:

SDK для подключения к AWS сервисам

install.packages('paws')
install.packages('tidyverse')

Создание объекта Athena:

athena <- paws::athena()

Написание запроса и указание выходного местоположения:

query <- athena$start_query_execution(QueryString = '
                                                    SELECT *
                                                    FROM db.table
                                                    LIMIT 100000
                                                    ',
                                       ResultConfiguration = list(OutputLocation =
                                                                  "s3://aws-athena..."
                                                                  )
                                      )

Выполнение запроса

result <- athena$get_query_execution(QueryExecutionId = query$QueryExecutionId)

Получение результата запроса:

output <- athena$get_query_results(QueryExecutionId = query$QueryExecutionId)

Разбор в таблицу объект

data <- dplyr::as_tibble(t(matrix(unlist(output$ResultSet$Rows),nrow = length(unlist(output$ResultSet$Rows[1])))))

colnames(data) <- as.character(unlist(data[1, ]))
data <- data[-1, ]

1 Ответ

0 голосов
/ 16 января 2020

Возможно, вы захотите рассмотреть пакет noctua. Этот пакет соединяет R с Афиной, используя p aws SDK (DBI Interface). Это решает проблему с ограничением в 1000 строк. Таким образом, ваш запрос будет выглядеть так:

library(DBI)

con = dbConnect(noctua::athena(), s3_staging_dir = "s3://aws-athena...")

dbGetQuery(con, "SELECT * FROM db.table LIMIT 100000")

Пакет также предлагает интеграцию в dplyr:

library(DBI)
library(dplyr)

con = dbConnect(noctua::athena(), 
                schema_name = "db", 
                s3_staging_dir = "s3://aws-athena...")

tbl(con, "table"))
...