AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Oracle 數(shù)據(jù)量 150T,PostgreSQL 能搞定嗎?

來源: 責(zé)編: 時(shí)間:2024-05-16 17:45:15 137觀看
導(dǎo)讀此版本的 parquet_s3_fdw 適用于 PostgreSQL 13、14、15 和 16。只讀模式下的 Apache Parquet 外部數(shù)據(jù)包裝器,支持 PostgreSQL 訪問 S3 存儲(chǔ)。用法加載擴(kuò)展CREATE EXTENSION parquet_s3_fdw;創(chuàng)建服務(wù)器CREATE SERVER

此版本的 parquet_s3_fdw 適用于 PostgreSQL 13、14、15 和 16。gBm28資訊網(wǎng)——每日最新資訊28at.com

只讀模式下的 Apache Parquet 外部數(shù)據(jù)包裝器,支持 PostgreSQL 訪問 S3 存儲(chǔ)。gBm28資訊網(wǎng)——每日最新資訊28at.com

用法

加載擴(kuò)展

CREATE EXTENSION parquet_s3_fdw;

創(chuàng)建服務(wù)器

CREATE SERVER parquet_s3_srv FOREIGN DATA WRAPPER parquet_s3_fdw;

如果要使用 MinIO 而不是 AWS S3,請使用 use_minio 選項(xiàng)創(chuàng)建服務(wù)器。gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE SERVER parquet_s3_srv FOREIGN DATA WRAPPER parquet_s3_fdw OPTIONS (use_minio 'true');

創(chuàng)建用戶映射

如果要訪問 Amazon S3,則必須指定用戶名和密碼。gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE USER MAPPING FOR public SERVER parquet_s3_srv OPTIONS (user 's3user', password 's3password');

創(chuàng)建外表

現(xiàn)在你應(yīng)該能夠從 Parquet 文件創(chuàng)建外表了。目前parquet_s3_fdw支持下面這些數(shù)據(jù)列類型(還將會(huì)增加):gBm28資訊網(wǎng)——每日最新資訊28at.com

Arrow 類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

SQL 類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT8
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT2
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT16
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT2
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT32
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT4
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT64
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT8
gBm28資訊網(wǎng)——每日最新資訊28at.com

FLOAT
gBm28資訊網(wǎng)——每日最新資訊28at.com

FLOAT4
gBm28資訊網(wǎng)——每日最新資訊28at.com

DOUBLE
gBm28資訊網(wǎng)——每日最新資訊28at.com

FLOAT8
gBm28資訊網(wǎng)——每日最新資訊28at.com

TIMESTAMP
gBm28資訊網(wǎng)——每日最新資訊28at.com

TIMESTAMP
gBm28資訊網(wǎng)——每日最新資訊28at.com

DATE32
gBm28資訊網(wǎng)——每日最新資訊28at.com

DATE
gBm28資訊網(wǎng)——每日最新資訊28at.com

STRING
gBm28資訊網(wǎng)——每日最新資訊28at.com

TEXT
gBm28資訊網(wǎng)——每日最新資訊28at.com

BINARY
gBm28資訊網(wǎng)——每日最新資訊28at.com

BYTEA
gBm28資訊網(wǎng)——每日最新資訊28at.com

LIST
gBm28資訊網(wǎng)——每日最新資訊28at.com

ARRAY
gBm28資訊網(wǎng)——每日最新資訊28at.com

MAP
gBm28資訊網(wǎng)——每日最新資訊28at.com

JSONB
gBm28資訊網(wǎng)——每日最新資訊28at.com

目前parquet_s3_fdw不支持結(jié)構(gòu)體和嵌套列表。gBm28資訊網(wǎng)——每日最新資訊28at.com

支持以下選項(xiàng):gBm28資訊網(wǎng)——每日最新資訊28at.com

? filename - 要讀取的 Parquet 文件的路徑列表,以空格分隔。您可以用s3://開始來指定 AWS S3 上的路徑。不支持混合使用本地路徑和 S3 路徑;gBm28資訊網(wǎng)——每日最新資訊28at.com

? dirname - 具有要讀取的 Parquet 文件的目錄路徑;gBm28資訊網(wǎng)——每日最新資訊28at.com

? sorted - 用來預(yù)排序 Parquet 文件的,空格分隔的列列表;當(dāng)使用ORDER BY子句運(yùn)行查詢,或在其他情況下帶有預(yù)排序的列集會(huì)有用(Group Aggregate,Merge Join)時(shí),這將有助于 postgres 避免冗余的排序;gBm28資訊網(wǎng)——每日最新資訊28at.com

