#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
- попробуйте тот же запрос с помощью athena: самый простой способ — запустить поисковый робот glue для папки s3, он должен создать таблицу метахранилища hive, к которой вы можете сразу запросить (используя тот же sql, что у вас уже есть) в athena.
- используйте 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 без дальнейшего определения.