web-dev-qa-db-ja.com

CURRENT_LOAD_SOURCE()が実際のソースファイル名の代わりに「バッチ番号1」を返すのはなぜですか?

次のようなテーブルにデータを読み込んでいます。

COPY table1 (
    col1,
    col2,
    file_name AS CURRENT_LOAD_SOURCE()
)
FROM LOCAL :src_file
REJECTED DATA :rejected_file
EXCEPTIONS :exceptions_file
SKIP 1;

file_nameの実際のベース名Batch No. 1の代わりに文字列:src_fileが入力されることを除いて、これは機能します。

doc for CURRENT_LOAD_SOURCE() は、これが発生する理由を説明していません。

これはバグですか?ソースファイルの実際の名前を取得するにはどうすればよいですか?

2
Nick Chammas

これは、見落とし、未完成の機能、またはその他のものとして特徴付けたいかどうかにかかわらず、確かにバグのように見えます。

Verticaのサポートによると、これは既知の問題であり、VER-36735の一部として修正が追跡されています。 (残念ながら、彼らの課題追跡システムは一般に公開されていません。)

この問題は、サーバーではなくクライアントマシン上にあるファイルをロードするために使用されるLOCAL句に関連しているようです。

LOCAL句を削除すると(そしてロードするファイルをサーバーに置くと)、CURRENT_LOAD_SOURCE()は、期待どおりにロードされているファイルのファイル名を返します。

_COPY table1 (
    col1,
    col2,
    file_name AS CURRENT_LOAD_SOURCE()
)
FROM :src_file  -- no LOCAL!
REJECTED DATA :rejected_file
EXCEPTIONS :exceptions_file
SKIP 1;
_

LOCALで行き詰まっている場合、最善の策は、ロードするファイルの名前で明示的に設定した新しい変数(_:file_name_など)を渡すことです。 CURRENT_LOAD_SOURCE()の意図された動作と一致するように、(フルパスではなく)ファイルのベース名を指定する必要があります。

2
Nick Chammas