? files_in_order - 要求以filename指定或由files_func返回的文件,根據(jù)sorted選項(xiàng)進(jìn)行排序,并且在范圍上沒有交叉;這允許在并行多文件掃描節(jié)點(diǎn)上使用Gather Merge節(jié)點(diǎn)(默認(rèn)值為false);gBm28資訊網(wǎng)——每日最新資訊28at.com

? use_mmap - 是否使用內(nèi)存映射操作,而不是文件讀取操作(默認(rèn)值為false);gBm28資訊網(wǎng)——每日最新資訊28at.com

? use_threads - 啟用 Apache Arrow 的并行列解碼/解壓(默認(rèn)值為false);gBm28資訊網(wǎng)——每日最新資訊28at.com

? files_func - 用戶定義的函數(shù),由 parquet_s3_fdw 在每次查詢時(shí)用于檢索 parquet 文件列表;函數(shù)必須接受一個(gè)JSONB參數(shù),并返回 parquet 文件完整路徑的文本數(shù)組;gBm28資訊網(wǎng)——每日最新資訊28at.com

? files_func_arg - 由 files_func 指定的函數(shù)的參數(shù)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? max_open_files - 同時(shí)打開的 Parquet 文件的數(shù)量限制。gBm28資訊網(wǎng)——每日最新資訊28at.com

? region - 用于連接到的 AWS 區(qū)域的值(默認(rèn)值為ap-northeast-1)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? endpoint - 用于連接的地址和端口(默認(rèn)值為127.0.0.1:9000)。gBm28資訊網(wǎng)——每日最新資訊28at.com

可以為單個(gè)和一組 Parquet 文件創(chuàng)建外部表。也可以指定一個(gè)用戶定義的函數(shù),該函數(shù)會(huì)返回一個(gè)文件路徑列表。根據(jù)文件數(shù)量和表選項(xiàng),parquet_s3_fdw可以使用以下的一種執(zhí)行策略:gBm28資訊網(wǎng)——每日最新資訊28at.com

策略
gBm28資訊網(wǎng)——每日最新資訊28at.com

描述
gBm28資訊網(wǎng)——每日最新資訊28at.com

Single FilegBm28資訊網(wǎng)——每日最新資訊28at.com

基本的單文件讀取器
gBm28資訊網(wǎng)——每日最新資訊28at.com

MultifilegBm28資訊網(wǎng)——每日最新資訊28at.com

按順序逐個(gè)處理 Parquet 文件的讀取器
gBm28資訊網(wǎng)——每日最新資訊28at.com

Multifile MergegBm28資訊網(wǎng)——每日最新資訊28at.com

該讀取器會(huì)合并預(yù)排序的 Parquet 文件,以便生成的結(jié)果也是有序的;在指定了sorted選項(xiàng),并且查詢計(jì)劃需要排序(例如包含了ORDER BY子句)時(shí)會(huì)使用gBm28資訊網(wǎng)——每日最新資訊28at.com

Caching Multifile MergegBm28資訊網(wǎng)——每日最新資訊28at.com

Multifile Merge相同,但會(huì)限制同時(shí)打開的文件數(shù);當(dāng)指定的 Parquet 文件數(shù)超過max_open_files時(shí)會(huì)使用gBm28資訊網(wǎng)——每日最新資訊28at.com

GUC 變量:gBm28資訊網(wǎng)——每日最新資訊28at.com

? parquet_fdw.use_threads - 允許用戶啟用或禁用線程的全局開關(guān)(默認(rèn)值為true);gBm28資訊網(wǎng)——每日最新資訊28at.com

? parquet_fdw.enable_multifile - 啟用多文件讀取器(默認(rèn)值為true)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? parquet_fdw.enable_multifile_merge - 啟用多文件合并讀取器(默認(rèn)值為true)。gBm28資訊網(wǎng)——每日最新資訊28at.com

示例:gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE FOREIGN TABLE userdata (    id           int,    first_name   text,    last_name    text)SERVER parquet_s3_srvOPTIONS (    filename 's3://bucket/dir/userdata1.parquet');

訪問外表

SELECT * FROM userdata;

并行查詢

parquet_s3_fdw還支持并行查詢執(zhí)行(注意不要與 Apache Arrow 的多線程解碼功能混淆)。gBm28資訊網(wǎng)——每日最新資訊28at.com

導(dǎo)入

