1

Dans la documentation, AWS::Athena::NamedQuery, il n'est pas clair comment attacher Athena à un compartiment S3 spécifié dans la même pile.Connexion d'Athena et S3 dans la même pile Cloudformation

Si je devais deviner à partir du example, je suppose que vous pouvez écrire un modèle comme,

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/ 

Est-ce qu'un modèle comme le travail ci-dessus? Lors de la création de la pile, la table db_name.test_table sera-t-elle disponible pour exécuter des requêtes?

Répondre

1

Il s'avère que vous connectez le S3 et Athena est de faire une table de colle! C'est idiot de ma part !! Bien sûr, la colle est la façon dont vous connectez les choses!

Sarcasme mis à part, c'est un modèle qui a fonctionné pour moi lors de l'utilisation AWS::Glue::Table et 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 

Après cela, la base de données et une table étaient dans la AWS Athena Console!