outputtxt
指定したファイルシステムパスに入力レコードのフィールド値をテキストファイルとして書き込みます。各レコードのフィールド値を区切り文字で連結して1行ずつ書き込みます。
コマンドプロパティ
| 項目 | 説明 |
|---|---|
| コマンドタイプ | 加工クエリ |
| 必要な権限 | クラスター管理者 |
| ライセンス使用量 | 該当なし |
| 並列実行 | 非対応 |
| 分散実行 | 制御ノードで実行(reducer) |
構文
オプション
overwrite=BOOLtに設定すると、対象ファイルが既に存在していても上書きします。未設定の場合、ファイルが存在するとクエリが失敗します。appendオプションと同時には使用できません。(デフォルト:f)append=BOOLtに設定すると、対象ファイルが既に存在する場合にファイルの末尾に追記します。overwriteオプションと同時には使用できません。(デフォルト:f)encoding=STR- 出力ファイルの文字エンコーディングを指定します。(デフォルト:
utf-8) delimiter=STR- フィールド値の間に挿入する区切り文字を指定します。(デフォルト: 半角スペース)
gz=BOOLtに設定すると、出力ファイルをgzip形式で圧縮します。(デフォルト:f)partition=BOOLtに設定すると、ファイルパスに時刻ベースのマクロを使用してパーティション別にファイルを分割して書き込みます。ログ発生時刻基準のlogtimeマクロと現在時刻基準のnowマクロを使用できます。(デフォルト:f)tmp=STR- 一時ファイルパスを指定します。設定すると該当パスに一時書き込みを行い、クエリが終了すると最終ファイルパスに移動します。
flush=INT{s|m|h|d}- 定期的にバッファをフラッシュする間隔を指定します。たとえば
flush=10sは10秒ごとにバッファをフラッシュします。
対象
FILE_PATH- テキストファイルを書き込むファイルシステムパス。
partition=tオプションと併用する場合は、{logtime:yyyy}、{logtime:MM}、{logtime:dd}、{now:yyyy}などの時刻マクロをパスに含めることができます。 FIELD, ...- テキストファイルに書き込むフィールド名。カンマ(
,)で区切って複数のフィールドを指定します。
入力フィールド
なし
出力フィールド
なし(入力レコードをそのまま渡す)
エラーコード
パースエラー
| エラーコード | メッセージ | 説明 |
|---|---|---|
| 30400 | outputtxt 명령어 쿼리가 잘못되었습니다. | コマンド文字列がカンマで終わっている場合 |
| 30401 | outputtxt 명령어로 내보낼 파일 경로에 매크로를 지정한 경우 파티션(partition) 옵션이 필요합니다. | ファイルパスに時刻マクロが含まれているがpartition=tがない場合 |
| 30402 | outputtxt 명령어로 내보낼 필드명을 입력하십시오. | 出力するフィールドが指定されていない場合 |
| 30403 | outputtxt 명령어로 내보낼 [temp] 파일이 이미 존재합니다. | 一時ファイルが既に存在する場合 |
| 30404 | outputtxt 명령어로 내보낼 출력파일명 및 필드 값을 입력하시오. | オプション解析後にファイルパスがない場合 |
| 30405 | outputtxt 명령어로 내보낼 출력파일명 및 필드 값을 입력하시오. | ファイルパストークンがない場合 |
| 30407 | outputtxt 명령어의 overwrite와 append 옵션은 동시에 사용할 수 없습니다. | overwrite=tとappend=tを同時に指定した場合 |
| 30408 | outputtxt 명령어로 내보낼 임시 파일 경로 tmp_path로의 접근이 거부되었습니다. | 一時ファイルパスへのアクセス権限がない場合 |
| 30409 | outputtxt 명령어로 내보낼 파일 경로 file_path로의 접근이 거부되었습니다. | テキストファイルパスへのアクセス権限がない場合 |
ランタイムエラー
| エラーコード | メッセージ | 説明 | 後処理の動作 |
|---|---|---|---|
| 30406 | outputtxt 명령어를 실행하는 도중 IO 오류가 발생했습니다: [msg]. | ファイル書き込み中にI/Oエラーが発生した場合 | ファイルハンドルを閉じてクエリを取消 |
| 30409 | outputtxt 명령어로 내보낼 파일 경로 file_path로의 접근이 거부되었습니다. | パーティションモードで解析されたファイルパスにアクセスできない場合 | クエリを取消 |
説明
outputtxtコマンドは、入力として受け取ったレコードのフィールド値を区切り文字で連結してテキストファイルに書き込みます。各レコードのフィールド値は指定した区切り文字(デフォルト: 半角スペース)で連結されて1行として書き込まれます。CSVと異なりヘッダー行はなく、フィールド値を引用符で囲みません。書き込みが完了したレコードは次のコマンドにそのまま渡されます。
gz=tオプションを使用すると、出力ファイルをgzip形式で圧縮します。
partition=tオプションを使用すると、各レコードの_timeフィールドの値(ログ発生時刻)を基準にファイルパスの時刻マクロを解釈し、パーティション別に個別のファイルに書き込みます。
tmpオプションを使用すると、クエリ実行中は一時ファイルパスに書き込み、クエリが正常終了すると最終パスにファイルを移動します。クエリが取り消された場合、appendモードでなければ一時ファイルまたは出力ファイルを削除します。
分散環境では制御ノードでファイル書き込みを実行します。
このコマンドは4.0.2511.0バージョンからクラスター管理者権限が必要で、アクセス可能なファイルパスが制限されます。詳細はファイルアクセス制限を参照してください。
使用例
これらの使用例で参照するWEB_APACHE_SAMPLEテーブルを準備するには、クエリ実習用データを参照してください。
各使用例のファイルパスはALLOWED_FILE_SCAN_PATHS設定に含まれていることを前提とします。
-
テキストファイルへの書き込み
table limit=100 WEB_APACHE_SAMPLE | outputtxt /opt/logpresso/output/access.txt src_ip, method, uri, status, bytessrc_ip、method、uri、status、bytesフィールドを半角スペースで区切って/opt/logpresso/output/access.txtファイルに書き込みます。 -
区切り文字を指定して書き込み
table limit=100 WEB_APACHE_SAMPLE | outputtxt delimiter="|" /opt/logpresso/output/access.txt src_ip, method, statusフィールド値をパイプ(
|)文字で区切って書き込みます。 -
gzip圧縮ファイルへの書き込み
table WEB_APACHE_SAMPLE | outputtxt gz=t /opt/logpresso/output/access.txt.gz src_ip, method, uri, status出力ファイルをgzip形式で圧縮して書き込みます。
-
既存ファイルへの上書き
table limit=100 WEB_APACHE_SAMPLE | outputtxt overwrite=t /opt/logpresso/output/access.txt src_ip, method, status対象ファイルが既に存在していても上書きします。
-
パーティション別ファイルへの分割
table WEB_APACHE_SAMPLE | outputtxt partition=t /opt/logpresso/output/{logtime:yyyy}/{logtime:MM}/{logtime:dd}/access.txt src_ip, method, statusログ発生時刻を基準に年/月/日ディレクトリを作成し、パーティション別にテキストファイルを書き込みます。
-
既存ファイルへの追記
table limit=100 WEB_APACHE_SAMPLE | outputtxt append=t /opt/logpresso/output/access.txt src_ip, method, status既存ファイルの末尾にレコードを追記します。
互換性
outputtxtコマンドは、Sonar 4.0以前のバージョンから提供されています。4.0.2511.0バージョンからクラスター管理者権限が必要です。