parquet_s3_fdw還支持 IMPORT FOREIGN SCHEMA 命令,來發(fā)現(xiàn)文件系統(tǒng)上指定目錄中的 parquet 文件,并根據(jù)這些文件創(chuàng)建外部表。它可以像這樣使用:gBm28資訊網(wǎng)——每日最新資訊28at.com

IMPORT FOREIGN SCHEMA "/path/to/directory"FROM SERVER parquet_s3_srvINTO public;

重要的是,這里的remote_schema是一個(gè)本地文件系統(tǒng)的目錄路徑,并且用雙引號(hào)引起來。gBm28資訊網(wǎng)——每日最新資訊28at.com

將 parquet 文件導(dǎo)入到外部表的另一種方法是,使用import_parquet_s3或import_parquet_s3_explicit:gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE FUNCTION import_parquet_s3(    tablename   text,    schemaname  text,    servername  text,    userfunc    regproc,    args        jsonb,    options     jsonb)CREATE FUNCTION import_parquet_s3_explicit(    tablename   text,    schemaname  text,    servername  text,    attnames    text[],    atttypes    regtype[],    userfunc    regproc,    args        jsonb,    options     jsonb)

import_parquet_s3和import_parquet_s3_explicit之間的唯一區(qū)別是,后者允許指定一組要導(dǎo)入的屬性/列。attnames和atttypes分別是屬性名稱和屬性類型的數(shù)組(參見下面的示例)。gBm28資訊網(wǎng)——每日最新資訊28at.com

userfunc是一個(gè)用戶自定義函數(shù)。它必須接受一個(gè)jsonb參數(shù),并返回一個(gè)要導(dǎo)入的 parquet 文件的文件系統(tǒng)路徑的文本數(shù)組。args是用戶指定的 jsonb 對象,以作為參數(shù)傳遞給userfunc。這種函數(shù)的簡單實(shí)現(xiàn)和用法,可以如下面這樣:gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE FUNCTION list_parquet_s3_files(args jsonb)RETURNS text[] AS$$BEGIN    RETURN array_agg(args->>'dir' || '/' || filename)           FROM pg_ls_dir(args->>'dir') AS files(filename)           WHERE filename ~~ '%.parquet';END$$LANGUAGE plpgsql;SELECT import_parquet_s3_explicit(    'abc',    'public',    'parquet_srv',    array['one', 'three', 'six'],    array['int8', 'text', 'bool']::regtype[],    'list_parquet_files',    '{"dir": "/path/to/directory"}',    '{"sorted": "one"}');

特性

? 支持在本地文件系統(tǒng)或 Amazon S3 上對 parquet 文件進(jìn)行 SELECT 操作。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 支持 INSERT、DELETE、UPDATE(外部修改)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 支持 MinIO 訪問,以替代 Amazon S3。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 允許控制外部服務(wù)器在事務(wù)完成后是否保持連接打開狀態(tài)。這由 keep_connections 控制,默認(rèn)為 on。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 支持 parquet_s3_fdw 的 parquet_s3_fdw_get_connections() 函數(shù),列出打開的外部服務(wù)器連接。gBm28資訊網(wǎng)——每日最新資訊28at.com

無結(jié)構(gòu)模式

? 該功能將使用戶能夠使用無結(jié)構(gòu)的能力:gBm28資訊網(wǎng)——每日最新資訊28at.com

 ?Jsonb 鍵:parquet 列名稱。gBm28資訊網(wǎng)——每日最新資訊28at.com

? Jsonb 值:parquet 列數(shù)據(jù)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 每個(gè) parquet 文件沒有特定的外部表結(jié)構(gòu)(列定義)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 無結(jié)構(gòu)的外表只有一個(gè) jsonb 列,用于根據(jù)以下規(guī)則表示 parquet 文件中的數(shù)據(jù):gBm28資訊網(wǎng)——每日最新資訊28at.com

使用無結(jié)構(gòu)模式,會(huì)有幾個(gè)好處:gBm28資訊網(wǎng)——每日最新資訊28at.com

? parquet 文件數(shù)據(jù)結(jié)構(gòu)的靈活性:通過將所有列數(shù)據(jù)合并到一個(gè) jsonb 列中,無結(jié)構(gòu)的外表可以查詢?nèi)魏?parquet 文件,文件中的所有列都能映射到 postgres 類型。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 沒有預(yù)定義的外部表結(jié)構(gòu)(列定義)。缺少結(jié)構(gòu)意味著外部表會(huì)查詢 parquet 文件中的所有列,包括用戶還未使用的列。gBm28資訊網(wǎng)——每日最新資訊28at.com

無結(jié)構(gòu)模式用法

