ファイル名フィールド ファイル名フィールドは、ファイルのソースパスを含む文字列フィールドです。ファイル名フィールドのデフォルトの精度は、フラットファイルの場合は255文字で複合ファイルの場合は1024文字です。
ファイル名フィールドを設定することはできません。ファイル名フィールドのデータを読み取りまたは書き込み しない場合は、ファイル名フィールドを削除できます。フラットファイルの場合は255文字を超え、複合ファイルの場合は1024文字を超えるフォルダ名は作成できません。
ファイル名は予約済みのキーワードです。ソースデータのカラム名としてファイル名を使用しないでください。この名前は、大文字と小文字が区別されます。
ファイル名フィールドは、次のファイル形式に適用されます。
• フラットファイル• Avro• Parquet• ORCソースオブジェクトパスの読み取り ソースオブジェクトをインポートすると、Secure Agentによって、インポートされたソースオブジェクトにFileNameフィールドが追加されます。ファイル名フィールドには、Secure Agentが実行時にデータを読み取るソースファイルの絶対パスが保存されます。
例えば、ディレクトリに多数のファイルが含まれ、各ファイルには読み取りを行う複数のレコードが含まれているとします。Microsoft Azure Data Lake Storage Gen2ソースの詳細プロパティで、ソースタイプとしてディレクトリを選択します。マッピングを実行すると、Secure Agentは各レコードを読み取って、それぞれのソースファイルの絶対パスがFileNameフィールドに保存されます。
ソースオブジェクトでFileNameフィールドを使用する場合、Secure Agentは、詳細モードのマッピングについては異なる方法でファイル名を読み取ります。
入力形式
構文
例
複合ファイル
abfss://<filesystem_name>@<account name>.<endpoint>/<directory>/<source_file_name>
abfss://adapterqa-source@adlsgen2qa.dfs.core.windows.net/parquet/reader/customer.parquet
フラットファイル
<directory>/<source_file_name>
csv/customer.csv
ターゲットオブジェクトへの書き込み ターゲットオブジェクトをインポートすると、Secure Agentにより、インポートされたターゲットオブジェクトにFileNameフィールドが追加されます。ターゲットオブジェクトのファイル名フィールドを受信フィールドにマッピングすると、Secure Agentによって、ファイル名フィールドに基づいてフォルダ構造とターゲットファイルが作成されます。
以下の表に、Secure Agentがマッピングのファイル名をどのように読み取るかを示します。
入力形式
構文
例
複合ファイル
<directory>/<target_file_name>/<target_file_name>=<values of filename field>/part_file
parquet/writer/customer.parquet/customer.parquet=1
フラットファイル
<directory>/<target_file_name>/<target_file_name>=<values of filename field>/part_file
この構文はマッピングのみに適用されます。
詳細モードのマッピングを作成しても、Secure Agentはディレクトリ構造を作成しません。
csv/customer.csv/customer.csv=1
以下の表に、マッピングのFileNameフィールドシナリオの構文と例を示します。
説明
構文
例
ターゲットがない場合、新しいターゲットファイルが作成されます。
<target_file_name>=<source_file_name>
customer_tgt.csv=customer_src.csv
ソースのファイル名フィールドを既存のターゲットのファイル名フィールドにマッピングした場合、新しいターゲットファイルが作成され、既存のターゲットは影響を受けません。
<target_file_name>=<source_field_value>
customer_tgt.csv=customer_src.csv
ファイル名フィールド以外のソースフィールドを既存のターゲットのファイル名フィールドにマッピングした場合、ソースフィールドの一意の値ごとに個別のファイルが作成されます。
<target_file_name>=<source_field_value>
customer_tgt.csv=a, customer_tgt.csv=b... customer_tgt.csv=n
この例では、ターゲットファイルが存在するディレクトリにn 個のファイルが挿入されます。ここで、n はソースフィールドの一意の値の数です。
ファイル名フィールドに関するルールとガイドライン マッピングでファイル名フィールドを使用する場合は、次のガイドラインを考慮します。
• ファイル名は予約済みのキーワードです。ソースデータのカラム名としてファイル名を使用しないでください。この名前は、大文字と小文字が区別されます。 • 複合ファイルの場合、ソースオブジェクトのファイル名フィールドを、ターゲットオブジェクトのファイル名フィールドにマッピングしないでください。ターゲットオブジェクトのファイル名フィールドを受信フィールドにマッピングした場合、Secure Agentによるディレクトリ構造の作成が予期したとおりに実行されません。• ターゲットオブジェクトにファイル名フィールドを使用すると、Secure Agentは、詳細モードのマッピングのNULL値に対し、別の名前でフォルダを作成します。- マッピングの場合、ターゲットファイル名に_EMPTY_ が追加されます。- 詳細モードのマッピングの場合、ターゲットファイル名に_HIVE_DEFAULT_PARTITION_ が付きます。• ターゲットオブジェクトのファイル名フィールドに日付タイプの受信フィールドをマッピングした場合、Secure Agentによって、ネストされたフォルダ構造がターゲットオブジェクトの受信日付の値に基づいて作成されます。• 受信フィールドをターゲットオブジェクトのファイル名フィールドにマッピングし、ターゲットで[特殊文字の処理] オプションが有効になっている場合、またはターゲットファイル名に特殊文字が含まれている場合、Windowsマシンでは次のエラーが発生してマッピングが失敗します。[エラー] java.io.IOException: ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません
• ターゲットオブジェクトのファイル名フィールドに受信フィールドをマッピングすると、初回のマッピングは正常に実行されます。それ以降の実行では、マッピングが次のエラーで失敗します。オブジェクトが見つかりません。
マッピングの再実行が正常に行われるようにするには、設計時にダミーのターゲットファイルを使用して、詳細ターゲットプロパティでダミーのターゲットファイルを上書きします。
• 実行時にターゲットを作成すると、ターゲットファイル名が予期された形式で生成されません。この問題は、ターゲットオブジェクトでファイル名フィールドが有効になっている場合に発生します。この問題を解決するには、ターゲットの受信フィールドからファイル名フィールドを除外します。
• 既存のターゲットオブジェクトにデータを書き込む場合、またはパーティションディレクトリを持つ新規ターゲットオブジェクトを作成した場合、ファイル名フィールドはターゲット側には追加されません。ファイル名フィールドはソース側にのみ追加されます。ソースからファイル名フィールドデータを読み取るには、検証エラーが発生しないように、式トランスフォーメーションを使用してファイル名フィールドの名前を別の名前に変更します。