问题描述
我正在尝试使用表中的数据创建外部视图,但是收到错误属性验证失败:[AWS]中使用云形成在AWS胶水中创建视图时[属性{/ TableInput / ViewOriginalText}的值与类型{String}不匹配]
任何关于分辨率的想法都将不胜感激。以下是我正在使用的yaml文件代码段。
预先感谢
---
AWstemplateFormatVersion: 2010-09-09
Description: "glue Athena database and table configuration"
Parameters:
MarketingAndSalesDatabaseName:
Type: String
MinLength: "4"
Default: "marketingandsales_qs"
Description: "Name of the AWS glue database to contain this CloudFormation template's tables."
SalesPipelineTableName:
Type: String
MinLength: "4"
Default: "salespipeline_qs"
Description: "Name of the Sales Pipeline data table in AWS glue."
Resources:
### AWS gluE RESOURCES ###
MarketingAndSalesDatabase:
Type: "AWS::glue::Database"
Properties:
DatabaseInput:
Description: "Marketing and Sales database (Amazon QuickSight Samples)."
Name: !Ref MarketingAndSalesDatabaseName
CatalogId: !Ref AWS::AccountId
SalesPipelineTable:
Type: "AWS::glue::Table"
DependsOn: MarketingAndSalesDatabase
Properties:
TableInput:
Description: "Sales Pipeline table (Amazon QuickSight Sample)."
TableType: "VIRTUAL_VIEW"
Parameters: {
"CrawlerSchemaDeserializerVersion": "1.0","compressionType": "none","classification": "csv","recordCount": "16831","typeOfData": "file","CrawlerSchemaSerializerVersion": "1.0","columnsOrdered": "true","objectCount": "1","delimiter": ",","skip.header.line.count": "1","averageRecordSize": "119","sizeKey": "2002910","presto_view": "true"
}
StorageDescriptor:
StoredAsSubDirectories: False
Parameters: {
"CrawlerSchemaDeserializerVersion": "1.0","sizeKey": "2002910"
}
InputFormat: "org.apache.hadoop.mapred.TextInputFormat"
OutputFormat: "org.apache.hadoop.hive.ql.io.HiveIgnoreKeytextoutputFormat"
Columns:
- Type: string
Name: salesperson
- Type: string
Name: lead_name
ViewOriginalText:
'Fn::Sub':
- '/* Presto View: ${View} */'
- View:
'Fn::Base64': !sub '{"catalog": "awsdatacatalog","schema":"default","columns": [ { "name": "salesperson","type": "varchar" },{ "name": "lead_name","type": "varchar" }],"originalsql": "SELECT salesperson AS salesperson,lead_name AS lead_name FROM marketing_qs_1"
}'
Retention: 0
Name: !Ref SalesPipelineTableName
DatabaseName: !Ref MarketingAndSalesDatabaseName
CatalogId: !Ref AWS::AccountId
解决方法
这些属性应位于StorageDescriptor
下方,而不是ViewOriginalText
:
Compressed: False
Location: !Sub "s3://${DataBucketName}/sales/"
建议在创作模板时尝试在CloudFormation Linter中的VSCode内联查看其中一些错误:
[cfn-lint] E3002: Property is an object instead of String at Resources/SalesPipelineTable/Properties/TableInput/ViewOriginalText
Sub
中也不需要
[cfn-lint] W1020: Fn::Sub isn't needed because there are no variables at Resources/SalesPipelineTable/Properties/TableInput/ViewOriginalText/Fn::Sub/1/View/Fn::Base64/Fn::Sub