メインコンテンツまでスキップ
メインコンテンツまでスキップ

Template

入力出力エイリアス

説明

他の標準フォーマットが提供するよりもカスタマイズが必要な場合に、 テンプレート フォーマットは、ユーザーが値のプレースホルダーを持つ独自のカスタムフォーマット文字列を指定し、データのエスケープルールを指定できるようにします。

以下の設定を使用します:

設定説明
format_template_row行のフォーマット文字列を含むファイルへのパスを指定します。
format_template_resultset行のフォーマット文字列を含むファイルへのパスを指定します。
format_template_rows_between_delimiter最後の行を除くすべての行の後に印刷される(または期待される)行の区切り文字を指定します(デフォルトは \n)。
format_template_row_format行のフォーマット文字列を指定します インライン
format_template_resultset_format結果セットのフォーマット文字列を指定します インライン
他のフォーマットの一部の設定 (例: JSON エスケープを使用する際の output_format_json_quote_64bit_integers)

設定とエスケープルール

format_template_row

設定 format_template_row は、以下の構文で行のフォーマット文字列を含むファイルへのパスを指定します:

ここで:

構文の部分説明
delimiter_i値の間の区切り文字($ シンボルは $$ としてエスケープできます)
column_i値を選択または挿入するカラムの名前またはインデックス(空の場合、そのカラムはスキップされます)
serializeAs_iカラム値に対するエスケープルール。

次のエスケープルールがサポートされています:

エスケープルール説明
CSV, JSON, XML同名のフォーマットに似ています
EscapedTSV に似ています
QuotedValues に似ています
Rawエスケープなし、TSVRaw に似ています
Noneエスケープルールなし - 以下の注意を参照
注記

エスケープルールが省略された場合、None が使用されます。 XML は出力専用です。

以下のフォーマット文字列を考えてみましょう:

次の値が印刷されます(SELECT を使用する場合)または期待されます(INPUT を使用する場合)。 それぞれ 検索フレーズ:, , カウント:, , 広告価格: $; の区切り文字間に:

  • s (エスケープルール Quoted
  • c (エスケープルール Escaped
  • p (エスケープルール JSON

例えば:

  • INSERT 時に、以下の行が期待されるテンプレートに一致し、カラム 検索フレーズカウント広告価格 に値 bathroom interior design, 2166, $3 を読み込みます。
  • SELECT 時に、以下の行が出力され、値 bathroom interior design, 2166, $3 がすでに 検索フレーズカウント広告価格 のカラムの下にテーブルに格納されていると仮定します。

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 フォーマットで示します(エクストリームが 1 に設定されている場合)。
  • max は、最大値の行を format_template_row フォーマットで示します(エクストリームが 1 に設定されている場合)。
  • rows は、出力行の合計数です。
  • rows_before_limit は、LIMIT なしで存在していたであろう最小行数です。クエリが LIMIT を含む場合のみ出力されます。クエリが GROUP BY を含む場合、rows_before_limit_at_least は、LIMIT なしで存在していたであろう正確な行数です。
  • time は、リクエストの実行時間(秒単位)です。
  • rows_read は、読み取られた行の数です。
  • bytes_read は、読み取られたバイト数(非圧縮)です。

プレースホルダー datatotalsmin および max は、エスケープルールが指定されないか(または None が明示的に指定される必要があります)。残りのプレースホルダーは、エスケープルールを指定することができます。

注記

format_template_resultset 設定が空文字列の場合、${data} がデフォルト値として使用されます。

挿入クエリのフォーマットは、接頭辞または接尾辞を指定することで、いくつかのカラムまたはフィールドをスキップできます(例を参照)。

インライン仕様

フォーマット構成(format_template_rowformat_template_resultset によって設定される)は、クラスタ内のすべてのノードにディレクトリに配置するのが困難または不可能な場合があります。 さらに、フォーマットが非常に簡単でファイルに配置する必要がない場合もあります。

これらのケースでは、format_template_row_formatformat_template_row 用)および format_template_resultset_formatformat_template_resultset 用)を使用して、テンプレート文字列を直接クエリに設定できます。 ファイルへのパスではなく、それを含むファイルへのパスを設定するのではなく、直接渡します。

注記

フォーマット文字列とエスケープシーケンスに関するルールは以下の通りです:

使用例

テンプレート フォーマットの使用法として、データを選択する場合とデータを挿入する場合の 2 つの例を見てみましょう。

データの選択

結果:

データの挿入

PageViewsUserIDDuration および Sign はプレースホルダー内でテーブルのカラムの名前です。行の 無意味なフィールド と接尾辞の \n合計行数: 以降の値は無視されます。 入力データのすべての区切り文字は、指定されたフォーマット文字列の区切り文字と厳密に同一でなければなりません。

インライン仕様

マークダウンテーブルを手動でフォーマットすることに疲れましたか?この例では、テンプレート フォーマットとインライン仕様設定を使用して、system.formats テーブルからいくつかの ClickHouse フォーマットの名前を取得し、マークダウンテーブルとしてフォーマットする簡単なタスクを達成する方法を見てみましょう。これは、テンプレート フォーマットと設定 format_template_row_format および format_template_resultset_format を使用して簡単に達成できます。

以前の例では、結果セットと行のフォーマット文字列を別々のファイルに指定し、それぞれのファイルパスを format_template_resultset および format_template_row 設定を使用して指定しました。ここでは、テンプレートが簡単で、マークダウンテーブルを作成するための |- しか含まれていないため、インラインで指定します。結果セットのテンプレート文字列は、format_template_resultset_format 設定を使用して指定します。テーブルヘッダーを作成するために、${data} の前に |ClickHouse Formats|\n|---|\n を追加しました。また、format_template_row_format 設定を使用して、行のテンプレート文字列 |`{0:XML}`| を指定します。Template フォーマットは、指定されたフォーマットで行をプレースホルダー ${data} に挿入します。この例ではカラムは 1 つだけですが、追加したい場合は、行のテンプレート文字列に {1:XML}{2:XML}... などを追加できます。適切なエスケープルールを選択してください。この例では、XML エスケープルールを使用しています。

見てください!あらかじめ |- を手動で追加する手間が省けました: