Я пытаюсь загрузить ниже данные json из лазурной сцены, используя flatten
#этап(лазурный)
@json_stage
{
"location": {
"city": "Lexington",
"zip": "40503"
},
"price": "75836",
"sale_date": "4-25-16",
"sq__ft": "1000"
}
-- creating table
create or replace table property_sales(city varchar, zip string, price number, sale_date timestamp_ntz);
-- copy into the tabel
copy into property_sales(city, zip, price, sale_date, sqt_ft) from (select vm.value:city::string, vm.value:zip::number, $1:price::number, to_date($1.sale_date::text,'MM-DD-YY', $1.sq__ft::number) from @json_stage, lateral flatten(input => $1:location) vm);
При выполнении вышеуказанных запросов я получаю сообщение об ошибке ниже
002098 (0A000): SQL compilation error:
COPY statement only supports simple SELECT from stage statements for import
Я также пробовал вставить в команду вместо копирования,
insert into property_sales(city, zip, price, sale_date, sqt_ft) select vm.value:city::string, vm.value:zip::number, $1:price::number, to_date($1.sale_date::text,'MM-DD-YY', $1.sq__ft::number) from @json_stage, lateral flatten(input => $1:location) vm;
Но ошибка ниже
ambiguous column name '$1'
Любое решение для этого?
Это должно исправить ошибку неоднозначного имени столбца:
insert into property_sales(city, zip, price, sale_date, sqt_ft) select vm.value:city::string, vm.value:zip::number, j.$1:price::number, to_date(j.$1:sale_date::text,'MM-DD-YY' ), j.$1:sq__ft::number from @json_stage (file_format => jsonformat) j , lateral flatten(input => j.$1:"location" ) VM ;
Но, основываясь на ваших примерных данных, я не уверен, что вам действительно нужно сгладить. Это должно проанализировать (и вставить) образцы данных:
insert into property_sales(city, zip, price, sale_date, sqt_ft) select $1:location.city::string, $1:location.zip::number, $1:price::number, to_date($1:sale_date::text,'MM-DD-YY' ), $1:sq__ft::number from @json_stage (file_format => jsonformat);
Как следует из сообщения об ошибке, не все функции, обычно используемые в SELECT, поддерживаются в преобразованиях копирования. В частности, из примера выше FLATTEN не поддерживается https://docs.snowflake.com/en/user-guide/data-load-transform.html.
Решение, которое я бы предложил, состоит в том, чтобы создать рабочую таблицу (временную или временную) с полем варианта, в которое вы будете загружать JSON. Затем вы можете выполнить ВСТАВИТЬ В property_sales ВЫБЕРИТЕ .. ИЗ work_table и примените любые преобразования, которые вам нужны, в этом SELECT.