【问题标题】:Using Redshift Spectrum to read the data in external table in AWS Redshift使用 Redshift Spectrum 读取 AWS Redshift 外部表中的数据
【发布时间】:2019-08-19 16:21:48
【问题描述】:

我在 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.

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

【问题讨论】:

    标签: amazon-redshift amazon-redshift-spectrum


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      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;
      

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

      【讨论】:

        猜你喜欢
        • 2017-11-23
        • 1970-01-01
        • 2019-08-10
        • 1970-01-01
        • 1970-01-01
        • 2023-01-16
        • 1970-01-01
        • 2019-09-27
        • 1970-01-01
        相关资源
        最近更新 更多