Как получить полные результаты запроса к CSV-файлу с помощью AWS / Athena из интерфейса командной строки?

Мне нужно загрузить полный контент таблицы, который у меня есть на моем AWS / Glue / Catalog, с помощью AWS / Athena. В настоящий момент я запускаю select * from my_table из панели инструментов и сохраняю результат локально как CSV всегда из панели инструментов. Есть ли способ получить такой же результат с помощью AWS / CLI?

Из документации я вижу https://docs.aws.amazon.com/cli/latest/reference/athena/get-query-results.html, но это не совсем то, что мне нужно.


person Randomize    schedule 02.10.2020    source источник


Ответы (2)


Вы не можете сохранить результаты из интерфейса командной строки AWS, но можете Укажите местоположение результата запроса, и Amazon Athena автоматически сохранит копию результатов запроса в указанном вами местоположении Amazon S3.

Затем вы можете использовать интерфейс командной строки AWS для загрузки этого файла результатов.

person John Rotenstein    schedule 02.10.2020
comment
Звучит неплохо, спасибо. Мне интересно, смогу ли я управлять всем этим из CLI, или всегда есть назад и вперед с помощью панели управления пользовательским интерфейсом - person Randomize; 02.10.2020
comment
Вы можете настроить его из интерфейса командной строки AWS через update. -рабочая группа. - person John Rotenstein; 02.10.2020
comment
Я думаю, вы можете сохранить результаты, если разберетесь с разбивкой по страницам для get-query-results, но, вероятно, это самый простой способ, который вы предложили. - person Randomize; 02.10.2020

Вы можете выполнить запрос Athena с помощью интерфейса командной строки AWS, используя aws athena start-query-execution вызов API. Затем вам нужно будет провести опрос с помощью _2 _, пока запрос не будет завершен. В этом случае результат этого вызова также будет содержать местоположение результата запроса на S3, которое затем вы можете загрузить с помощью _ 3_.

Вот пример сценария:

#!/usr/bin/env bash

region=us-east-1 # change this to the region you are using
query='SELECT NOW()' # change this to your query
output_location='s3://example/location' # change this to a writable location

query_execution_id=$(aws athena start-query-execution \
  --region "$region" \
  --query-string "$query" \
  --result-configuration "OutputLocation=$output_location" \
  --query QueryExecutionId \
  --output text)

while true; do
  status=$(aws athena get-query-execution \
    --region "$region" \
    --query-execution-id "$query_execution_id" \
    --query QueryExecution.Status.State \
    --output text)
  if [[ $status != 'RUNNING' ]]; then
    break
  else
    sleep 5
  fi
done

if [[ $status = 'SUCCEEDED' ]]; then
  result_location=$(aws athena get-query-execution \
    --region "$region" \
    --query-execution-id "$query_execution_id" \
    --query QueryExecution.ResultConfiguration.OutputLocation \
    --output text)
  exec aws s3 cp "$result_location" -
else
  reason=$(aws athena get-query-execution \
    --region "$region" \
    --query-execution-id "$query_execution_id" \
    --query QueryExecution.Status.StateChangeReason \
    --output text)
  echo "Query $query_execution_id failed: $reason" 1>&2
  exit 1
fi

Если ваша основная рабочая группа имеет выходное местоположение, или вы хотите использовать другую рабочую группу, у которой также есть определенное выходное местоположение, вы можете соответствующим образом изменить вызов start-query-execution. В противном случае у вас, вероятно, есть корзина S3 с именем aws-athena-query-results-NNNNNNN-XX-XXXX-N, которая была создана Афиной в какой-то момент и используется для выходных данных при использовании пользовательского интерфейса.

person Theo    schedule 05.10.2020