0

我正在从 Azure Blob 摄取一个大型的简单 json 数据集,并将数据移动到一个名为“cities_stage”的“阶段”,其中 FILE_FORMAT = json 就像这样。

(以下是错误步骤“解析 JSON 时出错:未知关键字“Hurzuf”,位置 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;  

当我从 city_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 都会按预期返回

任何帮助表示赞赏!

4

1 回答 1

1

事实证明,除了查询本身之外,我的一切都是正确的。

查询 VARIANT 列时,您不需要 PARSE_JSON,因此正确的查询如下所示。

 select src:id,
  src:coord:lat,
  src:coord:lon,
  src:name
  from cities_raw_source;
于 2019-07-16T14:52:01.183 回答