input
input(structure)
- 表函数,允许有效地转换和插入发送到服务器的具有给定结构的数据到具有另一结构的表。
structure
- 发送到服务器的数据的结构,格式如下:'column1_name column1_type, column2_name column2_type, ...'
。例如,'id UInt32, name String'
。
此函数只能在 INSERT SELECT
查询中使用,且只能使用一次,但在其他方面行为类似于普通表函数(例如,它可以在子查询中使用等)。
数据可以像普通 INSERT
查询一样以任何方式发送,并以任何可用的 格式 传递,该格式必须在查询末尾指定(与普通 INSERT SELECT
不同)。
此函数的主要特点是,当服务器从客户端接收数据时,它会根据 SELECT
子句中的表达式列表同时转换数据并插入到目标表中。不会创建包含所有传输数据的临时表。
示例
- 假设
test
表具有以下结构(a String, b String)
,并且data.csv
中的数据具有不同的结构(col1 String, col2 Date, col3 Int32)
。从data.csv
将数据插入到test
表并同时进行转换的查询如下所示
$ cat data.csv | clickhouse-client --query="INSERT INTO test SELECT lower(col1), col3 * col3 FROM input('col1 String, col2 Date, col3 Int32') FORMAT CSV";
- 如果
data.csv
包含与表test
相同的结构test_structure
的数据,则以下两个查询相等
$ cat data.csv | clickhouse-client --query="INSERT INTO test FORMAT CSV"
$ cat data.csv | clickhouse-client --query="INSERT INTO test SELECT * FROM input('test_structure') FORMAT CSV"