Impala 的 ROW FORMAT DELIMITED、LOCATION 和 STORED 的 PostgreSQL 等价物是什么?

问题描述 投票:0回答:1

我正在致力于将项目从 Impala 迁移到 PostgreSQL。在 Impala 中,我有一个具有以下存储格式和文件位置的表:

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','  
STORED AS TEXTFILE  
LOCATION '/ABCD/%s'

%s 从业务逻辑中获取

SELECT * FROM abc.xyz STORED AS PARQUET

我需要找到在 PostgreSQL 中定义表的等效方法:

分隔字段(例如,以逗号分隔)。 存储为纯文本(即类似 CSV 的格式)。 数据的特定文件位置。 我知道 PostgreSQL 处理外部存储的方式与 Impala 不同,因此我正在寻找处理此问题的最佳方法。 COPY 是从像这样的外部位置加载数据的正确方法吗?还是还有其他推荐的方法?

我尝试了很多方法,但找不到任何方法来找到等效的

那么我可以知道

的等效内容吗?
STORED AS PARQUET

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','  
STORED AS TEXTFILE  
LOCATION '/ABCD/%s'
database postgresql impala data-conversion equivalent
1个回答
0
投票

最好的近似方法是使用 file_fdw 扩展名:

-- as superuser
CREATE EXTENSION file_fdw;

-- needed for bureaucratic reasons
CREATE SERVER local_files FOREIGN DATA WRAPPER file_fdw;

-- needed so that everyone can use the foreign table
CREATE USER MAPPING FOR PUBLIC SERVER local_files;

CREATE FOREIGN TABLE abc.xyz (
   col1 integer,
   col2 text,
   col3 timestamp with time zone
) SERVER local_files
OPTIONS (filename '/abc/file.csv', format 'csv', encoding 'UTF8');

/abc/file.csv
可能看起来像这样:

1,some text,2024-10-18 09:00:00+00
2,something else,2024-10-18 10:00:00+00

您可以授予普通用户在外部服务器上的

USAGE
权限,然后您不需要超级用户来创建外部表。

没有“业务逻辑”来生成文件名,因此您需要为要以这种方式访问的每个 CSV 文件定义一个外部表。

© www.soinside.com 2019 - 2024. All rights reserved.