Как сделать UNION в HIVE над двумя ВНЕШНИМИ ТАБЛИЦАМИ, которые указывают на один и тот же файл

Я пытаюсь написать сценарий Hive, который создает две внешние таблицы, обе из которых указывают на одно и то же РАСПОЛОЖЕНИЕ файла с разными регулярными выражениями (фильтрами). Когда я пытаюсь создать СОЮЗ между ними, результаты не такие, как ожидалось. Первый фрагмент кода создает таблицы

CREATE EXTERNAL TABLE logsFormat1(col1 INT, col2 STRING, col3 INT)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES ("input.regex" = "Regex1",
"output.format.string" = "%1$s %2$s %3$s")
STORED AS TEXTFILE
LOCATION '/user/.../directoryFile';

CREATE EXTERNAL TABLE logsFormat2(col1 STRING, col2 INT, col3 INT)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES ("input.regex" = "Regex2",
"output.format.string" = "%1$s %2$s %3$s")
STORED AS TEXTFILE
LOCATION '/user/.../directoryFile';

Оператор UNION просто странным образом получает результаты последнего SELECT.

`SELECT l1.url FROM logsFormat1 l1 where l1.url is not null
 UNION ALL
 SELECT l2.url FROM logsFormat2 l2 where l2.url is not null`

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


person marcos    schedule 26.12.2015    source источник
comment
Эм-м-м . . . Почему бы не иметь единую таблицу со всеми записями журнала, а затем использовать представления для выбора ее подмножеств в Hive? Мне кажется, что две таблицы, указывающие на одни и те же физические файлы, представляют собой кошмар обслуживания.   -  person Gordon Linoff    schedule 26.12.2015
comment
Потому что я не могу найти правильное регулярное выражение, которое сгруппировало бы все различные форматы журналов.   -  person marcos    schedule 26.12.2015


Ответы (1)


Наконец я решил свою проблему, создав ВРЕМЕННУЮ ТАБЛИЦУ

CREATE TEMPORARY TABLE TEMPlogsFormat1 
STORED AS TEXTFILE
AS SELECT * FROM logsFormat1 l1
person marcos    schedule 26.12.2015