如何为红移光谱中的嵌套 Parquet 类型创建外部表

Posted

技术标签:

【中文标题】如何为红移光谱中的嵌套 Parquet 类型创建外部表【英文标题】:How to create an external table for nested Parquet type in redshift spectrum 【发布时间】:2018-02-06 15:02:20 【问题描述】:

我知道红移和红移频谱不支持嵌套类型,但我想知道有什么技巧可以绕过该限制并使用 Redshift Spectrum 在 S3 中查询嵌套数据? 在这个post 中,这个家伙展示了我们如何为 JSON 文件做到这一点,但对于 Parquet 来说却不一样。我们还有其他可以应用于 Parquet 文件的技巧吗?

实际的 Schema 是这样的:(由 AWS-Glue 爬虫提取)

CREATE EXTERNAL TABLE `parquet_nested`(
  `event_time` string, 
  `event_id` string, 
  `user` struct<ip_address:string,id:string,country:string>, 
  `device` struct<platform:string,device_id:string,user_agent:string>
  )
PARTITIONED BY ( 
  `partition_0` string, 
  `partition_1` string, 
  `partition_2` string, 
  `partition_3` string, 
  `partition_4` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://...'

【问题讨论】:

【参考方案1】:

@Am1rr3zA 现在,RedShift 光谱支持查询嵌套数据集。它不仅支持 JSON,还支持压缩格式,如 parquet、orc。这里,是reference sample from AWS

我在我的 s3 存储桶中创建了指向镶木地板文件的外部表。所以这是可能的。

试试这个脚本

CREATE EXTERNAL TABLE spectrum.parquet_nested (
   event_time varchar(20),
   event_id varchar(20),
   user 
 struct<ip_address:varchar(20),id:varchar(20),country:varchar(20)>,
   device 
 struct<platform:varchar(20),device_id:varchar(20),user_agent:varchar(20)>
    )
    STORED AS PARQUET
    LOCATION 's3://BUCKETNAME/parquetFolder/';

希望,这可以节省您的特技冒险 :)

【讨论】:

谢谢,我去看看。

以上是关于如何为红移光谱中的嵌套 Parquet 类型创建外部表的主要内容,如果未能解决你的问题,请参考以下文章

使用胶水数据目录中定义的外部表红移光谱

如何为红移中字符串的唯一计数百分比?

无法在红移光谱外部模式中创建视图

我使用红移光谱查询 S3 数据,但遇到保留字冲突问题

如何在红移光谱中创建一个外部表,其中文件位置每天都会改变?

如何为解构对象中的嵌套函数编写类型?