【问题标题】:substitute variables in query string查询字符串中的替换变量
【发布时间】:2019-12-19 09:11:27
【问题描述】:

此模板按预期工作。但是当我将其更改为函数 Substitution 时,它会引发错误。

工作模板:

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

将上面的查询字符串改成这个就不行了:

  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

如何替换查询字符串中的变量?

【问题讨论】:

    标签: amazon-cloudformation


    【解决方案1】:

    CloudFormation Linter 警告:

    E1019 Sub should be an array of 2 for Resources/createTableOriginalCsv/Properties/QueryString/Fn::Sub

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

      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
    

    该行第一个 - 之后的所有内容都是 YAML 多行语法的一部分,此处解释:

    https://yaml-multiline.info/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 2020-07-09
      • 2020-03-30
      • 2014-07-03
      相关资源
      最近更新 更多