テンプレート
| Input | Output | Alias |
|---|---|---|
| ✔ | ✔ |
説明
他の標準フォーマットが提供するよりも多くのカスタマイズが必要な場合、
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 | 同名のフォーマットに類似 |
Escaped | TSVに類似 |
Quoted | Valuesに類似 |
Raw | エスケープなし、TSVRawに類似 |
None | エスケープルールなし - 注記を参照 |
エスケープルールが省略された場合、Noneが使用されます。XMLは出力のみに適しています。
例を見てみましょう。次のフォーマット文字列を与えられた場合:
次の値が印刷されます(SELECTを使用する場合)または期待されます(INPUTを使用する場合)、
カラムSearch phrase:, , count:, , ad price: $および;デリミタの間にそれぞれ:
s(エスケープルールQuoted付き)c(エスケープルールEscaped付き)p(エスケープルールJSON付き)
例えば:
INSERTする場合、以下の行は期待されるテンプレートと一致し、カラムSearch phrase,count,ad priceに値bathroom interior design,2166,$3を読み込みます。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フォーマットでの最小値を持つ行(極値が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は、読み取られたバイト数(非圧縮)です。
プレースホルダー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_template_row_format。format_template_resultsetを使用する場合のformat_template_resultset_format。
使用例
Templateフォーマットを使用してデータを選択する例と挿入する例を見てみましょう。
データの選択
結果:
データの挿入
PageViews, UserID, DurationおよびSignのプレースホルダー内は、テーブル内のカラム名です。 行のUseless fieldの後、および接尾辞の\nTotal rows:の後の値は無視されます。
入力データ内のすべてのデリミタは、指定されたフォーマット文字列内のデリミタと厳密に一致する必要があります。
インライン仕様
マークダウンテーブルを手動でフォーマットするのに疲れましたか? この例では、Templateフォーマットとインライン仕様設定を使用して、あるシンプルなタスク - system.formatsテーブルからいくつかのClickHouseフォーマットの名前をSELECTし、それらをマークダウンテーブルとしてフォーマットする方法を見てみます。 これはTemplateフォーマットと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を選びました。
見てください! 私たちは、マークダウンテーブルを作成するために手動で追加する必要のあるすべての|や-を追加する手間を省きました: