[英]Redshift showing 0 rows for external table, though data is viewable in Athena
我在 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)
检查您的 parquet 文件并确保 Spectrum 表中的列数据类型匹配。
然后运行SELECT pg_last_query_id();
在查询后获取查询编号并查看系统表STL_S3CLIENT
和STL_S3CLIENT_ERROR
以查找有关查询执行的更多详细信息。
当您已经基于 Glue Data Catalog 定义了外部模式时,您不需要定义外部表。 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
有没有解决这个问题的方法? 一年下来,我今天有同样的问题。 在架构差异方面没有什么突出的 - 虽然存在错误
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
不确定这意味着什么。
我在使用 RegexSerDe 行格式在 Athena 中创建外部表时遇到了类似的问题。 我能够毫无问题地从 Athena 查询这个外部表。 但是,当从 Redhift 查询外部表时,结果为空。
通过转换为 parquet 格式解决,因为 Spectrum 无法处理正则表达式序列化。
请参阅以下链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.