? 無結(jié)構(gòu)模式由schemaless選項(xiàng)來啟用:gBm28資訊網(wǎng)——每日最新資訊28at.com

? schemaless選項(xiàng)是true:啟用無結(jié)構(gòu)模式。gBm28資訊網(wǎng)——每日最新資訊28at.com

? schemaless選項(xiàng)是false:禁用無結(jié)構(gòu)模式(我們稱之為non-schemaless模式)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果未配置schemaless選項(xiàng),則默認(rèn)值為 false。gBm28資訊網(wǎng)——每日最新資訊28at.com

? CREATE FOREIGN TABLE、IMPORT FOREIGN SCHEMA、import_parquet_s3()和import_parquet_s3_explicit()中均支持schemaless選項(xiàng)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 無結(jié)構(gòu)外表需要至少一個(gè) jsonb 列來表示數(shù)據(jù):gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE FOREIGN TABLE example_schemaless (  id int,  v jsonb) OPTIONS (filename '/path/to/parquet_file', schemaless 'true');SELECT * FROM example_schemaless;id |                                                                v----+---------------------------------------------------------------------------------------------------------------------------------    | {"one": 1, "six": "t", "two": [1, 2, 3], "five": "2018-01-01", "four": "2018-01-01 00:00:00", "seven": 0.5, "three": "foo"}    | {"one": 2, "six": "f", "two": [null, 5, 6], "five": "2018-01-02", "four": "2018-01-02 00:00:00", "seven": null, "three": "bar"}(2 rows)

? 如果有 1 個(gè)以上的 jsonb 列,則僅填充一列,所有其他列都使用 NULL 值處理。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果沒有 jsonb 列,則所有列都使用 NULL 值處理。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 示例:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 創(chuàng)建外部表:使用IMPORT FOREIGN SCHEMA,import_parquet_s3()和import_parquet_s3_explicit(),外部表將以固定的列定義進(jìn)行創(chuàng)建,如下所示:

CREATE FOREIGN TABLE example (  v jsonb) OPTIONS (filename '/path/to/parquet_file', schemaless 'true');
gBm28資訊網(wǎng)——每日最新資訊28at.com

? 查詢數(shù)據(jù):

-- non-schemaless modeSELECT * FROM example; one |    two     | three |        four         |    five    | six | seven-----+------------+-------+---------------------+------------+-----+-------   1 | {1,2,3}    | foo   | 2018-01-01 00:00:00 | 2018-01-01 | t   |   0.5   2 | {NULL,5,6} | bar   | 2018-01-02 00:00:00 | 2018-01-02 | f   |(2 rows)-- schemaless modeSELECT * FROM example_schemaless;                                                                  v--------------------------------------------------------------------------------------------------------------------------------- {"one": 1, "six": "t", "two": [1, 2, 3], "five": "2018-01-01", "four": "2018-01-01 00:00:00", "seven": 0.5, "three": "foo"} {"one": 2, "six": "f", "two": [null, 5, 6], "five": "2018-01-02", "four": "2018-01-02 00:00:00", "seven": null, "three": "bar"}(2 rows)
gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在 jsonb 表達(dá)式中獲取值:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 使用 ->> jsonb 箭頭操作符,返回文本類型。用戶可以強(qiáng)制轉(zhuǎn)換 jsonb 表達(dá)式的類型,以獲得相應(yīng)的數(shù)據(jù)表示。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 例如,獲取col值的表達(dá)式v->>'col',將是 parquet 文件中的列名col,我們稱之為schemaless variable或slvar。

SELECT v->>'two', sqrt((v->>'one')::int) FROM example_schemaless;  ?column?   |        sqrt--------------+--------------------[1, 2, 3]    |                  1[null, 5, 6] | 1.4142135623730951(2 rows)
gBm28資訊網(wǎng)——每日最新資訊28at.com

? 某些功能與non-schemaless模式不同gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在sorted選項(xiàng)中定義列名,與non-schemaless mode相同gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在ORDER BY子句中使用slvar代替列名。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果排序的 parquet 列不是文本列,請將此列顯式地強(qiáng)制轉(zhuǎn)換到映射類型。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 例如:

CREATE FOREIGN TABLE example_sorted (v jsonb)SERVER parquet_s3_srvOPTIONS (filename '/path/to/example1.parquet /path/to/example2.parquet', sorted 'int64_col', schemaless 'true');EXPLAIN (COSTS OFF) SELECT * FROM example_sorted ORDER BY (v->>'int64_col')::int8;          QUERY PLAN--------------------------------Foreign Scan on example_sorted  Reader: Multifile Merge  Row groups:    example1.parquet: 1, 2    example2.parquet: 1(5 rows)
gBm28資訊網(wǎng)——每日最新資訊28at.com

