Presto 中包含字符的键的JSON_EXTRACT问题



我正在使用 Presto(0.163( 查询数据,并尝试从 json 中提取字段。

我有一个如下所示的 json,它存在于"style_attributes"列中:

"attributes": {
    "Brand Fit Name": "Regular Fit",
    "Fabric": "Cotton",
    "Fit": "Regular",
    "Neck or Collar": "Round Neck",
    "Occasion": "Casual",
    "Pattern": "Striped",
    "Sleeve Length": "Short Sleeves",
    "Tshirt Type": "T-shirt"
}

我无法提取字段"短袖"。以下是我正在使用的查询:

选择JSON_EXTRACT(style_attributes,'$.attributes。袖长'(作为表格的长度;

查询失败,并显示以下错误 - JSON 路径无效:"$.attributes。袖长'

对于没有' '(空格(的字段,查询运行正常。

我试图在Presto文档中找到解决方案,但没有成功。

presto:default> select json_extract_scalar('{"attributes":{"Sleeve Length": "Short Sleeves"}}','$.attributes["Sleeve Length"]');
     _col0
---------------
 Short Sleeves

presto:default> select json_extract_scalar('{"attributes":{"Sleeve Length": "Short Sleeves"}}','$["attributes"]["Sleeve Length"]');
     _col0
---------------
 Short Sleeves

JSON 函数更改

:func: json_extract 和 :func: 现在json_extract_scalar函数 支持方括号语法:

SELECT json_extract(json, '$.store[book]'); 
SELECT json_extract(json,'$.store["book name"]');

作为此更改的一部分,字符集 允许在非括号路径段中 已限制为 字母数字、下划线和冒号。此外,冒号不能 用于不带引号的括号路径段。使用新的括号语法 使用引号来匹配包含特殊字符的元素。

https://github.com/prestodb/presto/blob/c73359fe2173e01140b7d5f102b286e81c1ae4a8/presto-docs/src/main/sphinx/release/release-0.75.rst

SELECT 
   tags -- It is column with Json string data
  ,json_extract(tags , '$.Brand') AS Brand
  ,json_extract(tags , '$.Portfolio') AS Portfolio
  ,cost
FROM
    TableName
Sample data for tags - {"Name": "pxyblob",  "Owner": "",  "Env": "prod",  "Service": "",  "Product": "",  "Portfolio": "OPSXYZ",  "Brand": "Limo",  "AssetProtectionLevel": "",  "ComponentInfo": ""}

这是您的正确答案。让我们说:


JSON : {"旅行日期":"2017-9-22", "城市": "西雅图"}
栏目名称:行程然后我想从当前的 JSON 中提取"旅行日期":

查询:从表中选择JSON_EXTRACT(行程,"$."旅行日期"(

注意:只需在键名称的开头和结尾添加 \"。

希望这肯定会满足您的需求。:)

相关内容

  • 没有找到相关文章

最新更新