如何在 redshift 中处理超级类型的 JSON 路径中的美元符号 ($)?
How to handle dollar sign ($) in JSON path for super type in redshift?
总结:
我正在尝试从 json 中提取值,该 json 在 redshift 中存储为 super。
上下文
此问题与 几乎相同。
我的架构:
user_id VARCHAR
properties SUPER
示例数据:
{
"$os": "Mac OS X",
"$browser": "Chrome",
"token": "123x5"
}
我的 table 中有一个专栏,名为 properties
。
期望的行为
我希望能够从 $os
键中检索值 Mac OS X
并将其存储在 VARCHAR
列中。
我试过的
我可以通过以下方式检索没有特殊字符的键的值:
SELECT properties.token from clean
我参考了以下 aws 文档:
- https://docs.aws.amazon.com/redshift/latest/dg/JSON_EXTRACT_PATH_TEXT.html
- https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html
- https://docs.aws.amazon.com/redshift/latest/dg/super-overview.html
正在尝试做同样的事情
我尝试了以下方法,但对我不起作用:
SELECT properties.'$os' from clean
SELECT properties.'$os' from clean
SELECT properties[$os] from clean
SELECT properties['$os'] from clean
参考以下文档:https://docs.aws.amazon.com/redshift/latest/dg/query-super.html#unnest
我还尝试使用 partisql 迭代超类型:
select b.*
, pr
from base b, b.properties pr;
但是这个returns没有行。
我还尝试了以下方法:
select
properties
, properties.token
, properties[0] praw0
, properties[0].os os
, properties[0][0] praw00
, properties[0][0][0] praw000
from base
并且这返回了在 properties
和 token
列中具有值但在所有其他列中为空值的行。
我错过了什么?我还应该尝试什么?
你必须使用双引号""
CREATE TEMP TABLE test_json
(
user_id VARCHAR,
properties SUPER
);
INSERT INTO test_json VALUES (1,JSON_PARSE('{"$os": "Mac OS X", "$browser": "Chrome", "token": "123x5"}'));
SELECT properties."$os" from test_json
-- Output
"Mac OS X"
总结:
我正在尝试从 json 中提取值,该 json 在 redshift 中存储为 super。
上下文
此问题与
user_id VARCHAR
properties SUPER
示例数据:
{
"$os": "Mac OS X",
"$browser": "Chrome",
"token": "123x5"
}
我的 table 中有一个专栏,名为 properties
。
期望的行为
我希望能够从 $os
键中检索值 Mac OS X
并将其存储在 VARCHAR
列中。
我试过的
我可以通过以下方式检索没有特殊字符的键的值:
SELECT properties.token from clean
我参考了以下 aws 文档:
- https://docs.aws.amazon.com/redshift/latest/dg/JSON_EXTRACT_PATH_TEXT.html
- https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html
- https://docs.aws.amazon.com/redshift/latest/dg/super-overview.html
正在尝试做同样的事情
我尝试了以下方法,但对我不起作用:
SELECT properties.'$os' from clean
SELECT properties.'$os' from clean
SELECT properties[$os] from clean
SELECT properties['$os'] from clean
参考以下文档:https://docs.aws.amazon.com/redshift/latest/dg/query-super.html#unnest 我还尝试使用 partisql 迭代超类型:
select b.*
, pr
from base b, b.properties pr;
但是这个returns没有行。
我还尝试了以下方法:
select
properties
, properties.token
, properties[0] praw0
, properties[0].os os
, properties[0][0] praw00
, properties[0][0][0] praw000
from base
并且这返回了在 properties
和 token
列中具有值但在所有其他列中为空值的行。
我错过了什么?我还应该尝试什么?
你必须使用双引号""
CREATE TEMP TABLE test_json
(
user_id VARCHAR,
properties SUPER
);
INSERT INTO test_json VALUES (1,JSON_PARSE('{"$os": "Mac OS X", "$browser": "Chrome", "token": "123x5"}'));
SELECT properties."$os" from test_json
-- Output
"Mac OS X"