Vertica: синтаксический анализ строки как JSON при вставке данных из таблицы в текстовый файл

Я использую Vertica 9.2.1 в EON-режиме. У меня есть таблица фактов со столбцом, в котором хранятся строки JSON. Я хочу загрузить эти данные вместе с некоторыми идентификаторами из таблицы фактов во флэштаблицу. Чтобы мы могли провести анализ этих данных. Чего я хочу избежать, так это загрузки всех необходимых данных на машину ETL, чтобы преобразовать данные, а затем загрузить их во флэштаблицу, поскольку все данные уже доступны в Vertica. Как я могу сообщить Vertica о необходимости синтаксического анализа столбца VARCHAR как JSON?

CREATE TABLE public.tmp_facts ("id" INTEGER, "user_id" VARCHAR(64), "event_type" VARCHAR(50), /* other columns omitted */ "additional" VARCHAR(65000));
INSERT INTO public.tmp_facts ("id", "user_id", "event_type", "additional")
SELECT 1, 'user1', 'event1', '{"os":"Android", "time":"'||NOW()||'"}';
CREATE FLEX TABLE public.fact_additional
(
    "id" INTEGER NOT NULL,
    "user_id" VARCHAR(64) NOT NULL,
    "event_type" VARCHAR(50)
);
INSERT INTO public.fact_additional ("id", "user_id", "event_type")
SELECT "id", "user_id", "event_type", "additional" FROM tmp_facts;

SELECT "additional", "additional.os", "additional[os]" FROM fact_additional;

Я ожидал, что последний запрос выдаст хотя бы один столбец Android


person Bastel    schedule 20.06.2019    source источник


Ответы (1)


Вам необходимо передать столбец additional через функцию MapJSONExtractor() при вставке из public.tmp_facts в public.fact_additional

INSERT INTO public.fact_additional ("id", "user_id", "event_type")
SELECT "id",
       "user_id",
       "event_type", 
       MapJSONExtractor("additional") as additional 
FROM tmp_facts;

SELECT "additional"['os'] as os FROM fact_additional;

   os    
---------
 Android
(1 row)

Обратите внимание на использование одинарных / двойных кавычек в соответствующих местах.

person ya2410    schedule 21.06.2019