【问题标题】:How to convert Hive array<Int> type to Vertica varchar on exporting data如何在导出数据时将 Hive array<Int> 类型转换为 Vertica varchar
【发布时间】:2020-04-17 08:12:13
【问题描述】:

我在 Hive db 中有一个包含数组类型列的表,我想将其与内容一起复制到 Vertica db。 Vertica db 的版本是 v9.0.1-0,我无法创建数组类型的表。要复制表,我尝试使用

COPY vertica_schema.destination FROM hive_table_path ON ANY NODE ORC;

但有一张空桌子。你能帮我将表和隐蔽的 Hive 数组 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;

Hive 源表初始化:

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);

【问题讨论】:

    标签: arrays hive vertica


    【解决方案1】:

    分解数组,转换元素并收集到字符串数组中(必要时加载到临时表中):

    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
    

    【讨论】:

      【解决方案2】:

      您可以尝试不同的方法。

      首先在Hive中创建一个stage表

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

      第二次用源表加载dest_stage

      INSERT INTO TABLE dest_stage SELECT col_a,col_array FROM source;
      

      第三步是将INT 类型的col_array 转换为STRING 类型的col_array,您可以点击此链接完成该任务

      How to concatenate the elements of int array to string in Hive

      最后一步是从 dest_stage 加载 vertica_schema.destination

      【讨论】:

        猜你喜欢
        • 2011-03-29
        • 2021-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 2012-04-10
        • 1970-01-01
        相关资源
        最近更新 更多