【发布时间】:2021-10-28 10:45:24
【问题描述】:
我们使用 boto3 方法创建一个 Glue 表。该表已创建,我们可以从 Hive 或使用 Athena boto3 进行 msck 修复。
问题是数据没有填充到 Athena,在 Athena 中只填充了分区列。在 Hive 中,所有列都已填充。
使用boto3创建表的代码
response = glue_client.create_table(
DatabaseName='avro_database',
TableInput={
"Name": "avro_table_name",
"Description": "Table created with boto3 API",
"StorageDescriptor": {
"Location": "s3://bucket_name/api/avro_folder",
"InputFormat": "org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat",
"OutputFormat": "org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat",
"SerdeInfo": {
"SerializationLibrary": "org.apache.hadoop.hive.serde2.avro.AvroSerDe",
"Parameters": {
"DeserializationLibrary": "org.apache.hadoop.hive.serde2.avro.AvroSerDe",
},
},
},
"PartitionKeys": [
{
"Name": "insert_yyyymmdd",
"Type": "string",
}
],
"TableType": "EXTERNAL_TABLE",
"Parameters": {
"avro.schema.url": "s3://bucket/schema/L1/api/schema_avro.avsc",
'transient_lastDdlTime': '1635259605'
}
},
)
创建表后,我们还可以在Athena中查询表定义
雅典娜中的 DDL
CREATE EXTERNAL TABLE avro_table(
`error_error_error_error_error_error_error` string COMMENT 'from deserializer',
`cannot_determine_schema` string COMMENT 'from deserializer',
`check` string COMMENT 'from deserializer',
`schema` string COMMENT 'from deserializer',
`url` string COMMENT 'from deserializer',
`and` string COMMENT 'from deserializer',
`literal` string COMMENT 'from deserializer')
PARTITIONED BY (
`insert_yyyymmdd` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES (
'DeserializationLibrary'='org.apache.hadoop.hive.serde2.avro.AvroSerDe')
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION
's3://bucket_name/api/avro_folder'
TBLPROPERTIES (
'avro.schema.url"= "s3://bucket/schema/L1/api/schema_avro.avsc',
'transient_lastDdlTime'= '1635259605')
当我在 Athena 中查询时
select * from "avro_database"."avro_table"
仅填充分区列 (insert_yyyymmdd )。
【问题讨论】:
-
你
msck repair table的结果是什么?您需要有 hive 样式的分区才能工作,即 key=value 在您的 s3 位置。否则你需要使用alter table add partition -
@Eman,msck 修复工作正常,我只有 hive 样式的分区,即 start_yyyyddmm=date 在 s3 位置。
标签: python hive boto3 aws-glue amazon-athena