У меня есть суперполе, содержащее данные в формате JSON –
** { "awsRegion": "us-west-2", "динамодб": { «ApproximateCreationDateTime»: 1712584702997808, "Ключи": { "идентификатор перспективы": { "S": "строка_1" } }, "Новое изображение": { "имя_перспективы": { "S": "perform-test_Ram" }, "gaSessionId": { "S": "1980117787.1628661599" } }, «Сизебайт»: 467, «ApproximateCreationDateTimePrecision»: «МИКРОСЕКУНД» }, "eventSource": "aws:dynamodb" } **
Я хочу извлечь строку значения JSONspectId,prospectName,gaSessionId. Я попытался преобразовать это поле в varchar, но результат оказался пустым. Я также попытался преобразовать в JSON_serialize, а затем в varchar, но результаты остались пустыми. Любая помощь, как это исправить?
Если этот столбец (столбец) имеет тип super, вам просто нужно перейти к нужному полю, используя '.' обозначения. Как и в приведенном ниже запросе, но поскольку имена полей указаны в верхнем регистре, вам также необходимо настроить Redshift на чувствительность к регистру:
SET enable_case_sensitive_identifier TO true;
SELECT col.dynamodb."Keys"."prospectId"."S" as prospectid
FROM <table>;
Обратите внимание на использование двойных кавычек, когда в идентификаторе столбца/поля находится символ верхнего регистра.
Я столкнулся с проблемой при создании металлизированного представления: CREATE MATERIALIZED VIEW test_sch."new_vw" АВТО ОБНОВЛЕНИЕ ДА КАК ВЫБРАТЬ приблизительную_метку_времени_приближения, JSON_PARSE(kinesis_data) в качестве данных, kinesis_data.dynamodb."Keys"."Id"."S" в качестве проспекта, kinesis_data .dynamodb."NewImage"."Name"."S" как имя_проспекта, kinesis_data.dynamodb."NewImage"."SessionId"."S" как gaSessionId из kds_schema."test-stream-dev" WHERE CAN_JSON_PARSE(kinesis_data);
kinesis_data — это varchar, а data — это super, поэтому вы не можете ссылаться на суперполя по имени varchar. Вам нужно использовать «данные». Я также считаю, что вам нужно будет переместить JSON_PARSE() и CAN_JSON_PARSE() в подзапрос или CTE. Как будто я правильно помню, Redshift понадобится этот уровень SELECT, чтобы иметь возможность использовать поля, но попробуйте и посмотрите.
УСТАНОВИТЕ оба параметра в TRUE
Установите для Enable_case_sensitifier_identifier значение TRUE; Установите для параметра Enable_case_sensitivity_super_attribute значение TRUE;
Вау, спасибо, это сработало для меня. Слава. Но мы предоставляем точные ключи с правильными регистрами, но нам все равно нужно SET Enable_case_sensitifier_identifier TO true;