我使用下面的查询在 redshift 中创建金属化视图,
`CREATE MATERIALIZED VIEW test_sch."new_vw" AUTO REFRESH YES AS
SELECT approximate_arrival_timestamp,
JSON_PARSE(kinesis_data) as data,
kinesis_data.dynamodb."Keys"."Id"."S" as prospectId ,
kinesis_data.dynamodb."NewImage"."Name"."S" as prospectName,
kinesis_data.dynamodb."NewImage"."SessionId"."S" as gaSessionId
from kds_schema."test-stream-dev"
WHERE CAN_JSON_PARSE(kinesis_data);`
错误:- 不允许将列数据导航作为其超类型。
我尝试使用如下所示的超级键解析
kinesis_data.dynamodb."Keys"."Id"."S" as prospectId
但是无法导航SUPER键
“kinesis_data”是 varchar,“data”是 super,因此您不能通过 varchar 名称引用 super 字段。你需要使用“数据”。
我还相信您需要将 JSON_PARSE() 和 CAN_JSON_PARSE() 移动到子查询或 CTE。好像我没记错一样 Redshift 将需要此级别的 SELECT 才能使用这些字段。
CREATE MATERIALIZED VIEW test_sch."new_vw" AUTO REFRESH YES AS
SELECT approximate_arrival_timestamp,
data,
data.dynamodb."Keys"."Id"."S" as prospectId,
data.dynamodb."NewImage"."Name"."S" as prospectName,
data.dynamodb."NewImage"."SessionId"."S" as gaSessionId
from (
SELECT approximate_arrival_timestamp, JSON_PARSE(kinesis_data) as data
FROM kds_schema."test-stream-dev"
WHERE CAN_JSON_PARSE(kinesis_data)
);