次のようなテーブルにデータを読み込んでいます。
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()
は、これが発生する理由を説明していません。
これはバグですか?ソースファイルの実際の名前を取得するにはどうすればよいですか?
これは、見落とし、未完成の機能、またはその他のものとして特徴付けたいかどうかにかかわらず、確かにバグのように見えます。
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()
の意図された動作と一致するように、(フルパスではなく)ファイルのベース名を指定する必要があります。