如何在 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 文档:

正在尝试做同样的事情

我尝试了以下方法,但对我不起作用:

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

并且这返回了在 propertiestoken 列中具有值但在所有其他列中为空值的行。

我错过了什么?我还应该尝试什么?

你必须使用双引号""

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"