【AWS】AWS Athena 實作 (一) 讀取Json

05 7月, 2018

【AWS】AWS Athena 實作 (一) 讀取Json





AWS Athena 是一個S3的資料分析的服務

最近因為某種需求而需要使用到它
看完文件後
又再一次差點跪著寫程序





至於這個服務是什麼?

在什麼時機點跟場合下使用比較好?
官方在說明中已經有了具體解釋:(下文引用自AWS官方文件說明)

When should I use Athena?

Athena helps you analyze unstructured, semi-structured, and structured data stored in Amazon S3. Examples include CSV, JSON, or columnar data formats such as Apache Parquet and Apache ORC. You can use Athena to run ad-hoc queries using ANSI SQL, without the need to aggregate or load the data into Athena.

You can use Athena to generate reports or to explore data with business intelligence tools or SQL clients connected with a JDBC or an ODBC driver. For more information, see What is Amazon QuickSight in the Amazon QuickSight User Guide and Connecting to Amazon Athena with ODBC and JDBC Drivers.


大體上來說,
如果你有需要去將S3儲存桶裡的文件(Json,csv..)去做解析
Athena這個服務
會將解析這件事情變得異常的簡單
客戶端只要用熟悉資料庫的指令跟連線方式
就可以去解析S3裡面的所有數據

舉個例子:
假設今天在S3的儲存桶下有10000份的json文檔,
json裡面假設有個屬性為人數(不一定每一份都需要有這個屬性)
而目的是 想要加總所有josn文檔的人數
這種解析S3文檔的行為
就非常適合交給Athena這個服務去做

你只需要在Athena創建一個資料表,
讓這個資料表連動到你S3的儲存桶
就可以透過SQL指令去驅動Athena服務
Athena服務再依據SQL條件去讀取Bucket內文檔
最後將Respon反饋


這算是一個很驚人的做法
Athena串接的接口就是常見的SQL方式
而資料數據是存在S3
不論結合API GETWAY或是直接開放當作儲存源
靈活性都特高
重點它還是Serverless,更能有效利用資源

再結合QuickSight圖形介面
可以很快速就完成資料庫跟數據顯示的功能




以下為實作的紀錄流程:
目的:將S3 Bucket的JSON 套入 Athena

JSON文檔格式:
(假設有很多的類似資料文檔)


(1)搜尋AWS Athena 服務

(2)創建資料庫

在右方query區塊那下query
























按下「Run query」,執行成功後Result會顯示結果

如果創建錯誤,要刪除的話,下刪除query即可。



(3)創建資料表
創建好資料庫後,就要創建資料表,
資料表的格式要依據來源json的檔案格式來進行創建
依據上方預設的資料格式
在右方區域下query

創建完成後,則會生成資料表。

上面有幾個參數
LOCATION為要連結的s3 bucket
SERDEPROPERTIES 為要設置的SERDE屬性方式
詳細的設定可以去看類庫的文檔

這裡範例的SERDE使用是"org.openx.data.jsonserde.JsonSerDe"類庫
SERDESerialize/Deserilize(序列化跟反序列化)的簡稱


而AWS有提供二種JsonSerDe類庫供選擇使用
相關創建資料表也需注意類庫的使用規範
https://aws.amazon.com/tw/premiumsupport/knowledge-center/error-json-athena/

而使用JSONSerDe有需要特別注意的地方:

每行必須是完整的JSON,也就是說SERDE不會對多行有效(換行)
詳細原因可能就要去深入了解JsonSerDe類庫的原理...
這裡就先遵循官方的定義方式去操作。

將之前的JSON數據更改為









(4)資料指令操作
以上動作都做完。
基本上就已經完成了。
這時候可以使用熟悉的SQL指令測試一下

如果發現搜索不到資料,可能要注意一下來源檔JSON的格式是否符合規範






張貼留言