Что такое Амазонка Афина?
Amazon Athena предоставляет платформу, которую мы можем использовать для стандартных запросов SQL, и она использует Amazon Simple Storage (S3) для хранения данных.
Почему мы должны использовать Афину?
- Athena является бессерверной, и в ней нет инфраструктуры для настройки и управления.
- Платите только за запросы, которые мы выполняем.
- Запросы выполняются быстрее даже с большим набором данных.
- Параллельный запрос делает систему быстрее.
- Перетащите базу данных NoSql на S3 и используйте Amazon Athena для анализа данных непосредственно из S3.
Шаги по использованию Amazon Athena -
Шаг 1. Создайте базу данных
Сначала вам нужно создать базу данных в Афине. Для создания базы данных -
i) Откройте консоль Athena.
ii) В редакторе запросов Athena вы видите панель запроса с примером запроса. Начните вводить запрос в любом месте панели запросов. Чтобы создать базу данных с именем testdatabase, введите следующий оператор CREATE DATABASE, а затем выберите Run Query:
CREATE DATABASE testdatabase
Шаг 2. Создайте таблицу
i) Убедитесь, что для БАЗЫ ДАННЫХ выбрана база тестовых данных, а затем выберите «Новый запрос».
ii) На панели запроса введите следующий оператор CREATE TABLE, а затем выберите «Выполнить запрос»:
CREATE EXTERNAL TABLE IF NOT EXISTS test_table(
`Date` DATE,
Time STRING,
Location STRING,
Bytes INT,
RequestIP STRING,
Method STRING,
Host STRING,
Uri STRING,
Status INT,
Referrer STRING,
os STRING,
Browser STRING,
BrowserVersion STRING
) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^
]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]
([^\;]+).*\%20([^\/]+)[\/](.*)$") LOCATION 's3://athena-examples-
myregion/cloudfront/plaintext/';
Измените путь к местоположению S3, где вы храните свои данные.
Шаг 3. Запрос данных в nodejs
i) Создать идентификатор выполнения запроса
function createQueryExecutionId(){ /** doing resultConfiguration, but we will not save query result there. */ const params = { QueryString: 'Select * From test-table', /* required */ ResultConfiguration: { /* required */ OutputLocation: `s3://bucket-name/`, /* required s3 output location path*/ EncryptionConfiguration: { EncryptionOption: 'SSE_S3', /* required */ } } };
athena.startQueryExecution(params, (err, data) => { console.log(err, data); }); }
ii) Проверьте статус созданного идентификатора выполнения запроса на последнем шаге.
function checkQueryCreateStatus(){
const params = {
QueryExecutionId: this.QueryExecutionId
/* required generated in last step*/
};
athena.getQueryExecution(params, (err, data) => {
if (err) {
console.log(err, err.stack); // an error occurred
}
else{
if(data && data.QueryExecution && data.QueryExecution.Status &&
data.QueryExecution.Status.State && data.QueryExecution.Status.State ===
'RUNNING'){
console.log("Athena Query status is running");
}
else{
console.log("Atehna Query status is Active");
}
}
});
}
iii) Получить результат запроса, когда статус запроса Athena активен.
function getQueryResultByExecutionId(queryExecutionId){
const params = {
QueryExecutionId: queryExecutionId
/*queryExecutionId created in first step.*/
};
athena.getQueryResults(params, (err, data) => {
console.log(err?err.stack:err, data);
});
}
iv) Остановить идентификатор выполнения запроса Athena
function stopQueryExecutionId(queryExecutionId){
const params = {
QueryExecutionId: queryExecutionId
};
athena.stopQueryExecution(params, (err, data) => {
console.log(err?err.stack:err, data);
});
}
Не стесняйтесь загрузить полный код этого сообщения, чтобы увидеть полную картину того, как все работает вместе, и настроить его для своих нужд. Загляните в репозиторий, чтобы увидеть полный рабочий код. Исходный код на гитхабе.