? slvar::type {operator} const。例如:(v->>'int64_col')::int8 = 100gBm28資訊網(wǎng)——每日最新資訊28at.com

? const {operator} slvar ::type。例如:100 = (v->>'int64_col')::int8gBm28資訊網(wǎng)——每日最新資訊28at.com

? slvar::boolean is true/false。例如:(v->>'bool_col')::boolean is falsegBm28資訊網(wǎng)——每日最新資訊28at.com

? !(slvar::boolean)。例如:!(v->>'bool_col')::booleangBm28資訊網(wǎng)——每日最新資訊28at.com

? Jsonb exist 運(yùn)算符:((v->>'col')::jsonb) ? element、(v->'col') ? element和v ? 'col'gBm28資訊網(wǎng)——每日最新資訊28at.com

? 轉(zhuǎn)換函數(shù)必須映射 parquet 列類型,否則會(huì)跳過過濾器。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 行組過濾器支持:在無結(jié)構(gòu)模式下,parquet_s3_fdw 可以通過一些如下的WHERE條件,支持對行組進(jìn)行過濾:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 要使用 parquet 文件的預(yù)排序列,用戶必須是:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 支持對嵌套列表和映射表使用箭頭運(yùn)算符:這些類型將被視為嵌套的 jsonb 值,可以通過->操作符訪問。例如:

SELECT * FROM example_schemaless;                                  v----------------------------------------------------------------------------{"array_col": [19, 20], "jsonb_col": {"1": "foo", "2": "bar", "3": "baz"}}{"array_col": [21, 22], "jsonb_col": {"4": "test1", "5": "test2"}}(2 rows)SELECT v->'array_col'->1, v->'jsonb_col'->'1' FROM example3;?column? | ?column?----------+----------20       | "foo"22       |(2 rows)
gBm28資訊網(wǎng)——每日最新資訊28at.com

? Postgres 計(jì)算(jsonb->>'col')::type的成本,比在non-schemaless模式下直接獲取列要大得多,在一些復(fù)雜的查詢中,schemaless模式的查詢計(jì)劃可能與non-schemaless模式不同。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 對于其他功能,schemaless模式與non-schemaless模式工作相同。gBm28資訊網(wǎng)——每日最新資訊28at.com

可寫的 FDW

用戶可以對已設(shè)置鍵列的外表,執(zhí)行 insert、update 和 delete 語句。gBm28資訊網(wǎng)——每日最新資訊28at.com

鍵列

? 在結(jié)構(gòu)化模式下:可以通過使用 OPTIONS (key 'true') 創(chuàng)建 parquet_s3_fdw 外表對象,來設(shè)置鍵列:gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE FOREIGN TABLE userdata (    id1          int OPTIONS(key 'true'),    id2          int OPTIONS(key 'true'),    first_name   text,    last_name    text) SERVER parquet_s3_srvOPTIONS (    filename 's3://bucket/dir/userdata1.parquet');

? 在無結(jié)構(gòu)模式下,可以在創(chuàng)建 parquet_s3_fdw 外部表對象時(shí),使用key_columns選項(xiàng)設(shè)置鍵列:gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE FOREIGN TABLE userdata (    v JSONB) SERVER parquet_s3_srvOPTIONS (    filename 's3://bucket/dir/userdata1.parquet',    schemaless 'true',    key_columns 'id1 id2');

? key_columns選項(xiàng)可用于 IMPORT FOREIGN SCHEMA 功能:gBm28資訊網(wǎng)——每日最新資訊28at.com

-- in schemaless modeIMPORT FOREIGN SCHEMA 's3://data/' FROM SERVER parquet_s3_srv INTO tmp_schemaOPTIONS (sorted 'c1', schemaless 'true', key_columns 'id1 id2');-- corresponding CREATE FOREIGN TABLECREATE FOREIGN TABLE tbl1 (      v jsonb) SERVER parquet_s3_srvOPTIONS (filename 's3://data/tbl1.parquet', sorted 'c1', schemaless 'true', key_columns 'id1 id2');-- in non-schemaless modeIMPORT FOREIGN SCHEMA 's3://data/' FROM SERVER parquet_s3_srv INTO tmp_schemaOPTIONS (sorted 'c1', schemaless 'true', key_columns 'id1 id2');-- corresponding CREATE FOREIGN TABLECREATE FOREIGN TABLE tbl1 (      id1 INT OPTIONS (key 'true'),      id2 INT OPTIONS (key 'true'),      c1  TEXT,      c2  FLOAT) SERVER parquet_s3_srvOPTIONS (filename 's3://data/tbl1.parquet', sorted 'c1');

