file 表函数
SELECT 数据并向文件中 INSERT 数据。处理本地文件时使用 file,处理 S3、GCS 或 MinIO 等对象存储中的桶时使用 s3。
file 函数可在 SELECT 和 INSERT 查询中使用,以从文件读取数据或向文件写入数据。
语法
SELECT 查询,path 也可以是返回 Array(String) 的表达式:
参数
返回值
写入文件示例
写入 TSV 文件
test.tsv 文件中:
按分区写入多个 TSV 文件
file 类型的表函数插入数据时指定了 PARTITION BY 表达式,则会为每个分区分别创建一个文件。将数据拆分到不同文件中有助于提升读取操作的性能。
test_1.tsv、test_2.tsv 和 test_3.tsv。
从文件中读取的示例
从 CSV 文件中执行 SELECT
user_files_path,并准备文件 test.csv:
test.csv 中的数据读入表中,并选择前两行:
将文件中的数据插入到表中
archive1.zip 或/和 archive2.zip 中的 table.csv 读取数据:
路径中的通配符
*,从而
选中该目录中的所有文件。
*— 表示除/之外的任意多个字符,也包括空字符串。?— 表示任意单个字符。{some_string,another_string,yet_another_one}— 替换为字符串'some_string'、'another_string'、'yet_another_one'中的任意一个。这些字符串可以包含/符号。{N..M}— 表示任何>= N且<= M的数字。**- 表示递归匹配文件夹中的所有文件。
{} 的构造与 remote 和 hdfs 表函数类似。
示例
some_dir/some_file_1some_dir/some_file_2some_dir/some_file_3another_dir/some_file_1another_dir/some_file_2another_dir/some_file_3
* 查询 some_dir 中的行总数:
如果文件列表中包含带前导零的数字范围,请为每一位数字分别使用花括号写法,或使用
?。file000、file001、…、file999 的文件中的总行数:
big_dir/ 中所有文件的总行数:
big_dir/ 下任意文件夹中的所有 file002 文件的总行数:
虚拟列
_path— 文件路径。类型:LowCardinality(String)。_file— 文件名。类型:LowCardinality(String)。_size— 文件大小 (以字节为单位) 。类型:Nullable(UInt64)。如果文件大小未知,则该值为NULL。_time— 文件的最后修改时间。类型:Nullable(DateTime)。如果时间未知,则该值为NULL。
use_hive_partitioning 设置
use_hive_partitioning 设置为 1 时,ClickHouse 会识别路径中的 Hive 风格分区 (/name=value/) ,并允许在查询中将分区列作为虚拟列使用。这些虚拟列的名称将与分区路径中的名称相同。
示例
使用通过 Hive 风格分区生成的虚拟列