2

我在 AWS Redshift 集群中执行了以下操作以从 S3 读取 Parquet 文件。

create external schema s3_external_schema 
from data catalog 
database 'dev' 
iam_role 'arn:aws:iam::<MyuniqueId>:role/<MyUniqueRole>'
create external database if not exists;

然后

CREATE external table s3_external_schema.SUPPLIER_PARQ_1 (
S_SuppKey BIGINT ,
S_Name varchar(64) ,
S_Address varchar(64) ,
S_NationKey int ,
S_Phone varchar(18) ,
S_AcctBal decimal(13, 2) ,
S_Comment varchar(105))
partitioned by (Supplier bigint, nation int)
stored as PARQUET
location 's3://<My Bucket>/<File partition>/';

上述两个创建语句都成功。当运行以下查询时,它返回 0。

select * from s3_external_schema."supplier_parq_1"
limit 10;

No rows returned.

我是否缺少任何授予或访问权限以使其返回查询输出。

4

2 回答 2

4

除了 Jon Scott 所说的,如果创建了带有分区的外部表,除非运行ALTER TABLE添加分区,否则不会显示任何数据

创建表并添加后续分区后需要运行的是

ALTER TABLE s3_external_schema.SUPPLIER_PARQ_1 ADD PARTITION ('...')
LOCATION 's3://<My Bucket>/<File partition>/'

要检查外部表查询的错误消息,SVL_S3LOG应使用表。

于 2019-08-14T16:31:30.743 回答
3

调试不工作的 Redshift-Spectrum 查询的步骤

  1. 尝试使用 athena 进行相同的查询:最简单的方法是针对 s3 文件夹运行胶水爬虫,它应该创建一个配置单元元存储表,您可以在 athena 中立即查询(使用与您已经相同的 sql)。
  2. 使用 s3 select :使用 aws 控制台导航到您的 parquet 文件之一,右键单击并“选择”,然后单击 parquet(可能已经默认)并查看您得到的结果。

如果 1. 或 2. 有效,那么您的定义很可能在频谱上不正确。而是像这样使用在配置单元元存储中创建的定义。

create external schema some_schema from data catalog
database 'the_name_you_gave_the_hive_db'
iam_role 'whatever'
create external database if not exists;

然后,您可以只使用新定义的红移光谱模式而无需进一步定义。

于 2019-03-28T22:00:08.787 回答