2017-03-29 80 views
2

有沒有一種方法可以直接從基於avro模式的parquet文件在Amazon Athena中創建表?模式被編碼到文件中,所以它似乎很愚蠢,我需要自己真正創建DDL。Athena從拼花模式創建表

我看到this也是另一個duplication

但它們直接關係到蜂巢,它不會對雅典娜工作。 理想情況下,我正在尋找一種以編程方式執行此操作的方式,而無需在控制檯上對其進行定義。

+0

嘗試它會更有成效(或至少閱讀文檔 - http://docs.aws.amazon.com/athena/latest/ug/creating-tables.html)比決定它贏得'工作。 –

+0

閱讀並嘗試過,Athena只支持CREATE EXTERNAL TABLE,建議的解決方案是基於CREATE TABLE的avro schema並且只能爲實體創建外部的一個 – NetanelRabinowitz

+0

因此創建一個外部表。爲什麼它很重要? –

回答

0

雅典娜似乎不可能,因爲avro.schema.url不是受支持的屬性。

table property 'avro.schema.url' is not supported. (Service: AmazonAthena; Status Code: 400; Error Code: InvalidRequestException...)

可以使用avro.schema.literal(你將不得不在Avro的JSON模式複製到查詢),但我還是經歷了事後查詢數據的問題。

奇怪的錯誤,如: SYNTAX_ERROR: line 1:8: SELECT * not allowed in queries without FROM clause

+1

你提到的「奇怪的錯誤」似乎是一個presto中的錯誤:https://github.com/prestodb/presto/issues/8654 – fiorix

0

這是現在使用的AWS Glue更多或更少的可能。膠水可以抓取一堆不同的數據源,包括Parquet files on S3。已發現的表格被添加到膠水數據目錄中並可從雅典娜查詢。根據您的需要,您可以安排定期運行Glue爬蟲程序,也可以使用Glue API定義並運行爬蟲程序。

如果您有許多獨立的數據共享模式,您還可以使用partitioned table來減少向雅典娜提供新負載的開銷。例如,我有一些日常轉儲加載到按日期分區的表中。只要架構沒有改變,那麼你所需要做的就是MSCK REPAIR TABLE