Mit*_*ukk 0 amazon-web-services aws-cloudformation amazon-athena serverless
我使用无服务器文件 + CloudFormation 在 AWS Athena 服务上创建表。
我的无服务器.yml:
...
CardBulkWorkgroup:
Type: AWS::Athena::WorkGroup
Properties:
Name: ${opt:stage}-${opt:client}-CardBulk
WorkGroupConfiguration:
ResultConfiguration:
OutputLocation: s3://${lower:${opt:stage}}-${lower:${opt:client}}-card-bulk-athena-result
CardBulkDatabase:
Type: AWS::Glue::Database
Properties:
CatalogId: !Ref AWS::AccountId
DatabaseInput:
Name: ${lower:${opt:stage}}_${lower:${opt:client}}_bulkcard
CardBulkTable:
Type: AWS::Glue::Table
Properties:
CatalogId: !Ref AWS::AccountId
DatabaseName: !Ref CardBulkDatabase
TableInput:
Name: card
StorageDescriptor:
Columns:
- Name: cardId
Type: int
- Name: metadata
Type: struct<orderId:string, convertVirtualToPhysicalErrors:string>
- Name: orderId
Type: string
- Name: errors
Type: string
Location: s3://${lower:${opt:stage}}_${lower:${opt:client}}-files/cards
InputFormat: org.apache.hadoop.mapred.TextInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat
SerdeInfo:
SerializationLibrary: org.openx.data.jsonserde.JsonSerDe
Parameters:
"serialization.format": "1"
CardBulkAthenaBucketResult:
Type: AWS::S3::Bucket
Properties:
BucketName: ${lower:${opt:stage}}-${lower:${opt:client}}-card-bulk-athena-result
...
Run Code Online (Sandbox Code Playgroud)
当我部署堆栈时,数据库dev_connect_bulkcard和我的表卡 已正确创建。
问题:
使用我的API,当我想从dev_connect_bulkcard数据库的卡表中检索数据时,我收到此错误。
“HIVE_METASTORE_ERROR:错误:名称应位于“struct <orderId:string,convertVirtualToPhysicalErrors:string>”的位置 22,但找到了“ ”。
但是,如果我直接从 AWS 控制台(从 Athena 服务)删除卡表,并使用以下查询生成它:
CREATE EXTERNAL TABLE `card`(
`cardid` int COMMENT 'from deserializer',
`orderid` string COMMENT 'from deserializer',
`metadata` struct<orderid:string,convertvirtualtophysicalerrors:string> COMMENT 'from deserializer',
`errors` array<string> COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION
's3://my-bucket-files/cards'
TBLPROPERTIES (
'has_encrypted_data'='false',
'transient_lastDdlTime'='1627378097')
Run Code Online (Sandbox Code Playgroud)
这是工作,我可以使用我的API从卡表返回数据。
您知道为什么我必须手动删除表,然后重新创建它才能恢复结果吗?
提前致谢,
编辑:解决方案Prabhakar Reddy:
该错误是由于列元数据中存在空间造成的。删除 orderId 和 ConvertVirtualToPhysicalErrors 之间的空格。Athena 不接受空格作为其列名称中的特殊字符。请参阅此了解更多信息。
| 归档时间: |
|
| 查看次数: |
3205 次 |
| 最近记录: |