insert_file_selector 選項(xiàng)

parquet_s3_fdw 用來在 INSERT 查詢中檢索目標(biāo) parquet 文件的用戶定義函數(shù)簽名:gBm28資訊網(wǎng)——每日最新資訊28at.com

CREATE FUNCTION insert_file_selector_func(one INT8, dirname text)RETURNS TEXT AS$$    SELECT (dirname || '/example7.parquet')::TEXT;$$LANGUAGE SQL;CREATE FOREIGN TABLE example_func (one INT8 OPTIONS (key 'true'), two TEXT)SERVER parquet_s3_srvOPTIONS (    insert_file_selector 'insert_file_selector_func(one, dirname)',    dirname '/tmp/data_local/data/test',    sorted 'one');

? insert_file_selector 函數(shù)簽名規(guī)格:gBm28資訊網(wǎng)——每日最新資訊28at.com

? dirname arg:dirname 選項(xiàng)的值。gBm28資訊網(wǎng)——每日最新資訊28at.com

? column args:按名稱從插入槽位中獲取。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 語法:[function name]([arg name] , [arg name] ...)gBm28資訊網(wǎng)——每日最新資訊28at.com

? 默認(rèn)返回類型為TEXT(parquet 文件的完整路徑)gBm28資訊網(wǎng)——每日最新資訊28at.com

? [arg name]:必須是外部表的列名或dirnamegBm28資訊網(wǎng)——每日最新資訊28at.com

? args 值:gBm28資訊網(wǎng)——每日最新資訊28at.com

排序列:

parquet_s3_fdw 支持在修改功能中保持排序列的排序狀態(tài)。gBm28資訊網(wǎng)——每日最新資訊28at.com

Parquet 文件結(jié)構(gòu):

基本上,parquet 文件結(jié)構(gòu)是根據(jù)一組列名和相應(yīng)的類型定義的,但在 parquet_s3_fdw 的掃描中,它假定所有具有相同名稱的列都具有相同的類型。因此,在修改功能中,也會(huì)使用該假設(shè)。gBm28資訊網(wǎng)——每日最新資訊28at.com

從 postgres 類型到 arrow 類型的映射:

  • ? 基礎(chǔ)類型映射:

SQL 類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

Arrow 類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

BOOL
gBm28資訊網(wǎng)——每日最新資訊28at.com

BOOL
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT2
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT16
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT4
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT32
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT8
gBm28資訊網(wǎng)——每日最新資訊28at.com

INT64
gBm28資訊網(wǎng)——每日最新資訊28at.com

FLOAT4
gBm28資訊網(wǎng)——每日最新資訊28at.com

FLOAT
gBm28資訊網(wǎng)——每日最新資訊28at.com

FLOAT8
gBm28資訊網(wǎng)——每日最新資訊28at.com

DOUBLE
gBm28資訊網(wǎng)——每日最新資訊28at.com

TIMESTAMP/TIMESTAMPTZ
gBm28資訊網(wǎng)——每日最新資訊28at.com

TIMESTAMP
gBm28資訊網(wǎng)——每日最新資訊28at.com

DATE
gBm28資訊網(wǎng)——每日最新資訊28at.com

DATE32
gBm28資訊網(wǎng)——每日最新資訊28at.com

TEXT
gBm28資訊網(wǎng)——每日最新資訊28at.com

STRING
gBm28資訊網(wǎng)——每日最新資訊28at.com

BYTEA
gBm28資訊網(wǎng)——每日最新資訊28at.com

BINARY
gBm28資訊網(wǎng)——每日最新資訊28at.com

? arrow::TIMESTAMP 的默認(rèn)時(shí)間精度為 UTC 時(shí)區(qū)的微秒級(jí)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? LIST 是由它的元素類型創(chuàng)建的,對于元素只支持基礎(chǔ)類型。gBm28資訊網(wǎng)——每日最新資訊28at.com

? MAP 由其 jsonb 元素的類型來創(chuàng)建的:gBm28資訊網(wǎng)——每日最新資訊28at.com

jsonb 類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

Arrow 類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

text
gBm28資訊網(wǎng)——每日最新資訊28at.com

STRING
gBm28資訊網(wǎng)——每日最新資訊28at.com

