#sql #amazon-athena
#sql #amazon-athena
Вопрос:
схема user_db выглядит следующим образом:
2020-03 11 80 121
2020-04 20 30 121
2020-05 13 99 121
2020-06 12 19 121
......
старая пользовательская база данных похожа на :
month,user_count, total, grand_total, percentage_old, total_percentage_old
....
2020-06 20 30 121 73.3% 18.1%
Необходимо обновить значение percentage, total_percentage из и более старые данные записи базы данных percentage_old, total_percentage_old с июня в запросе Athena,
with user_db as (
select *, user_count/total*100 as percentage, user_count/grand_total*100 as total_percentage
)
INSERT INTO user_db (percentage,total_percentage)
select percentage_old, total_percentage_old
from old_user_db as u
where u.month = '2020-06'
но получил эту ошибку:
посторонний ввод «ВСТАВИТЬ», ожидающий {‘(‘, ‘,’, ‘ ВЫБЕРИТЕ’, ‘ЗНАЧЕНИЯ’, ‘ТАБЛИЦА’}
Необходимо сохранить предложение with для повторного использования в другом запросе. Ожидайте получить таблицу user_db с процентами за июнь и total_percentage, используя более старое значение базы данных пользователя.
Комментарии:
1. Образцы данных и желаемые результаты действительно помогли бы.
2. Athena не поддерживает добавление полей в существующие строки.
INSERT INTO
всегда будет добавлять новую строку.
Ответ №1:
Я не думаю, что это причина ошибки, поскольку ошибка является синтаксической ошибкой, но вы пытаетесь вставить в CTE, что все равно не сработает.
WITH user_db (…)
определяет временную связь user_db
, которая существует только во время выполнения запроса. Если у вас уже есть таблица user_db
, она будет затенена этим отношением. INSERT INTO user_db
невозможно вставить в это отношение, потому что оно действительно не существует как таковое.
В user_db
отношении также нет FROM
предложения, которое не поддерживается, Athena не будет знать user_count
, откуда берутся столбцы , total
, и grand_total
.
Я не знаю, возможно ли написать подобные инструкции insert в других базах данных, я никогда этого не видел. В любом случае это не поддерживается в Athena. Посмотрите INSERT INTO
документацию, если хотите узнать больше о том, что поддерживается.
Я подозреваю, что вы пытаетесь сделать что-то подобное, но я не совсем уверен:
INSERT INTO user_db (month, user_count, percentage, total_percentage)
SELECT
month,
user_count,
user_count/total * 100,
user_count/grand_total * 100
FROM old_user_db
WHERE month = '2020-06'
Вам нужно будет предоставить дополнительную информацию, если вам нужна более подробная справка.
Ответ №2:
попробуйте переместить «ВСТАВИТЬ В user_db (процент, total_percentage) » в первую строку