説明
Template フォーマットを使うと、値のプレースホルダーを含む独自の フォーマット文字列 と、
データのエスケープ規則を指定できます。
使用する設定は次のとおりです。
設定とエスケープルール
format_template_row
format_template_row は、次の構文で行の フォーマット文字列 を含むファイルへのパスを指定します。
サポートされているエスケープ規則は次のとおりです。
エスケープ規則を省略した場合は、
None が使用されます。XML は出力にのみ適しています。SELECT を使用する場合は出力され、INPUT を使用する場合は入力として期待されます。
それぞれ、カラム Search phrase:, , count:, , ad price: $ の間、および ; の区切り文字で区切られます。
s(エスケープルールはQuoted)c(エスケープルールはEscaped)p(エスケープルールはJSON)
INSERTする場合、以下の行は期待されるテンプレートに一致しており、値bathroom interior design,2166,$3がカラムSearch phrase,count,ad priceに読み込まれます。SELECTする場合、値bathroom interior design,2166,$3がすでにテーブルのカラムSearch phrase,count,ad priceに格納されているとすると、以下の行が出力されます。
format_template_rows_between_delimiter
format_template_rows_between_delimiter は、行間の区切り文字を指定します。これは、最後の行を除く各行の後に出力される (または入力時に期待される) 文字列です (デフォルトは \n) 。
format_template_resultset
format_template_resultset は、結果セット用のフォーマット文字列を含むファイルのパスを指定します。
結果セット用のフォーマット文字列は、行用のフォーマット文字列と同じ構文です。
プレフィックスや接尾辞、追加情報の出力方法を指定でき、カラム名の代わりに次のプレースホルダーを含めます。
dataは、format_template_rowフォーマットのデータを含む行で、format_template_rows_between_delimiterで区切られます。このプレースホルダーは、フォーマット文字列内で最初のプレースホルダーでなければなりません。totalsは、format_template_rowフォーマットの合計値を含む行です (WITH TOTALS を使用する場合) 。minは、format_template_rowフォーマットの最小値を含む行です (extremes が 1 に設定されている場合) 。maxは、format_template_rowフォーマットの最大値を含む行です (extremes が 1 に設定されている場合) 。rowsは、出力される行の総数です。rows_before_limitは、LIMIT がなかった場合に存在していた行数の最小値です。これは、クエリに LIMIT が含まれている場合にのみ出力されます。クエリに GROUP BY が含まれる場合、rows_before_limit_at_least は、LIMIT がなかった場合に存在していた行数の正確な値です。timeは、リクエストの実行時間 (秒) です。rows_readは、読み込まれた行数です。bytes_readは、読み込まれたバイト数 (非圧縮) です。
data、totals、min、max にはエスケープ規則を指定してはなりません (または None を明示的に指定する必要があります) 。それ以外のプレースホルダーには、任意のエスケープ規則を指定できます。
format_template_resultset 設定が空文字列の場合、デフォルト値として ${data} が使用されます。インライン指定
format_template_row、format_template_resultset で設定) を、クラスター内のすべてのノードのディレクトリにデプロイするのは困難であり、不可能なこともあります。
さらに、フォーマットが非常に単純であれば、ファイルに置く必要がない場合もあります。
このような場合は、format_template_row_format (format_template_row 用) および format_template_resultset_format (format_template_resultset 用) を使用して、テンプレート文字列を、それを含むファイルへのパスとしてではなく、クエリ内で直接設定できます。
フォーマット文字列およびエスケープシーケンスのルールは、次の場合と同じです。
format_template_row_formatを使用する場合のformat_template_row。format_template_resultset_formatを使用する場合のformat_template_resultset。
使用例
Templateフォーマットの使用例を2つ見ていきます。まずはデータの選択、次にデータの挿入です。
データの取得
Query
/some/path/resultset.format
/some/path/row.format
Response
データの挿入
/some/path/resultset.format
/some/path/row.format
PageViews、UserID、Duration、Signは、テーブル内のカラム名です。行内のUseless fieldの後ろにある値と、接尾辞内の\nTotal rows:の後ろにある値は無視されます。
入力データ内のすべての区切り文字は、指定されたフォーマット文字列内の区切り文字と厳密に一致している必要があります。
インライン指定
Template フォーマットとインライン指定の設定を使って、シンプルなタスク、つまり system.formats テーブルからいくつかの ClickHouse フォーマット名を SELECT し、それらを Markdown テーブルとして整形する方法を見ていきます。これは、Template フォーマットと設定 format_template_row_format および format_template_resultset_format を使えば簡単に実現できます。
前の例では、結果セットと行のフォーマット文字列を別々のファイルに指定し、それらのファイルのパスをそれぞれ設定 format_template_resultset と format_template_row で指定していました。ここでは、テンプレートが単純で、Markdown テーブルを作るための | と - が少しあるだけなので、インラインで指定します。結果セットのテンプレート文字列は、設定 format_template_resultset_format を使って指定します。テーブルヘッダーを作るため、${data} の前に |ClickHouse Formats|\n|---|\n を追加しています。行のテンプレート文字列 |`{0:XML}`| は、設定 format_template_row_format で指定します。Template フォーマットは、指定したフォーマットで行をプレースホルダー ${data} に挿入します。この例ではカラムは 1 つだけですが、さらに追加したい場合は、行テンプレート文字列に {1:XML}、{2:XML} などを追加すれば対応できます。その際は必要に応じて適切なエスケープルールを選択してください。この例では、エスケープルール XML を使用しています。
Query
| や - を手作業で追加する手間が省けました。
Response