Как преобразовать массив Hive <Int>в Vertica varchar при экспорте данных - PullRequest
2 голосов
/ 17 апреля 2020

У меня есть таблица в Hive db со столбцом типа массива, которую я хочу скопировать с содержимым в Vertica db. Версия Vertica db v9.0.1-0, и я не могу создать таблицу с типом массива. Для копирования таблицы я попытался использовать

COPY vertica_schema.destination FROM hive_table_path ON ANY NODE ORC;

, но получил пустую таблицу. Не могли бы вы помочь мне скопировать таблицу и преобразовать тип массива Hive в тип 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);

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Разнесите массив, приведите элементы и соберите в массив строк (при необходимости загрузите в промежуточную таблицу):

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 голосов
/ 17 апреля 2020

Вы можете попробовать другой подход.

Сначала создайте таблицу этапов в Hive, например

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;

Третий шаг будет преобразовывать col_array типа INT в col_array типа STRING, вы можете перейти по этой ссылке для этой задачи

Как объединить элементы массива int в строку в Hive

И последним шагом будет загрузка vertica_schema.destination из dest_stage.

Я надеюсь, что это может быть полезно или даст вам некоторые подсказки для решения вашей проблемы.

С уважением.

...