numeric
gBm28資訊網(wǎng)——每日最新資訊28at.com

FLOAT8
gBm28資訊網(wǎng)——每日最新資訊28at.com

boolean
gBm28資訊網(wǎng)——每日最新資訊28at.com

BOOL
gBm28資訊網(wǎng)——每日最新資訊28at.com

null
gBm28資訊網(wǎng)——每日最新資訊28at.com

STRING
gBm28資訊網(wǎng)——每日最新資訊28at.com

其他類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

STRING
gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在無結(jié)構(gòu)模式下:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在結(jié)構(gòu)化模式下,基礎(chǔ)的 jsonb 類型的映射與 MAP 相同。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 對于無結(jié)構(gòu)模式下的第一個(gè)嵌套的 jsonb:gBm28資訊網(wǎng)——每日最新資訊28at.com

jsonb 類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

Arrow 類型
gBm28資訊網(wǎng)——每日最新資訊28at.com

array
gBm28資訊網(wǎng)——每日最新資訊28at.com

LIST
gBm28資訊網(wǎng)——每日最新資訊28at.com

object
gBm28資訊網(wǎng)——每日最新資訊28at.com

MAP
gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在結(jié)構(gòu)化模式下,LIST 和 MAP 的元素類型與 MAP 類型相同。gBm28資訊網(wǎng)——每日最新資訊28at.com

INSERT

-- non-schemaless modeCREATE FOREIGN TABLE example_insert (    c1 INT2 OPTIONS (key 'true'),    c2 TEXT,    c3 BOOLEAN) SERVER parquet_s3_srv OPTIONS (filename 's3://data/example_insert.parquet');INSERT INTO example_insert VALUES (1, 'text1', true), (2, DEFAULT, false), ((select 3), (select i from (values('values are fun!')) as foo (i)), true);INSERT 0 3SELECT * FROM example_insert; c1 |       c2        | c3----+-----------------+----  1 | text1           | t  2 |                 | f  3 | values are fun! | t(3 rows)-- schemaless modeCREATE FOREIGN TABLE example_insert_schemaless (    v JSONB) SERVER parquet_s3_srv OPTIONS (filename 's3://data/example_insert.parquet', schemaless 'true', key_column 'c1');INSERT INTO example_insert_schemaless VALUES ('{"c1": 1, "c2": "text1", "c3": true}'), ('{"c1": 2, "c2": null, "c3": false}'), ('{"c1": 3, "c2": "values are fun!", "c3": true}');SELECT * FROM example_insert_schemaless;                       v----------------------------------------------- {"c1": 1, "c2": "text1", "c3": "t"} {"c1": 2, "c2": null, "c3": "f"} {"c1": 3, "c2": "values are fun!", "c3": "t"}(3 rows)

? 選擇要插入的文件:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 目標(biāo)文件是第一個(gè)其結(jié)構(gòu)與插入記錄匹配(插入記錄的所有列都存在于目標(biāo)文件中)的文件。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果沒有符合其結(jié)構(gòu)的文件與插入記錄的列匹配,并且已指定dirname選項(xiàng)。創(chuàng)建新文件,文件名格式為:[foreign_table_name]_[date_time].parquetgBm28資訊網(wǎng)——每日最新資訊28at.com

? 否則,會(huì)引發(fā)錯(cuò)誤消息。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果目標(biāo)文件不存在,則創(chuàng)建與目標(biāo)文件同名的新文件。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果目標(biāo)文件存在,但其結(jié)構(gòu)與插入記錄的列不匹配,則會(huì)引發(fā)錯(cuò)誤消息。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果存在選項(xiàng)insert_file_selector,目標(biāo)文件就是該函數(shù)的結(jié)果。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果選項(xiàng)insert_file_selector不存在:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 新文件的結(jié)構(gòu):gBm28資訊網(wǎng)——每日最新資訊28at.com

? 從現(xiàn)有文件列表中獲取。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果在任何文件中都不存在列:根據(jù)預(yù)定義的映射類型創(chuàng)建基礎(chǔ)文件。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在結(jié)構(gòu)化模式下,新文件將所有列都存在于外部表中。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在無結(jié)構(gòu)模式下,新文件將在 jsonb 值中帶上所有列。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 列信息:gBm28資訊網(wǎng)——每日最新資訊28at.com

UPDATE/DELETE

