如何在导出数据时将配置单元数组< int>类型转换为vertica varchar

qvk1mo1f  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(469)

我在hivedb中有一个带有array-type列的表,我想将它与内容一起复制到vertica db。vertica db的版本是v9.0.1-0,我无法创建数组类型的表。复制我试图使用的表

COPY vertica_schema.destination FROM hive_table_path ON ANY NODE ORC;

但是有一张空table。你能帮我把table和covert配置单元数组int类型复制到vertica varchar类型吗?例如,vertica varchar值可以如下所示: [1, 1, 1] 或者 {1, 1, 1} .
vertica目标表初始化:

CREATE TABLE vertica_schema.destination (
    col_a     INTEGER NOT NULL,
    col_array VARCHAR(200), -- ARRAY[INTEGER] not working
) ORDER BY id
UNSEGMENTED ALL NODES;

配置单元源表初始化:

create table source
(
    col_a int,
    col_array array<int>
) stored as orc;

insert into source  select 1, array(1, 2, 3);
insert into source select 2, array(2, 2, 2);
insert into source select 3, array(3, 3, 3);
gmol1639

gmol16391#

你可以尝试另一种方法。
首先在中创建阶段表 Hive 喜欢

CREATE TABLE dest_stage(
    col_a INT,
    col_array array<INT> 
) STORED AS ORC;

带源表的第二个加载目标阶段

INSERT INTO TABLE dest_stage SELECT col_a,col_array FROM source;

第三步是转换col\ u类型的数组 INT 放入类型的列数组中 STRING ,您可以按此链接执行该任务
如何在配置单元中将int数组的元素连接到字符串
最后一步是加载 vertica_schema.destination 从目的地阶段。

3ks5zfa0

3ks5zfa02#

分解数组,将元素强制转换并收集到字符串数组中(如有必要,加载到暂存表中):

select s.col_a,
       collect_list(cast(e.element as string)) as string_array
  from source s
       lateral view outer explode(s.col_array) e as element

相关问题