2017-05-31 47 views
1

我將DynamoDB表備份到S3中,並且需要(非常少的)方式以Dynamo不支持的方式對我們的數據執行定製查詢。雅典娜似乎是一個很好的方式,可以使用我們的S3備份作爲我們的DW/BI工具的源代碼。將Amazon Athena與DynamoDB備份集成

這樣做的問題是,DyanmoDB備份到S3存儲每個行這種格式

{"Column1":{"n":"1234"},"Column2":{"n":"5678"},"Column3":{"s":"abcd"}} 

這使人們難以對雅典娜/普雷斯托閱讀。我可以用

CREATE EXTERNAL TABLE test_table (
    column1 struct<n:string> 
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 

導入數據,但是,這並不理想,爲「數字」仍然被認爲是一個字符串。我曾考慮過下載文件,壓扁JSON並重新上傳到不同的地方,但這不是有效的JSON。只有該文件的每一行都是有效的JSON。

Athena有沒有辦法讀取文件中的數據,以便正確導入字段類型?或者理想的方式是雅典娜可以將{「n」:「1234」}變成一個int嗎?

回答

1

我不相信這是最理想的答案,但這是我找到的。

Presto允許您同時提取json和轉換值。因此,而不是改變數據是如何從雅典娜閱讀之前保存,您可以創建表和投列到正確的格式,像這樣:

CREATE EXTERNAL TABLE IF NOT EXISTS tableToCreate (
    userid struct<s:string> , 
    timestamp struct<n:bigint> , 
    reason struct<s:string> 
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
LOCATION 's3://some-place 

那麼當您查詢,在查詢column.s或column.n

SELECT userid.s timestamp.n FROM tableToCreate WHERE reason.s = 'REASON' 

你可以閱讀更多關於它在這裏:https://prestodb.io/docs/current/functions/json.html