Redshift Spectrum 查询 returns S3 文件中的 0 行

Redshift Spectrum query returns 0 row from S3 file

我尝试了 Redshift Spectrum。下面的两个查询都成功结束,没有任何错误消息,但我无法获得 S3 中上传文件的正确计数,它只返回 0 行计数,即使该文件有超过 300 万条记录。

-- Create External Schema
CREATE EXTERNAL SCHEMA spectrum_schema FROM data catalog 
database 'spectrum_db' 
iam_role 'arn:aws:iam::XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
create external database if not exists;

-- Create External Table

create EXTERNAL TABLE spectrum_schema.principals(
tconst VARCHAR (20),
ordering BIGINT,
nconst VARCHAR (20),
category VARCHAR (500),
job VARCHAR (500),
characters VARCHAR(5000)
)
row format delimited
fields terminated by '\t'
stored as textfile
location 's3://xxxxx/xxxxx/'

我也试过选项'stored as parquet',结果是一样的。 我的 iam 角色具有“s3:”、“athena:”、“glue:*”权限,并且 Glue table 创建成功。

为了以防万一,我确认相同的 S3 文件可以成功复制到 Redshift 集群中的 table。所以,我得出结论 file/data 本身没有问题。

如果我的程序或查询有问题。如有任何建议,我们将不胜感激。

由于您的 DDL 未扫描任何数据,因此问题似乎在于它不理解 s3 中的实际数据。要解决这个问题,您可以使用 AWS Glue 爬虫简单地生成 table。

创建 table 后,您可以将此 table 属性与在 Glue 数据目录中使用 DDL 创建的另一个 table 属性进行比较。这将为您提供差异以及使用 DDL 手动创建的 table 中缺少的内容。