-- non-schemaless modeCREATE FOREIGN TABLE example (    c1 INT2 OPTIONS (key 'true'),    c2 TEXT,    c3 BOOLEAN) SERVER parquet_s3_srv OPTIONS (filename 's3://data/example.parquet');SELECT * FROM example; c1 |       c2        | c3----+-----------------+----  1 | text1           | t  2 |                 | f  3 | values are fun! | t(3 rows)UPDATE example SET c3 = false WHERE c2 = 'text1';UPDATE 1SELECT * FROM example; c1 |       c2        | c3----+-----------------+----  1 | text1           | f  2 |                 | f  3 | values are fun! | t(3 rows)DELETE FROM example WHERE c1 = 2;DELETE 1SELECT * FROM example; c1 |       c2        | c3----+-----------------+----  1 | text1           | f  3 | values are fun! | t(2 rows)-- schemaless modeCREATE FOREIGN TABLE example_schemaless (    v JSONB) SERVER parquet_s3_srv OPTIONS (filename 's3://data/example.parquet', schemaless 'true', key_columns 'c1');SELECT * FROM example_schemaless;                       v----------------------------------------------- {"c1": 1, "c2": "text1", "c3": "t"} {"c1": 2, "c2": null, "c3": "f"} {"c1": 3, "c2": "values are fun!", "c3": "t"}(3 rows)UPDATE example_schemaless SET v='{"c3":false}' WHERE v->>'c2' = 'text1';UPDATE 1SELECT * FROM example_schemaless;                       v----------------------------------------------- {"c1": 1, "c2": "text1", "c3": "f"} {"c1": 2, "c2": null, "c3": "f"} {"c1": 3, "c2": "values are fun!", "c3": "t"}(3 rows)DELETE FROM example_schemaless WHERE (v->>'c1')::int = 2;DELETE 1SELECT * FROM example_schemaless;                       v----------------------------------------------- {"c1": 1, "c2": "text1", "c3": "f"} {"c1": 3, "c2": "values are fun!", "c3": "t"}(2 rows)

限制

? 不支持事務(wù)。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 無法同時(shí)在文件系統(tǒng)和 Amazon S3 上使用 parquet 文件創(chuàng)建單個(gè)外部表。gBm28資訊網(wǎng)——每日最新資訊28at.com

? import_parquet_s3_explicit()函數(shù)的第 4 和第 5 個(gè)參數(shù),在schemaless模式下沒有意義。gBm28資訊網(wǎng)——每日最新資訊28at.com

WARNING: parquet_s3_fdw: attnames and atttypes are expected to be NULL. They are meaningless for schemaless table.HINT: Schemaless table imported always contain "v" column with "jsonb" type.

? 這些參數(shù)應(yīng)該定義為NULL值。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 如果這些參數(shù)不是 NULL 值,則會(huì)出現(xiàn)下面的WARNING:gBm28資訊網(wǎng)——每日最新資訊28at.com

? schemaless模式不支持通過CREATE TABLE parent_tbl (v jsonb) PARTITION BY RANGE((v->>'a')::int)創(chuàng)建分區(qū)表。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 在修改功能中:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 對于大文件,性能不太好。gBm28資訊網(wǎng)——每日最新資訊28at.com

? 當(dāng)完全相同的文件同時(shí)修改時(shí),結(jié)果會(huì)出現(xiàn)不一致。gBm28資訊網(wǎng)——每日最新資訊28at.com

? parquet_s3_fdw修改 parquet 文件的方法是,從目標(biāo) parquet 文件創(chuàng)建可修改的緩存數(shù)據(jù),并覆蓋舊文件:gBm28資訊網(wǎng)——每日最新資訊28at.com

? 不支持 WITH CHECK OPTION、ON CONFLICT 和 RETURNING。gBm28資訊網(wǎng)——每日最新資訊28at.com

? sorted列僅支持這些類型:int2、int4、int8、date、timestamp、float4、float8。gBm28資訊網(wǎng)——每日最新資訊28at.com

? key列僅支持這些類型:int2、int4、int8、date、timestamp、float4、float8和text。gBm28資訊網(wǎng)——每日最新資訊28at.com

? key列的值必須是唯一的,parquet_s3_fdw不支持檢查鍵列的唯一值,用戶必須做好檢查。gBm28資訊網(wǎng)——每日最新資訊28at.com

? key列僅用于 UPDATE/UPDATE。gBm28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-88578-0.htmlOracle 數(shù)據(jù)量 150T,PostgreSQL 能搞定嗎?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 零基礎(chǔ)入門:使用Python pyWinAuto自動(dòng)化你的Windows任務(wù)

下一篇: SpringBoot項(xiàng)目中這十個(gè)開發(fā)技巧,你都知道嗎?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top