hadoop—如何在指向同一文件的两个外部表上的配置单元中进行联合

oxcyiej7  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(349)

我正在尝试编写一个配置单元脚本,它创建两个外部表,它们都使用不同的正则表达式(过滤器)指向相同的文件位置。当我试图让他们结合起来时,结果并不像预期的那样。第一段代码创建表

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`

我发现发生这种情况是因为两个表的位置都指向同一个文件。问题是我不能有两个文件。我需要解决这个问题与相同的文件位置,因为真正的文件是非常长的

dy1byipe

dy1byipe1#

最后,我解决了创建临时表的问题

CREATE TEMPORARY TABLE TEMPlogsFormat1 
STORED AS TEXTFILE
AS SELECT * FROM logsFormat1 l1

相关问题