#sql #snowflake-cloud-data-platform
#sql #snowflake-cloud-data-platform
Вопрос:
Я надеюсь, что заголовок имеет какой-то смысл, я открыт для предложений, если я должен сделать его более читаемым.
У меня есть временная таблица в Snowflake с именем BI_Table_Temp. В нем есть 2 столбца Load_DateTime с типом данных Timestamp_LTZ (9) и JSON_DATA, который является типом данных Variant, который содержит вложенные записи из файла JSON. Я хочу запросить эту таблицу, которую затем планирую перенести в другую таблицу, но я хочу убедиться, что я всегда получаю самую последнюю строку Load_DateTime.
Я пробовал это, что работает, но он показывает мне столбец Load_DateTime, и я не хочу этого, я просто хочу получить значения из строки JSON_DATA, которая имеет максимальную временную метку Load_DateTime:
SELECT
MAX(Load_DateTime),
transactions.value:id::string as id
transactions.value:value2::string as account_value
transactions.value:value3::string as new_account_value
FROM BI_Table_Temp,
LATERAL FLATTEN (JSON_DATA:transactions) as transactions
GROUP BY transactions.value
Ответ №1:
Простой вариант:
WITH data AS (
SELECT Load_DateTime
, transactions.value:id::string as id
, transactions.value:value2::string as account_value
, transactions.value:value3::string as new_account_value
FROM BI_Table_Temp,
LATERAL FLATTEN (JSON_DATA:transactions) as transactions
), max_load AS (
SELECT MAX(Load_DateTime) Load_DateTime, id
FROM data,
GROUP BY id
)
SELECT transactions.value:id::string as id
, transactions.value:value2::string as account_value
, transactions.value:value3::string as new_account_value
FROM data
JOIN max_load
USING (id, Load_DateTime)
Поскольку transactions.value
это вариант, я предполагаю, что для GROUP BY transactions.value
вас это действительно значит GROUP BY transactions.value:id
.
Комментарии:
1. Привет, @Felipe, спасибо за ответ. Я только что попробовал ваш код, но получаю следующую ошибку: Ошибка компиляции SQL: строка ошибки 16 в позиции 0 недопустимый идентификатор ‘TRANSACTIONS.VALUE’. который поступает из первой строки второго оператора select: transactions.value:id::string в качестве идентификатора Я пытаюсь получить последнее Load_DateTime из BI_Table_Temp и использовать значения из этой строки JSON_DATA (которая является типом данных variant, и я использую transactions.value для получения вложенныхзначения из этой строки). Затем я намерен скопировать это в другую таблицу
2. Было бы очень полезно, если бы в вопросе вы могли опубликовать выполняемый запрос. Я знаю, что отправная, которую вы опубликовали, не будет работать, так как в ней даже отсутствуют запятые. Я просто старался изо всех сил с тем, что вы предоставили. С учетом сказанного — я просто добавил пропущенную запятую в свой ответ. Можете ли вы попробовать еще раз?
3. Привет @Felipe спасибо, что исправил эту ошибку, я только что исправил пропущенную запятую в своем запросе, и в настоящее время он работает с моим изменением, но я не хочу, чтобы он отображал столбец Load_DateTime, которым он является, поскольку он находится в операторе select, и я хочу убедиться, что я всегда получаю последний столбец Load_DateTimeиз моей временной таблицы. Я все еще получаю ту же ошибку (также я удалил запятую в вашем запросе после «data» перед «GROUP BY», потому что это выдавало мне ошибку).