Etl Vertica:将表中的数据插入flextable时将字符串解析为JSON

Etl Vertica:将表中的数据插入flextable时将字符串解析为JSON,etl,vertica,flextable,Etl,Vertica,Flextable,我在EON模式下使用Vertica 9.2.1,我有一个事实表,其中有一列包含JSON字符串。我想将这些数据与事实表中的一些标识符一起加载到flextable中。这样我们就可以对这些数据进行分析。我想要避免的是,将所有必要的数据加载到ETL机器上,以转换数据,然后将其加载到flextable中,因为所有数据都已在Vertica中可用。如何让Vertica将VARCHAR列解析为JSON CREATE TABLE public.tmp_facts ("id" INTEGER, "user_id"

我在EON模式下使用Vertica 9.2.1,我有一个事实表,其中有一列包含JSON字符串。我想将这些数据与事实表中的一些标识符一起加载到flextable中。这样我们就可以对这些数据进行分析。我想要避免的是,将所有必要的数据加载到ETL机器上,以转换数据,然后将其加载到flextable中,因为所有数据都已在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

当从
public.tmp\u facts
插入
public.facts\u additional
时,您需要通过
MapJSONExtractor()
函数传递
附加的

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)
注意在适当的位置使用单引号/双引号。