create or replace function JSON_STRING()
returns string
language javascript
as
$$
return `
[
{
"GoalName": "GoalTime_InDoorOpen",
"GoalTime": "2020-03-26T12:58:00-04:00"
},
{
"GoalName": "GoalTime_InLastOff"
},
{
"GoalName": "GoalTime_InReadyToTow"
},
{
"GoalName": "GoalTime_OutTowAtGate"
},
{
"GoalName": "GoalTime_OutStartBoarding",
"GoalTime": "2020-03-27T14:00:00-04:00"
}
]
`;
$$;
select value:GoalName::string as GoalName, value:GoalTime::timestamp as GoalTime
from lateral flatten(input => parse_json(JSON_STRING()));
-- See how the lateral flatten combination works on a JSON variant:
select * from lateral flatten(input => parse_json(JSON_STRING()));
Я написал это для запуска на любом листе Snowflake, таблицы не нужны. Функция сверху просто позволяет записать JSON в виде многострочной строки в инструкции SQL под ней. Он не имеет другого использования, кроме представления строки, содержащей ваш JSON.
. Шаг 1 - PARSE_ JSON, который преобразует строку в вариантный тип данных, отформатированный как объект JSON.
Шаг 2 - боковое выравнивание. Если вы выберете звездочку, она вернет количество столбцов. Одним из них является «значение».
Шаг 3 состоит в извлечении свойств, которые вы хотите, используя единственную нотацию: для имени свойства и точек, чтобы пройти оттуда узлы (если они есть).
Шаг 4 - приведение свойства к нужному типу данных с использованием двойной :: нотации. Это особенно важно, если вы выполняете сравнение столбца, особенно в ключах соединения.
Обратите внимание, что есть небольшая недопустимая часть JSON, которая не позволяет ему анализировать. На верхнем уровне массив имеет свойство, которое не анализируется. Я удалил это, чтобы разрешить анализ.