Можете ли вы использовать Athena ODBC / JDBC для возврата местоположения результатов S3? - PullRequest
0 голосов
/ 12 июня 2018

Я использовал пакет metis для запуска запросов Athena через R. Несмотря на то, что это отлично подходит для небольших запросов, по-прежнему не представляется приемлемым решение для запросов с очень большими возвращаемыми наборами данных (10 тысяч строк, например).Однако при выполнении этих же запросов в консоли AWS очень просто и быстро использовать ссылку для загрузки, чтобы получить CSV-файл результата запроса.

Это заставило меня задуматься: есть ли механизм отправки запроса через R, но возвращающий / получающий местоположение сегмента S3://, в котором находятся результаты запроса вместо обычного объекта результатов?

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете посмотреть на Cloudyr Project .У них есть пакет , который обрабатывает создание запросов на подпись для API AWS.Затем вы можете запустить запрос, опрашивать AWS до его завершения (используя QueryExecutionID) и использовать aws.s3 для загрузки набора результатов.

Вы также можете использовать system () , чтобы использовать AWS CLI для выполнения запроса, ожидания результатов и загрузки результатов.

Например: Вы можете выполнить следующие команды в командной строке, чтобы получить результаты запроса.

$ aws athena start-query-execution --query-string "select count(*) from test_null_unquoted" --execution-context Database=stackoverflow --result-configuration OutputLocation=s3://SOMEBUCKET/ --output text XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Как только вы получите query-execution-id, вы можете проверить результаты.

$ aws athena get-query-execution --query-execution-id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX --output text QUERYEXECUTION select count(*) from test_null_unquoted XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX QUERYEXECUTIONCONTEXT stackoverflow RESULTCONFIGURATION s3://SOMEBUCKET/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.csv STATISTICS 104 1403 STATUS 1528809056.658 SUCCEEDED 1528809054.945

После успешного выполнения запросаВы можете загрузить данные.

$ aws s3 cp s3://stack-exchange/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.csv

Редактировать: Вы даже можете превратить эти команды в один слой (пример Bash здесь), но яуверен, что вы можете сделать то же самое в powershell.

$ eid=`aws athena start-query-execution --query-string "select count(*) from test_null_unquoted" --query-execution-context Database=SOMEDATABASE--result-configuration OutputLocation=s3://SOMEBUCKET/ --output text --output text` && until aws athena get-query-execution --query-execution-id=$eid --output text | grep "SUCCEEDE D"; do sleep 10 | echo "waiting..."; done && aws s3 cp s3://SOMEBUCKET/$eid.csv . && unset eid

...