在 create 语句中使用位置参数中的字符串连接变量?

Concat variable with a string in location parameter in a create statement?

在 Greenplum 中,我需要创建一个带有动态位置参数的外部 table。例如:

CREATE READABLE TABLE_A(
date_inic date,
func_name varchar,
q_session bigint
)
LOCATION(:location)
FORMAT 'TEXT' (DELIMITER '|');

但是在 :location 参数中我需要用一个固定的字符串连接它。我试过了:

LOCATION (:location || '123')

但是我得到一个语法错误,否则在 select 语句中它工作得很好。我正在插入 :location 值,例如:“'gphdfs://teste:1010/tmp'”

谁能帮帮我?

您的 table 定义中遗漏了一些内容。你忘记了“外部”和“table”。

CREATE READABLE EXTERNAL TABLE table_a
(
date_inic date,
func_name varchar,
q_session bigint
)
LOCATION(:location)
FORMAT 'TEXT' (DELIMITER '|');

注意:gphdfs 已被弃用,您应该改用 PXF 或 gpfdist。

接下来,您只需要在位置值周围使用双引号。

[gpadmin@mdw ~]$ psql -f example.sql -v location="'gpfdist://teste:1010/tmp'"
CREATE EXTERNAL TABLE
[gpadmin@mdw ~]$ psql 
psql (9.4.24)
Type "help" for help.

gpadmin=# \d+ table_a 
                          External table "public.table_a"
  Column   |       Type        | Modifiers | Storage  | Stats target | Description 
-----------+-------------------+-----------+----------+--------------+-------------
 date_inic | date              |           | plain    |              | 
 func_name | character varying |           | extended |              | 
 q_session | bigint            |           | plain    |              | 
Type: readable
Encoding: UTF8
Format type: text
Format options: delimiter '|' null '\N' escape '\'
External options: {}
External location: gpfdist://teste:1010/tmp
Execute on: all segments

从 bash 开始,您也可以将字符串连接在一起。

loc="gpfdist://teste"
port="1010"
dir="tmp"
location="'""$loc"":""$port""/""$dir""'"

psql -f example.sql -v location="$location"