我正在使用 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(行程,"$."旅行日期"(
注意:只需在键名称的开头和结尾添加 \"。
希望这肯定会满足您的需求。:)