Использование Redshift Spectrum для чтения данных во внешней таблице в AWS Redshift

#amazon-redshift #amazon-redshift-spectrum

#amazon-redshift #amazon-redshift-spectrum

Вопрос:

Я проделал нижеприведенное в AWS Redshift cluster, чтобы прочитать файл Parquet из S3.

 create external schema s3_external_schema 
from data catalog 
database 'dev' 
iam_role 'arn:aws:iam::<MyuniqueId>:role/<MyUniqueRole>'
create external database if not exists;
  

затем

 CREATE external table s3_external_schema.SUPPLIER_PARQ_1 (
S_SuppKey BIGINT ,
S_Name varchar(64) ,
S_Address varchar(64) ,
S_NationKey int ,
S_Phone varchar(18) ,
S_AcctBal decimal(13, 2) ,
S_Comment varchar(105))
partitioned by (Supplier bigint, nation int)
stored as PARQUET
location 's3://<My Bucket>/<File partition>/';
  

Оба вышеуказанных оператора create были успешными. Когда выполняется приведенный ниже запрос, он возвращает 0.

 select * from s3_external_schema."supplier_parq_1"
limit 10;

No rows returned.
  

Мне не хватает каких-либо грантов или прав доступа, чтобы заставить его возвращать выходные данные запроса.

Ответ №1:

В дополнение к тому, что сказал Джон Скотт, если внешняя таблица создается с разделами, если не выполняется ALTER TABLE добавление разделов, данные отображаться не будут

Что необходимо выполнить после создания таблицы и добавления последующих разделов, так это

 ALTER TABLE s3_external_schema.SUPPLIER_PARQ_1 ADD PARTITION ('...')
LOCATION 's3://<My Bucket>/<File partition>/'
  

Для проверки сообщений об ошибках при запросах к внешней таблице SVL_S3LOG следует использовать таблицу.

Ответ №2:

Шаги по отладке нерабочего запроса Redshift-Spectrum

  1. попробуйте тот же запрос с помощью athena: самый простой способ — запустить поисковый робот glue для папки s3, он должен создать таблицу метахранилища hive, к которой вы можете сразу запросить (используя тот же sql, что у вас уже есть) в athena.
  2. используйте s3 select: с помощью консоли aws перейдите к одному из ваших файлов parquet, щелкните правой кнопкой мыши и «выбрать», затем выберите parquet (возможно, он уже установлен по умолчанию) и посмотрите, что вы получите.

Если 1. или 2. работают, то, скорее всего, ваше определение неверно в spectrum. вместо этого просто используйте определение, созданное в метахране hive, вот так.

 create external schema some_schema from data catalog
database 'the_name_you_gave_the_hive_db'
iam_role 'whatever'
create external database if not exists;
  

Затем вы можете просто использовать недавно определенную схему redshift spectrum без дальнейшего определения.