在同一个 Cloudformation 堆栈中连接 Athena 和 S3
Posted
技术标签:
【中文标题】在同一个 Cloudformation 堆栈中连接 Athena 和 S3【英文标题】:Connecting Athena and S3 in same Cloudformation Stack 【发布时间】:2018-03-17 15:47:42 【问题描述】:从文档AWS::Athena::NamedQuery 来看,不清楚如何将 Athena 附加到同一堆栈中指定的 S3 存储桶。
如果我不得不从example 中猜测,我想你可以写一个类似的模板,
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
... other params ...
AthenaNamedQuery:
Type: AWS::Athena::NamedQuery
Properties:
Database: "db_name"
Name: "MostExpensiveWorkflow"
QueryString: >
CREATE EXTERNAL TABLE db_name.test_table
(...) LOCATION s3://.../path/to/folder/
像上面这样的模板可以工作吗?创建堆栈后,表db_name.test_table
是否可用于运行查询?
【问题讨论】:
【参考方案1】:原来连接 S3 和 Athena 的方式是制作一个 Glue 表!我怎么这么傻!!当然,胶水是您连接事物的方式!
撇开讽刺不谈,这是一个在使用 AWS::Glue::Table 和 AWS::Glue::Database 时对我有用的模板,
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
MyGlueDatabase:
Type: AWS::Glue::Database
Properties:
DatabaseInput:
Name: my-glue-database
Description: "Glue beats tape"
CatalogId: !Ref AWS::AccountId
MyGlueTable:
Type: AWS::Glue::Table
Properties:
DatabaseName: !Ref MyGlueDatabase
CatalogId: !Ref AWS::AccountId
TableInput:
Name: my-glue-table
Parameters: "classification" : "csv"
StorageDescriptor:
Location:
Fn::Sub: "s3://$MyS3Bucket/"
InputFormat: "org.apache.hadoop.mapred.TextInputFormat"
OutputFormat: "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
SerdeInfo:
Parameters: "separatorChar" : ","
SerializationLibrary: "org.apache.hadoop.hive.serde2.OpenCSVSerde"
StoredAsSubDirectories: false
Columns:
- Name: column0
Type: string
- Name: column1
Type: string
在此之后,数据库和表在 AWS Athena 控制台中!
【讨论】:
另外,您可以看到Sample AWS CloudFormation Template for an AWS Glue Database, Table, and Partition,其中包括数据分区。 干杯 @ignorance 这帮助了我。我正在查看有关 Athena 的文档,并且刚刚了解了我们应该如何设置它。结论重点在胶水以上是关于在同一个 Cloudformation 堆栈中连接 Athena 和 S3的主要内容,如果未能解决你的问题,请参考以下文章
如何知道 sam/cloudformation 堆栈 lambda 正在执行啥
从 lambda 函数中检索 cloudformation 堆栈名称
Cloudformation 找不到区域性 Opsworks 堆栈