跳到主要内容

查询暂存区中的 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;

步骤 3. 查询 NDJSON 文件

现在可直接从暂存区查询 NDJSON 文件。以下示例从每个 JSON 对象中提取 titleauthor 字段:

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 文件。

相关文档