如何将镶木地板格式的特定列加载到红移光谱中?



我正在尝试将特定列加载到 Redshift Spectrum 中,但似乎数据正在按位置加载,这意味着我为列名放置什么并不重要。

为了使这一点更具体:

假设我要加载的数据以 A、B、C 列的形式存储在镶木地板中。我只想要 B 列,所以我写:

create external table spectrum.Foo(
B varchar(500)
)
STORED AS PARQUET
LOCATION 's3://data/';

不幸的是,当我这样做时,它实际上将 A 的数据加载到 Foo.B 中

我需要一些额外的语法吗?我搜索了文档,但找不到任何东西。

谢谢!

定义外部表不会将数据加载到 Redshift 中 - 它只是使您能够查询它。如果只想引入列的子集,可以尝试以下一组查询:

create external table spectrum.Foo(
A varchar(100), B varchar(100), C varchar(100)
) stored as parquet location 's3://data/';

这定义了外部架构:

create table local_data as select A, C from spectrum.Foo;

这实际上只会将外部表中的指定列加载到 Redshift 中的本地表中。但是,您不需要这样做:Redshift Spectrum 和 Parquet 的优势在于,当您运行查询时:

select A, C from spectrum.Foo;

它只会从 S3 加载访问列的数据,从而将 IO 操作次数减少到 S3 并降低成本。

如果你有一个现有的红移表,Spectrify提供了一种易于使用的方法,将数据移动到Spectrum——https://github.com/hellonarrativ/spectrify/

相关内容

最新更新