我有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