分区依据的 Amazon Redshift Spectrum 没有 return 结果

Amazon Redshift Spectrum with partitioned by does not return results

给定按日期分区的 S3 存储桶:

year
|___month
    |___day
        |___file_*.parquet

我正在尝试使用以下命令在 amazon redshift Spectrum 中创建 table:

create external table spectrum.visits(
    ip varchar(100),
  user_agent varchar(2000),
  url varchar(10000),
  referer varchar(10000),
  session_id char(32),
  store_id int,
  category_id int,
  page_id int,
  product_id int,
  customer_id int,
  hour int
)
partitioned by (year char(4), month varchar(2), day varchar(2))
stored as parquet
location 's3://visits/visits-parquet/';

虽然没有抛出错误消息,但查询的结果始终为空,即不return结果。存储桶不为空。有人知道我做错了吗?

在 Amazon Redshift Spectrum 中创建外部 Table 时,它 不会扫描现有分区 。因此,Redshift 并不知道它们的存在。

您需要为每个现有分区执行 ALTER TABLE ... ADD PARTITION 命令。

(Amazon Athena 有一个 MSCK REPAIR TABLE 选项,但 Redshift Spectrum 没有。)