我在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)
答案 0 :(得分:0)
检查拼花地板文件,并确保“光谱”表中的列数据类型匹配。
然后在查询后运行SELECT pg_last_query_id();
以获取查询号,并在系统表STL_S3CLIENT
和STL_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 无法处理正则表达式序列化。
见以下链接: