【问题标题】:Athena create table from parquet schemaAthena 从 parquet 模式创建表
【发布时间】:2017-03-29 16:13:23
【问题描述】:

有没有办法直接从基于 avro 模式的 parquet 文件在 Amazon Athena 中创建表?架构被编码到文件中,所以我需要自己实际创建 DDL 似乎很愚蠢。

我看到了this 和另一个duplication

但它们与 Hive 直接相关,它不适用于 Athena。 理想情况下,我正在寻找一种无需在控制台中定义的方式以编程方式进行的方法。

【问题讨论】:

  • 尝试它(或至少阅读文档 - docs.aws.amazon.com/athena/latest/ug/creating-tables.html)比决定它不起作用更有效率。
  • 阅读并尝试过,Athena 只支持 CREATE EXTERNAL TABLE,建议的解决方案是基于 CREATE TABLE 的 avro 模式,而不是为 parquet 创建外部表
  • 所以创建一个外部表。为什么重要?
  • 我不知道这正是我发布此问题的原因。尝试将其更改为外部表,但无法使用这种语法创建它。如果您有关于 Athena 的示例,非常欢迎您分享:)
  • 不幸的是,我可以访问 Presto 但不能访问 Athena,否则我会在之前提供一个答案... :-) 你能分享你在尝试使用外部表时遇到的错误吗?

标签: java amazon-web-services hive presto amazon-athena


【解决方案1】:

现在使用AWS Glue 或多或少可以做到这一点。 Glue 可以爬取一堆不同的数据源,包括Parquet files on S3。发现的表将添加到 Glue 数据目录中,并可从 Athena 查询。根据您的需要,您可以安排 Glue 爬虫定期运行,也可以使用 Glue API 定义和运行爬虫。

如果您有许多共享架构的单独数据块,您还可以使用 partitioned table 来减少为 Athena 提供新负载的开销。例如,我有一些每日转储,它们加载到按日期分区的表中。只要架构没有改变,那么您需要做的就是MSCK REPAIR TABLE

【讨论】:

  • Glue 爬取数据源。只想创建表。 Athena 不需要胶水,只需要在 parquet 中定义的模式复制/粘贴等。产品经理?
【解决方案2】:

Athena 似乎不可能,因为 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

【讨论】:

猜你喜欢
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2014-12-09
  • 2015-07-22
  • 2021-12-02
  • 1970-01-01
相关资源
最近更新 更多