跳到主要内容

CREATE FILE FORMAT

Introduced or updated: v1.2.339

创建一个命名的文件格式。

语法

CREATE [ OR REPLACE ] FILE FORMAT [ IF NOT EXISTS ] <format_name> FileFormatOptions

关于 FileFormatOptions 的详细信息,请参考 输入 & 输出文件格式

使用文件格式

创建一次,即可在查询和加载数据时重复使用该格式:

-- 1) 创建可复用的格式
CREATE OR REPLACE FILE FORMAT my_custom_csv TYPE = CSV FIELD_DELIMITER = '\t';

-- 2) 查询 Stage 中的文件(stage 表函数参数使用 =>)
SELECT * FROM @mystage/data.csv (FILE_FORMAT => 'my_custom_csv') LIMIT 10;

-- 3) 用 COPY INTO 导入文件(copy 选项使用 =)
COPY INTO my_table
FROM @mystage/data.csv
FILE_FORMAT = (FORMAT_NAME = 'my_custom_csv');

为什么有 =>= 的区别?Stage 表函数的参数使用键值写法 =>,而 COPY INTO 的选项采用常规的 = 赋值语法。

快速流程:使用同一格式进行创建、查询和加载

-- 创建可复用的格式
CREATE FILE FORMAT my_parquet TYPE = PARQUET;

-- 使用该格式查询 Stage 中的文件(Stage 表函数语法使用 =>)
SELECT * FROM @sales_stage/2024/order.parquet (FILE_FORMAT => 'my_parquet') LIMIT 10;

-- 使用 COPY INTO 加载 Stage 文件(LOAD 选项使用 =)
COPY INTO analytics.orders
FROM @sales_stage/2024/order.parquet
FILE_FORMAT = (FORMAT_NAME = 'my_parquet');

关于 LANCE 的说明

你也可以创建一个命名的 Lance 文件格式:

CREATE FILE FORMAT my_lance TYPE = LANCE;

但与 CSV、TSV、NDJSON、PARQUET 不同,命名的 LANCE 格式只能复用于 COPY INTO <location>,不能用于 Stage 文件查询,也不能用于 COPY INTO <table>,因为 Databend 写出的是 Lance 数据集目录,而不是单个文件。

COPY INTO @ml_stage/datasets/train
FROM my_training_table
FILE_FORMAT = (FORMAT_NAME = 'my_lance')
USE_RAW_PATH = TRUE
OVERWRITE = TRUE;

关于 Lance 的行为差异和限制,请参阅 文件格式选项COPY INTO <location>

欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验