2017-07-07 50 views
1

我試圖將特定的列加載到Redshift Spectrum中,但是它似乎是在位置加載數據,這意味着我爲列名放置的並不重要。如何將裝入木條的特定列加載到Redshift譜中?

爲了使這更加具體:

比方說,我要加載的數據進行位置存儲在實木複合地板爲列A,B,C。我只希望B列,所以我寫:

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

不幸的是,當我這樣做時,它實際上將A的數據加載到Foo.B

是否存在一些我需要的額外語法。我搜查了文檔,但找不到任何東西。

謝謝!

回答

0

定義外部表格不會將數據加載到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的本地表格中。不過,你不需要做:紅移譜和實木複合地板的優點是,當您運行查詢:

select A, C from spectrum.Foo; 

它只會加載從S3數據的訪問的列,減少數量IO操作到S3並降低成本。

+0

感謝您的明確解釋! – user5976738

相關問題