微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按字符串的一部分红移分区外部表

如何解决按字符串的一部分红移分区外部表

经过几天的搜索,我还没有看到答案 - 所以在这里

我有一个带有 foo 表的 Athena 数据库。将它添加到 Redshift 我使用这个命令:

create external schema athena_schema from data catalog 
database 'my-catalog-db' 
iam_role '...role/my_redshift_role';

我的表 foo 有 45 个字段,其中之一是存储为字符串的时间戳。我只想通过字符串的日期部分对表中的数据进行分区。

字符串看起来像'2021/02/09 20:10:09:001',我们称之为mydate

所以我试过了:

alter table athena_schema.foo
partition(left(mydate,10) = '2021/02/09')
location 's3://my s3 location/foo_2021_02_09/';

而且 Redshift 不喜欢现有字段上的子字符串命令。我试过了。 有任何想法吗? 感谢您抽出宝贵时间。

解决方法

当您在 Redshift Spectrum(和 Athena)外部表中定义分区时,分区列将成为您表中的单独列。这意味着您不能将分区映射到存在于表数据文件中的列上。

在来自 "Partitioning Redshift Spectrum external tables" 的示例 DDL 中,您可以看到分区列 saledate 被添加为表中的另一列。

CREATE EXTERNAL TABLE spectrum.sales_part (
      salesid     INTEGER,listid      INTEGER,sellerid    INTEGER,buyerid     INTEGER,eventid     INTEGER,dateid      SMALLINT,qtysold     SMALLINT,pricepaid   DECIMAL(8,2),commission  DECIMAL(8,saletime    TIMESTAMP               )
PARTITIONED BY (saledate CHAR(10))
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 's3://awssampledbuswest2/tickit/spectrum/sales_partition/'
TABLE PROPERTIES ('numRows'='172000');

--Add partitions
ALTER TABLE spectrum.sales_part ADD
PARTITION (saledate='2008-01') LOCATION 's3://awssampledbuswest2/tickit/spectrum/sales_partition/saledate=2008-01/'
PARTITION (saledate='2008-02') LOCATION 's3://awssampledbuswest2/tickit/spectrum/sales_partition/saledate=2008-02/'
PARTITION (saledate='2008-03') LOCATION 's3://awssampledbuswest2/tickit/spectrum/sales_partition/saledate=2008-03/';

--Query using partition column `saledate`
SELECT TOP 5 
       spectrum.sales_part.eventid,SUM(spectrum.sales_part.pricepaid)
FROM spectrum.sales_part,event
WHERE spectrum.sales_part.eventid = event.eventid
  AND spectrum.sales_part.pricepaid > 30
  AND saledate = '2008-01'
GROUP BY spectrum.sales_part.eventid
ORDER BY 2 DESC;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。