Pivotal Knowledge Base

フォローする

外部テーブルからデータを取得しようとすると "ERROR: <port> substring size must not exceed 8 characters" というエラーで異常終了する

環境

 製品  バージョン
 GPDB  全てのバージョン

事象

任意の外部テーブルに対する DML 操作で以下のようなエラーに遭遇する。

ERROR: <port> substring size must not exceed 8 characters  (seg5 slice1 sdw2:46001 pid=9343) 

こちらは、SELECT 操作の結果発生したエラーである。この場合、sdw2 というセグメントが以下に示す外部テーブルの生成時に指定した LOCATION 節に記載されている gpfdist ホストに接続しようとしてエラーが発生している。

template1=# \d+ ext_expenses                                                               
External table "public.ext_expenses" Column | Type | Modifiers | Storage | Description ----------+------+-----------+----------+------------- name | text | | extended | category | text | | extended | Type: readable Encoding: UTF8 Format type: text Format options: delimiter '|' null ' ' escape '\' External location: gpfdist://:etlhost-1:8081/*.txt

原因

この問題は、外部テーブルの定義における文法間違いにより発生している。見て分かるように、上述の External location に、ホスト名(etlhost-1)の直前に余計なコロン(:)が入っている。

この場合、ホスト名(あるいは、IP アドレス)の前にコロン(:)を入れてはいけない。ホスト名の前にコロンがあるため、ホスト名がポート名であると認識されるが、ポート名は 8 文字を超えてはいけないため本エラーが発生する。 

解決策

当該外部テーブルを一旦削除し、適切な文法を用いて再作成する。以下は、ホスト名・IP アドレスを指定した双方の例である。

-- LOCATION の間違った文法

LOCATION (
    'gpfdist://:etlhost-1:8081/*.txt' 
)
LOCATION (
    'gpfdist://:172.28.8.20:8081/*.txt' 
)

-- LOCATION の正しい文法

LOCATION (
    'gpfdist://etlhost-1:8081/*.txt' 
)
LOCATION (
    'gpfdist://172.28.8.20:8081/*.txt' 
)

完全な正しい DDL は以下のようになる。

CREATE EXTERNAL TABLE ext_expenses ( name text, category text ) 
LOCATION ('gpfdist://etlhost-1:8081/*.txt')
FORMAT 'TEXT' ( DELIMITER '|' NULL ' ') ;

コメント

Powered by Zendesk