在创建语句中的位置参数中带有字符串的 Concat 变量?

问题描述

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

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'”

有人可以帮我吗?

解决方法

您在您的表定义缺少一些东西。您忘记“外部”和“表”。

import logging
logger = logging.getLogger('django.request')
logger.setLevel(logging.ERROR)

注:gphdfs已被弃用,你应该使用PXF或gpfdist代替

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

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

和从bash中,你可以CONCAT串在一起了。

[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