определить ключи для разделения данных.

я есть пакетное задание, которое выполняется ежечасно. Каждый прогон генерирует и сохраняет новые данные вS3 с шаблоном именования каталоговDATA/YEAR=?/MONTH=?/DATE=?/datafile.

После загрузки данных вS3Я хочу исследовать их, используяAthena, Более того, я хотел бы представить их вQuickSight подключившись к Афине в качестве источника данных.

Проблема в том, что после каждого запуска моего пакета Spark вновь сгенерированные данные сохраняются вS3 не будет обнаружена Афиной, если я не выполню запрос вручнуюMSCK REPARI TABLE.

Есть ли способ заставить Athena автоматически обновлять данные, чтобы я мог создать полностью автоматический конвейер визуализации данных?

Ответы на вопрос(1)

Решение Вопроса

ои рабочие процессы? Используете ли вы систему, какРасход воздуха, Луиджи, Азкабан, cron или используяAWS Data pipe?

Из любого из них вы сможете запустить следующую команду CLI.

$ aws athena start-query-execution --query-string "MSCK REPAIR TABLE some_database.some_table" --result-configuration "OutputLocation=s3://SOMEPLACE"

Другой вариант будетAWS Lambda, Вы могли бы иметь функцию, которая вызываетMSCK REPAIR TABLE some_database.some_table в ответ на новую загрузку на S3.

Пример лямбда-функции может быть записан так:

import boto3

def lambda_handler(event, context):
    bucket_name = 'some_bucket'

    client = boto3.client('athena')

    config = {
        'OutputLocation': 's3://' + bucket_name + '/',
        'EncryptionConfiguration': {'EncryptionOption': 'SSE_S3'}

    }

    # Query Execution Parameters
    sql = 'MSCK REPAIR TABLE some_database.some_table'
    context = {'Database': 'some_database'}

    client.start_query_execution(QueryString = sql, 
                                 QueryExecutionContext = context,
                                 ResultConfiguration = config)

Затем вы должны настроить триггер для выполнения вашей лямбда-функции, когда новые данные добавляются вDATA/ префикс в вашем ведре.

В конечном счете, явная перестройка разделов после запуска Spark Job с использованием планировщика заданий имеет преимущество самодокументирования. С другой стороны, AWS Lambda удобна для таких работ, как эта.

 YangZhao18 апр. 2018 г., 08:07
Я использовал запланированный AWS Crawler для сканирования базы данных для обновления таблицы. Что вы думаете об этом решении?
 RobinL15 апр. 2018 г., 15:41
Я думаю, что другой возможностью является использование boto в вашем скрипте Glue. Вы должны быть в состоянии использоватьэто выполнить соответствующиеMSCK REPAIR TABLE команда
 Zerodf18 апр. 2018 г., 15:57
Это может работать. Хорошая особенность использования функции Lambda заключается в том, что Lambda может динамически реагировать на события, такие как добавление файла в S3 в случае Афины. Недостаток лямбда-функций заключается в том, что ими сложно управлять с точки зрения непрерывной интеграции и контроля версий.

Ваш ответ на вопрос