AWS Клей DynamicFrames и Push Down Predicate - PullRequest
0 голосов
/ 22 февраля 2019

Я пишу сценарий ETL для AWS Glue, полученный из S3-файлов JSON, в котором я создаю DynamicFrame и пытаюсь использовать логику pushDownPredicate для ограничения поступления данных:

# Define the data restrictor predicate
now = str(int(round(time.time() * 1000)))
now_minus_7_date = datetime.datetime.now() - datetime.timedelta(days=7)
now_minus_7 =  str(int(time.mktime(now_minus_7_date.timetuple()) * 1000))

last_7_predicate = "\"timestamp BETWEEN '" + now_minus_7 + "' AND '" + now + "'\""
print("Your predicate will be :" + last_7_predicate)

Структура таблицы состоит из нескольких столбцов с разделами (все строки) RegionalCenter, Year, Month, Day и Timestamp.Я получаю сообщение об ошибке:

Произошла ошибка при вызове o70.getDynamicFrame.Предикат pushdown пользователя: «отметка времени между 1550254844000 'и' 1550859644703 '» не может быть разрешена для столбцов раздела: [региональный центр, час, год, отметка времени, месяц, день]

Я новичок в AWSКлей и Спарк, и с этим сказанное, очень озадачены тем, почему предикатная временная метка не может быть разрешена для столбцов раздела, которые на самом деле содержат временную метку.Я убедился, что временные метки, используемые в таблице, указаны в миллисекундах.Примером из нашей структуры S3 будет:

региональный центр = Миссури / Год = 2019 / Месяц = ​​2 / День = 11 / Час = 22 / Отметка времени = 1549924089246

Код DynamicFrame выглядит следующим образом:

    # Read data from table
dynamic_frame = glueContext.create_dynamic_frame.from_catalog(
    database = args['DatabaseName'],
    table_name = args['TableName'],
    transformation_ctx = 'dynamic_frame',
    push_down_predicate = last_7_predicate)

Пожалуйста, дайте мне знать, что еще может быть полезно для вас здесь.Будучи новичком в этом, я не совсем уверен, что еще будет иметь значение.Спасибо

1 Ответ

0 голосов
/ 22 февраля 2019

Ах, я включил слишком много цитат.Считайте, что это решено:

last_7_predicate = "timestamp between '" + now_minus_7 + "' AND '" + now + "'"
...