2

我在 Redshift 中创建了一个外部表,然后将一些数据添加到指定的 S3 文件夹中。我可以在 Athena 中完美地查看所有数据,但我似乎无法从 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)
4

4 回答 4

1

检查您的 parquet 文件并确保 Spectrum 表中的列数据类型匹配。

然后SELECT pg_last_query_id();在查询后运行以获取查询编号并查看系统表STL_S3CLIENTSTL_S3CLIENT_ERROR查找有关查询执行的更多详细信息。

于 2018-08-28T15:15:49.353 回答
0

在使用 RegexSerDe 行格式在 Athena 中创建外部表时,我遇到了类似的问题。我能够从 Athena 查询这个外部表而没有任何问题。但是,当从 Redhift 查询外部表时,结果为空。

通过转换为 parquet 格式解决,因为 Spectrum 无法处理正则表达式序列化。

请参阅下面的链接:

红移光谱显示所有行的 NULL 值

于 2021-03-23T04:20:16.993 回答
0

You don't need to define external tables when you have defined external schema based on Glue Data Catalog. Redshift Spectrum pics up all the tables that are in the Catalog.

What's probably going on there is that you somehow have two things with the same name and in one case it picks it up from the data catalog and in the other case it tries to use the external table.

Check these tables from Redshift side to get a better view of what's there: select * from SVV_EXTERNAL_SCHEMAS select * from SVV_EXTERNAL_TABLES select * from SVV_EXTERNAL_PARTITIONS select * from SVV_EXTERNAL_COLUMNS

And these tables for queries that use the tables from external schema: 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

于 2018-08-29T04:08:17.780 回答
0

有过解决方案吗?一年下来,我今天也有同样的问题。在架构差异方面没有什么突出的 - 虽然存在错误

select recordtime, file, process, errcode, linenum as line,
trim(error) as err
from stl_error order by recordtime desc;

/home/ec2-user/padb/src/sys/cg_util.cpp padbmaster 1 601 段编译失败:/rds/bin/padb.1.0.10480/data/exec/227/48844003/de67afa670209cb9cffcd4f6a61e1c32a5b3dccc/0

不知道这意味着什么。

于 2019-10-29T14:48:49.153 回答