Amazon s3 红移显示外部表的0行,但数据在Athena中可见

Amazon s3 红移显示外部表的0行,但数据在Athena中可见,amazon-s3,amazon-redshift,parquet,amazon-athena,amazon-redshift-spectrum,Amazon S3,Amazon Redshift,Parquet,Amazon Athena,Amazon Redshift Spectrum,我用红移创建了一个外部表,然后向指定的S3文件夹添加了一些数据。我可以在雅典娜中完美地查看所有数据,但我似乎无法从红移中查询。奇怪的是,select count*可以工作,这意味着它可以找到数据,但实际上却不能显示任何内容。我猜这是某个地方的错误配置,但我不确定是什么 一些可能相关的东西我匿名了一些东西: create external schema spectrum_staging from data catalog database 'spectrum_db' iam_role 'arn:a

我用红移创建了一个外部表,然后向指定的S3文件夹添加了一些数据。我可以在雅典娜中完美地查看所有数据,但我似乎无法从红移中查询。奇怪的是,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)

检查拼花地板文件,确保Spectrum表中的列数据类型匹配


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

如果已基于Glue数据目录定义了外部架构,则无需定义外部表。红移光谱图显示目录中的所有表格

这里可能发生的情况是,您不知何故有两个同名的东西,在一种情况下,它从数据目录中提取,在另一种情况下,它尝试使用外部表

从红移侧查看这些表格,以便更好地查看其中的内容: 从SVV_外部_模式中选择* 从SVV_外部_表中选择* 从SVV_外部_分区中选择* 从SVV_外部_列中选择*

这些表用于使用外部架构中的表的查询: 从SVL\U S3QUERY\U摘要中选择* 按事件时间描述从SVL_S3日志顺序中选择* 从SVL_S3QUERY中选择*其中query=xyz 从SVL\U S3分区中选择*其中query=xyz

这有解决方案吗?一年过去了,我今天也有同样的问题。 在模式差异方面没有什么突出的地方——尽管存在错误

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/deva6770209cb9cffcd4f6a61e1c32a5b3dcc/0


不确定这意味着什么。

在使用RegexSerDe行格式在Athena中创建外部表时,我遇到了类似的问题。我可以从雅典娜那里查询这个外部表,没有任何问题。但是,从RedShift查询外部表时,结果为空

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

请参阅下面的链接:


谢谢你的回复。据我所知,这些类型是匹配的。我用varchar100创建了表,并用“UTF8”编写了它们。拼花检查器向我显示拼花文件的类型:id:BYTE\u ARRAY UTF8,error:BYTE\u ARRAY UTF8。我尝试了其他步骤,但没有得到多少信息。也许我做错了?db=从频谱中选择*错误;0行db=选择pg\u last\u query\u id;330810 db=从stl_S3客户机中选择*,其中查询=330810;0行db=从stl\U s3client\U错误中选择*,其中查询=330810;0行我以前从未尝试过使用AWS胶水。无论如何,我看到了我在数据目录中创建的外部表。我认为不存在重复的问题,因为如果我从数据目录中删除它,它就会从外部表列表中消失。运行查询时,架构、表和列都在SVV_EXTERNAL_*中,数据没有分区,因此分区中没有任何内容。S3LOG中没有错误。奇怪的是,它确实在S3_查询中找到了拼花地板文件。但是s3\u扫描的\u行和返回的\u行为0。s3\u扫描的\u字节显示它读取每个拼花地板文件。还有其他想法吗?也许再看看文件创建。可能是拼花文件中的字段是大写的,或者其他一些随机的废话,比如ID vs ID。出于某种原因,AWS胶水数据目录/表格定义不能很好地处理大写字母。我与AWS联系,很明显红移光谱中存在一个错误,无法解析使用十进制+二进制创建的拼花结合体解决方法是使用固定长度的二进制数组而不是二进制数组。