Как создать внешнюю таблицу для вложенного типа Паркет в спектре красных смещений

Я знаю, что спектр красного смещения и красного смещения не поддерживает вложенный тип, но я хочу знать, есть ли уловка, с помощью которой мы можем обойти это ограничение и запросить наши вложенные данные в S3 с помощью Redshift Spectrum? В этом посте парень показывает, как мы можем сделать это для файлов JSON, но это не то же самое для Parquet. Есть ли у нас какой-то другой трюк, который можно применить к файлу Parquet?

Фактическая схема выглядит примерно так: (извлечено 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://...'

0 ответов

@Am1rr3zA Теперь спектр RedShift поддерживает запросы к вложенному набору данных. Он поддерживает не только JSON, но и форматы сжатия, такие как parquet, orc. Вот эталонный образец от 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/';

Надеюсь, это спасет ваш трюк от приключений:)

Другие вопросы по тегам