Amazon cloudformation 在查询字符串中替换变量

Amazon cloudformation 在查询字符串中替换变量,amazon-cloudformation,Amazon Cloudformation,此模板正在按预期工作。但是当我把它改为函数替换时,它抛出了一个错误 工作模板: Parameters: MyS3Bucket: Type: String Resources: createTableOriginalCsv: Type: 'AWS::Athena::NamedQuery' Properties: Database: default Description: First query to create table based o

此模板正在按预期工作。但是当我把它改为函数替换时,它抛出了一个错误

工作模板:

Parameters:
  MyS3Bucket:
    Type: String
Resources:
  createTableOriginalCsv:
    Type: 'AWS::Athena::NamedQuery'
    Properties:
      Database: default
      Description: First query to create table based on AWS bucket data
      Name: Blog1CreateTableOriginalCsv
      QueryString: >-
        CREATE table new_parquet11 WITH (format='PARQUET',
        parquet_compression='SNAPPY',  partitioned_by=array['year'],
        external_location = 's3://MyS3Bucket/optimized-data11/') AS SELECT
        id, date, element, datavalue, mflag, qflag, sflag, obstime,
        substr("date",1,4) AS year FROM original_csv WHERE
        cast(substr("date",1,4) AS bigint) >= 2015 AND cast(substr("date",1,4)
        AS bigint) <= 2019
参数:
MyS3Bucket:
类型:字符串
资源:
createTableOriginalCsv:
类型:“AWS::Athena::NamedQuery”
特性:
数据库:默认值
Description:基于AWS bucket数据创建表的第一个查询
名称:Blog1CreateTableOriginalCsv
查询字符串:>-
使用(format='PARQUET',创建表格new_parquet11,
拼花地板的压缩率=快,分区率=阵列['year'],
外部位置='s3://MyS3Bucket/optimized-data11/')作为选择
id、日期、元素、数据值、mflag、qflag、sflag、obstime、,
子项(“日期”,1,4)为自原始csv起的年份,其中
演员阵容(子名单(“日期”,1,4)为bigint)>=2015,演员阵容(子名单(“日期”,1,4)
AS bigint)=2015年和演员阵容(子名单(“日期”,1,4)
作为bigint)警告:

E1019 Sub应该是资源/createTableOriginalCsv/Properties/QueryString/Fn::Sub的2个数组

因为要么需要两个元素的列表(一个字符串和一个变量映射),要么只需要一个字符串。您可以通过删除第一个
-
,使其不再是包含一个字符串的列表,从而使其成为字符串:

  QueryString: !Sub
    |-
      CREATE table new_parquet11 WITH (format='PARQUET',
      parquet_compression='SNAPPY',  partitioned_by=array['year'],
      external_location = 's3://${MyS3Bucket}/optimized-data11/') AS SELECT
      id, date, element, datavalue, mflag, qflag, sflag, obstime,
      substr("date",1,4) AS year FROM original_csv WHERE
      cast(substr("date",1,4) AS bigint) >= 2015 AND cast(substr("date",1,4)
      AS bigint) <= 2019
QueryString:!附属的
|-
使用(format='PARQUET',创建表格new_parquet11,
拼花地板的压缩率=快,分区率=阵列['year'],
外部位置='s3://${MyS3Bucket}/optimized-data11/')作为选择
id、日期、元素、数据值、mflag、qflag、sflag、obstime、,
子项(“日期”,1,4)为自原始csv起的年份,其中
演员阵容(子名单(“日期”,1,4)为bigint)>=2015,演员阵容(子名单(“日期”,1,4)
AS bigint)
  QueryString: !Sub
    |-
      CREATE table new_parquet11 WITH (format='PARQUET',
      parquet_compression='SNAPPY',  partitioned_by=array['year'],
      external_location = 's3://${MyS3Bucket}/optimized-data11/') AS SELECT
      id, date, element, datavalue, mflag, qflag, sflag, obstime,
      substr("date",1,4) AS year FROM original_csv WHERE
      cast(substr("date",1,4) AS bigint) >= 2015 AND cast(substr("date",1,4)
      AS bigint) <= 2019