HybridDBforPG中如何按照資料內容定製輸出到OSS檔名和檔案個數

曾文旌發表於2018-04-18

使用HybridDB PG的外部表輸出資料到OSS時,一般會輸出成多個檔案(檔案個數一般與節點數個數一致)。如何輸出為一個檔案呢?步驟如下:

1)建立示例表:

create table t3 (a1 text, a2 text ,a3 text, a4 text) distributed by (a1);

insert into t3 values(`xxxxxxx`,`yyyyy`,`zzzzz`,`wwwww`);
insert into t3 select * from test;
insert into t3 select * from test;
insert into t3 select * from test;
insert into t3 select * from test;
insert into t3 select * from test;
insert into t3 select * from test;

2)建立外部表寫表,按源資料表的結構建立外部表。注意:

  • 相對於本地源表的表結構,需要新增一個臨時欄位,例如dummy_col,最好作為第一個欄位。
  • 新增外部表引數 file_name_generator_col = dummy_col 指定臨時欄位名;output_generator_col=false 指定這個臨時欄位中的資料不寫入到檔案中
drop external table test_oss_write;
create writable external table test_oss_write(
  dummy_col text,
  A1  text,
  A2  text,
  A3  text,
  A4  text
)
location(`oss://oss-cn-shanghai.aliyuncs.com 
dir=output_x_file/
id=xxx
key=xxx
bucket=osshuadong2 
output_generator_col=false 
file_name_generator_col=dummy_col
`) FORMAT `csv`  ( DELIMITER `,`) 
distributed by (dummy_col)
;

3) 定製 SQL 將test資料寫入到 oss 中

set rds_write_oss_file_by_distribution_column=on; 

insert into test_oss_write
Select key,a1,a2,a3,a4 from
(
select
  floor(random()*(5-1)+1)::int::text || `e` as key,
  A1,A2,A3,A4   
  from t3
)t order by key;

注意:

  • 使用隨機數來指定產生的檔案個數,這裡我們需要輸出4個檔案,則使用 floor(random()*(5-1)+1)
  • 寫入檔案時,給到寫入節點的資料需要按照key有序,我們使用了order by, 也可以使用視窗函式。

最後OSS上能看到4個檔案,且檔案內容不包含用來定製檔名的虛擬列

$osscmd ls  oss://osshuadong2/output_x_file
prefix list is: 
object list is: 
2018-04-18 15:54:18 2.46KB Standard oss://osshuadong2/output_x_file/1e_577353258534704.1
2018-04-18 15:54:18 2.46KB Standard oss://osshuadong2/output_x_file/2e_577353258534704.2
2018-04-18 15:54:18 2.51KB Standard oss://osshuadong2/output_x_file/3e_577353258534704.2
2018-04-18 15:54:18 2.34KB Standard oss://osshuadong2/output_x_file/4e_577353258534704.1

osscmd get oss://osshuadong2/output_x_file/3e_577353258534704.2 b.txt

cat b.txt 
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww
xxxxxxx,yyyyy,zzzzz,wwwww

使


相關文章