Backend: таблица красного смещения; столбец C (varchar (1000)) содержит такие данные:
A1:B1&A4:B7&A9:B12
В основном это пары ключ: значение. & Разделяет пары, а: разделяет ключ и значение.
Число и длина ключей и значений не фиксированы. Содержание ключей и значений заранее неизвестно. Содержимое ключей и значений не перекрывается.
Цель: пользователь наблюдателя вводит значение ключа в поле пользовательского интерфейса.
Средство просмотра должно возвращать записи с этим ключом, не отображать весь текст C, но отображать только значение из C столбца, которое соответствует предоставленному пользователем ключу.
То, что я пробовал:
1) Redshift не имеет функции для преобразования Строка для сопоставления. Я пытался это реализовать. Но это привело к генерации таблицы в памяти, представляющей карту для каждой строки, которая неэффективна.
2) Пытался использовать строковые функции Looker для извлечения значения для данного ключа. Я пытался создать новое пользовательское измерение:
substring( ${T.C} ,
position( ${T.C}, "user_key:" ) + length("user_key:") + 1 , length_of_value )
, но в приведенном выше выражении я не знаю, как рассчитать length_of_value; Необходимо рассмотреть 2 случая: значение в середине строки или значение в конце строки.