Я пишу сценарий 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)
Пожалуйста, дайте мне знать, что еще может быть полезно для вас здесь.Будучи новичком в этом, я не совсем уверен, что еще будет иметь значение.Спасибо