Redshift显示外部表的0行,尽管数据在Athena中可见

时间:2018-08-27 23:15:23

标签: amazon-s3 amazon-redshift parquet amazon-athena amazon-redshift-spectrum

我在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 个答案:

答案 0 :(得分:0)

检查拼花地板文件,并确保“光谱”表中的列数据类型匹配。

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

答案 1 :(得分:0)

基于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

答案 2 :(得分: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 1601段编译失败:/rds/bin/padb.1.0.10480/data/exec/227/48844003/de67afa670209cb9cffcd4f6a61e1c32a5b3dccc/0 < / p>

不确定这是什么意思。

答案 3 :(得分:0)

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

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

见以下链接:

Redshift spectrum shows NULL values for all rows