input テーブル関数
input(structure) - クライアントからサーバーに送信される、指定された構造を持つデータを、別の構造を持つテーブルへ効率的に変換して挿入するためのテーブル関数です。
structure - サーバーに送信されるデータの構造を、次の形式で指定します: 'column1_name column1_type, column2_name column2_type, ...'。
例えば、'id UInt32, name String' のように指定します。
この関数は INSERT SELECT クエリの中でのみ、かつ 1 回だけ使用できますが、それ以外は通常のテーブル関数と同様に動作します
(例えば、サブクエリ内で使用することもできます)。
データは通常の INSERT クエリと同様に任意の方法で送信でき、任意の利用可能な format
で渡すことができます。そのフォーマットはクエリの末尾で指定する必要があります(通常の INSERT SELECT とは異なります)。
この関数の主な特徴は、サーバーがクライアントからデータを受信する際に、SELECT 句中の式リストに従って同時にデータを変換し、
その結果をターゲットテーブルに直接挿入する点です。転送されたすべてのデータを保持する一時テーブルは作成されません。
例
testテーブルが(a String, b String)という構造を持ち、data.csv内のデータが(col1 String, col2 Date, col3 Int32)という別の構造であるとします。data.csvからtestテーブルへデータを挿入しつつ、同時に型変換も行うクエリは次のようになります。
data.csvがテーブルtestと同じ構造test_structureを持つデータを含んでいる場合、次の 2 つのクエリは等価です。