Vertica:将数据从 table 插入到 flextable 时将字符串解析为 JSON
Vertica: Parse string as JSON when inserting data from table into flextable
我在 EON 中使用 Vertica 9.2.1-mode.I 有一个事实 table,其中有一列包含 JSON 个字符串。我想将此数据与事实 table 中的一些标识符一起加载到 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_facts
插入public.fact_additional
时,您需要通过MapJSONExtractor()
函数传递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)
注意在适当的地方使用单引号/双引号。
我在 EON 中使用 Vertica 9.2.1-mode.I 有一个事实 table,其中有一列包含 JSON 个字符串。我想将此数据与事实 table 中的一些标识符一起加载到 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_facts
插入public.fact_additional
MapJSONExtractor()
函数传递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)
注意在适当的地方使用单引号/双引号。