我在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>/';
以上两个create语句均成功。当运行以下查询时,它返回0。
select * from s3_external_schema."supplier_parq_1"
limit 10;
No rows returned.
我是否缺少任何授予或访问权限,以使其返回查询输出。
答案 0 :(得分:1)
调试无效的Redshift-Spectrum查询的步骤
如果1.或2.在工作,则可能是您的定义在光谱上不正确。而是只使用在配置单元metastore中创建的定义,就像这样。
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;
然后,您可以使用新定义的红移频谱模式而无需进一步定义。
答案 1 :(得分:0)
除了乔恩·斯科特(Jon Scott)所说的那样,如果使用分区创建了一个外部表,除非运行ALTER TABLE
来添加分区,否则将不会显示任何数据
创建表并添加后续分区后需要运行的是
ALTER TABLE s3_external_schema.SUPPLIER_PARQ_1 ADD PARTITION ('...')
LOCATION 's3://<My Bucket>/<File partition>/'
要检查外部表查询的错误消息,应使用SVL_S3LOG
表。