2017-03-29 57 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