Я пытаюсь написать сценарий 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 указывают на один и тот же файл. Проблема в том, что у меня не может быть двух файлов. Мне нужно решить это с тем же расположением файла, потому что реальный файл очень длинный