查询暂存区中的 NDJSON 文件
在 Databend 中,你可以直接查询存储在暂存区(Stage)中的 NDJSON 文件,而无需先将数据加载到表中。这种方法在数据探索、ETL 处理及即席分析等场景尤为实用。
什么是 NDJSON?
NDJSON(Newline Delimited JSON,换行分隔 JSON)是一种基于 JSON 的文件格式,其中每一行都是一个完整且有效的 JSON 对象。该格式特别适合流式数据处理与大数据分析。
NDJSON 文件内容示例:
{"id": 1, "title": "Database Fundamentals", "author": "John Doe", "price": 45.50, "category": "Technology"}
{"id": 2, "title": "Machine Learning in Practice", "author": "Jane Smith", "price": 68.00, "category": "AI"}
{"id": 3, "title": "Web Development Guide", "author": "Mike Johnson", "price": 52.30, "category": "Frontend"}
NDJSON 的优势:
- 流式友好:可逐行解析,无需将整个文件加载到内存。
- 兼容大数据:广泛用于日志文件、数据导出及 ETL 流水线。
- 易于处理:每行均为独立 JSON 对象,支持并行处理。
语法
教程
步骤 1. 创建外部暂存区
使用你自己的 S3 存储桶和凭据创建外部暂存区,用于存放 NDJSON 文件。
CREATE STAGE ndjson_query_stage
URL = 's3://load/ndjson/'
CONNECTION = (
ACCESS_KEY_ID = '<your-access-key-id>'
SECRET_ACCESS_KEY = '<your-secret-access-key>'
);
步骤 2. 创建自定义 NDJSON 文件格式
CREATE FILE FORMAT ndjson_query_format
TYPE = NDJSON,
COMPRESSION = AUTO;
- 更多 NDJSON 文件格式选项请参考 NDJSON 文件格式选项
步骤 3. 查询 NDJSON 文件
现在可直接从暂存区查询 NDJSON 文件。以下示例从每个 JSON 对象中提取 title
和 author
字段:
SELECT $1:title, $1:author
FROM @ndjson_query_stage
(
FILE_FORMAT => 'ndjson_query_format',
PATTERN => '.*[.]ndjson'
);
解释:
$1:title
与$1:author
:从 JSON 对象中提取特定字段。$1
表示整个 JSON 对象(Variant 类型),:field_name
用于访问单个字段。@ndjson_query_stage
:引用步骤 1 中创建的外部暂存区。FILE_FORMAT => 'ndjson_query_format'
:使用步骤 2 中定义的自定义文件格式。PATTERN => '.*[.]ndjson'
:正则表达式,匹配所有以.ndjson
结尾的文件。
查询压缩文件
若 NDJSON 文件使用 gzip 压缩,请将模式修改为匹配压缩文件:
SELECT $1:title, $1:author
FROM @ndjson_query_stage
(
FILE_FORMAT => 'ndjson_query_format',
PATTERN => '.*[.]ndjson[.]gz'
);
关键区别: 模式 .*[.]ndjson[.]gz
匹配以 .ndjson.gz
结尾的文件。由于文件格式中设置了 COMPRESSION = AUTO
,Databend 会在查询执行期间自动解压 gzip 文件。
相关文档
- 加载 NDJSON 文件 - 如何将 NDJSON 数据加载到表中
- NDJSON 文件格式选项 - 完整的 NDJSON 格式配置
- CREATE STAGE - 管理外部和内部暂存区