Redshift показывает 0 строк для внешней таблицы, хотя данные доступны для просмотра в Афине - PullRequest
0 голосов
/ 28 августа 2018

Я создал внешнюю таблицу в Redshift, а затем добавил некоторые данные в указанную папку S3. Я прекрасно вижу все данные в Афине, но не могу запросить их из Redshift. Что странно, так это то, что select count (*) работает, это означает, что он может найти данные, но на самом деле ничего не показывает. Я предполагаю, что это какая-то неправильная конфигурация где-то, но я не уверен, что.

Некоторые вещи, которые могут иметь отношение (я анонимизировал некоторые вещи):

create external schema spectrum_staging
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::############:role/RedshiftSpectrumRole'
create external database if not exists;

create external table spectrum_staging.errors(
  id varchar(100),
  error varchar(100))
stored as parquet
location 's3://mybucket/errors/';

Мои образцы данных хранятся в s3: //mybucket/errors/2018-08-27-errors.parquet

Этот запрос работает:

db=# select count(*) from spectrum_staging.errors;
 count
-------
    11
(1 row)

Этот запрос не:

db=# select * from spectrum_staging.errors;
 id | error 
----+-------
(0 rows)

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вам не нужно определять внешние таблицы, когда вы определили внешнюю схему на основе каталога данных Glue. Redshift Spectrum показывает все таблицы в каталоге.

Вероятно, здесь происходит то, что у вас почему-то есть две вещи с одинаковым именем, и в одном случае он выбирает их из каталога данных, а в другом случае пытается использовать внешнюю таблицу.

Проверьте эти таблицы со стороны Redshift, чтобы получить лучшее представление о том, что там: select * from SVV_EXTERNAL_SCHEMAS select * from SVV_EXTERNAL_TABLES select * from SVV_EXTERNAL_PARTITIONS select * from SVV_EXTERNAL_COLUMNS

И эти таблицы для запросов, которые используют таблицы из внешней схемы: select * from SVL_S3QUERY_SUMMARY select * from SVL_S3LOG order by eventtime desc select * from SVL_S3QUERY where query = xyz select * from SVL_S3PARTITION where query = xyz

0 голосов
/ 28 августа 2018

Проверьте ваш файл паркета и убедитесь, что типы данных столбцов в таблице Spectrum совпадают.

Затем запустите SELECT pg_last_query_id(); после запроса, чтобы получить номер запроса, и просмотрите системные таблицы STL_S3CLIENT и STL_S3CLIENT_ERROR, чтобы найти дополнительную информацию о выполнении запроса.

...