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

时间:2018-02-06 15:02:20

标签: amazon-web-services parquet amazon-redshift-spectrum

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

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

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 个答案:

答案 0 :(得分:1)

@ Am1rr3zA 现在,RedShift Spectrum支持查询嵌套数据集。它不仅支持JSON,还支持诸如木地板,兽人之类的压缩格式。这是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/';

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