我正在从 Azure Blob 引入一个大型的简单 json 数据集,并将数据移动到名为"cities_stage"的"阶段"中,其中 FILE_FORMAT = json。
(这是错误步骤在下面"解析 JSON 时出错:未知关键字"Hurzuf",pos 7。
create or replace stage cities_stage
url='azure://XXXXXXX.blob.core.windows.net/xxxx/landing/cities'
credentials=(azure_sas_token='?st=XXXXX&se=XXX&sp=racwdl&sv=XX&sr=c&sig=XXX')
FILE_FORMAT = (type = json);
然后,我采用此阶段位置并将其转储到具有单个变体列的表中,如下所示。我正在摄取的文件大于 16mb,因此我使用 type = json strip_outer_array = true 为每个对象创建单独的行
create or replace table cities_raw_source (
src variant);
copy into cities_raw_source
from @cities_stage
file_format = (type = json strip_outer_array = true)
on_error = continue;
当我从cities_raw_source中选择 * 时,每一行如下所示。
{
"coord": {
"lat": 44.549999,
"lon": 34.283333
},
"country": "UA",
"id": 707860,
"name": "Hurzuf"
}
当我添加对"国家"或"名称"的引用时,这就是问题所在。这是我的查询(我没有在这个查询中使用国家/地区,但它会产生相同的结果(。
select parse_json(src:id),
parse_json(src:coord:lat),
parse_json(src:coord:lon),
parse_json(src:name)
from cities_raw_source;
错误:
解析 JSON 时出错:未知关键字"Hurzuf",位置 7。
如果我删除"src:name",ID、Lat 和 Lon 都会按预期返回
任何帮助不胜感激!
事实证明,除了查询本身之外,我一切都是正确的。
查询 VARIANT 列时,无需PARSE_JSON,因此正确的查询如下所示。
select src:id,
src:coord:lat,
src:coord:lon,
src:name
from cities_raw_source;