2017-06-21 67 views
0

我是AWS上的Hive和Athena的新手。我有,看起來像一個表中的數據:AWS Athena Hive:從列中的數據中去掉不需要的字符

_id 
type 
title 

_id看起來像{"$oid":"12asdf9"}

我已成功地創建條一切的數據,但使用regexp_extract

我現在需要把這個查詢的結果保存到_id列,實際的ID查詢。

的解決方案我想出去(我不能去上班)是:在_id

  1. 運行regexp_extract
  2. 選擇我需要的
  3. 轉儲其它列結果到一個新表

我的代碼做到這一點(見下文)返回line 1:8: no viable alternative at input 'create external' (service: amazonathena; status code: 400; error code: invalidrequestexception;

我非常感謝任何幫助解決這個問題。謝謝!

CREATE EXTERNAL TABLE sitbi_test_db.combined AS 
SELECT unioned._id, unioned.type, unioned.title 
FROM (
    SELECT a._id, regexp_extract(a._id, '(?<=oid\"\:\")(.*)(?=\"\})') 
    FROM sitbi_test_db.announcements a 
    UNION ALL 
) unioned 
LOCATION 's3://sitbi-test-mongodb/cleanedAnnouncements/' 

注意:我手動創建一個新的目錄cleanedAnnouncements在我的源S3鬥,我不知道這是爲了指向雅典娜輸出鬥

+0

據我所知,你不能創建與雅典娜select語句表,他們必須從'S3'加載,所以看起來好像你正指向'S3'中的一個位置,但實際上並沒有加載任何東西。 –

回答

0

,而不是執行CREATE TABLE AS,你應該使用RegexSerDe執行CREATE TABLE語句。以下是我使用RegexSerDe構建表格的嘗試。

注:以下假定S3文件的行格式中的{"$oid":"12asdf9"} type title

CREATE EXTERNAL TABLE IF NOT EXISTS sitbi_test_db.combined (
id STRING, 
type STRING, 
title STRING 
) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
"input.regex" = "^.*\:\"(.*).*\"\}.*\s(.*).*\s(.*)$" 
) LOCATION 's3://sitbi-test-mongodb/cleanedAnnouncements/'; 

Athena docs on RegexSerDe

+0

謝謝噸 - 我會試試這個報告。 – martellalex

相關問題