我有S3中包含.orc文件的多个子目录。我试图创建一个配置单元Metastore,这样我就可以使用Presto/Hive等查询数据。数据结构很差(没有一致的分隔符,难看的字符等)。这里有一个擦洗样本:如何将数据添加到现有的Hive Metastore?
1488736466 199.199.199.199 0_b.www.sphericalcow.com.f9b1.qk-g6m6z24tdr.v4.url.name.com TXT IN: NXDOMAIN/0/143
1488736466 6.6.5.4 0.3399.186472.4306.6668.638.cb5a.names-things.update.url.name.com TXT IN: NOERROR/3/306 0\009253\009http://az.blargi.ng/%D3%AB%EF%BF%BD%EF%BF%BD/\009 0\009253\009http://casinoroyal.online/\009 0\009253\009http://d2njbfxlilvpsq.cloudfront.net/b_zq_ym_bangvideo/bangvideo0826.apk\009
我能够创建一个表指向使用SERDE正则表达式中的一个子目录和字段正确解析,但据我可以告诉我可以只加载一个子文件夹一次。
如何向现有的配置单元Metastore添加更多数据?
这里是我的蜂巢metastore创建语句与正则表达式SERDE位的例子:
DROP TABLE IF EXISTS test;
CREATE EXTERNAL TABLE test (field1 string, field2 string, field3 string, field4 string)
COMMENT 'fill all the tables with the datas.'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([0-9]{10}) ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) (\\S*) (.*)",
"output.format.string" = "%1$s %2$s %3$s %4$s"
)
STORED AS ORC
LOCATION 's3://path/to/one/of/10/folders/'
tblproperties ("orc.compress" = "SNAPPY", "skip.header.line.count"="2");
select * from test limit 10;
我意识到有可能是一个非常简单的解决方案,但我试过INSERT INTO到位创建外部表,但它可以理解地抱怨输入,并且我查看了蜂房和serde文档以获取帮助,但无法找到添加到现有商店的参考。
哇。 (1)你不“加载”任何东西。外部表是包含数据读取和可能写入指令的接口。 (2)Metastore拥有表格的定义,而不是数据。 (3)我严重怀疑你正在使用RegexSerDe查询ORC文件。外部表定义中也没有ORC的指示。 (4)“output.format.string”已过时 –
有两种可能的解决方案。添加文件夹的结构,以便我们看到哪些是相关的。附:添加数据示例 - RegexSerDe有可能在这里过度杀伤。 –
谢谢,@DuduMarkovitz。 1)单词选择不当;我应该更清楚。编辑。 2)参见(1)。 3)原始文件是.orc,但我想我错过了一个'存储为orc'行。现在修复。 4)我不知道 - 谢谢。我将添加一个数据示例。没有分隔符,所以正则表达式是必要的 - 丑陋的数据。你可能会说,但我是Hadoop生态系统的新手,所以我非常感谢帮助。 – TheProletariat