跳到主要内容

查询 Stage 文件元数据

本教程将演示如何把示例 Parquet 文件上传到 Internal Stage、推断其列定义,并创建带有文件级元数据字段的表,以便追踪每行数据来自哪个文件、对应的行号等。

开始之前

请先完成以下准备:

步骤 1:创建 Internal Stage

CREATE STAGE my_internal_stage;

步骤 2:通过 BendSQL 上传文件

假设示例文件位于 /Users/eric/Documents/iris.parquet,可在 BendSQL 中运行:

PUT fs:///Users/eric/Documents/iris.parquet @my_internal_stage;
┌───────────────────────────────────────────────────────┐
filestatus │ size │
├────────────────────────────────────┼─────────┼────────┤
/Users/eric/Documents/iris.parquet │ SUCCESS │ 6164
└───────────────────────────────────────────────────────┘

步骤 3:从 Stage 文件推断列定义

警告

infer_schema 目前仅支持 Parquet 文件。

SELECT * FROM INFER_SCHEMA(location => '@my_internal_stage/iris.parquet');
┌──────────────────────────────────────────────┐
│ column_name │ type │ nullable │ order_id │
├──────────────┼─────────┼──────────┼──────────┤
│ id │ BIGINTtrue0
│ sepal_length │ DOUBLEtrue1
│ sepal_width │ DOUBLEtrue2
│ petal_length │ DOUBLEtrue3
│ petal_width │ DOUBLEtrue4
│ species │ VARCHARtrue5
└──────────────────────────────────────────────┘

步骤 4:带元数据字段的预览

可以使用 metadata$filenamemetadata$file_row_number 等字段查看文件级信息:

SELECT
metadata$filename,
metadata$file_row_number,
*
FROM @my_internal_stage/iris.parquet
LIMIT 5;
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ metadata$filename │ metadata$file_row_number │ id │ sepal_length │ sepal_width │ petal_length │ petal_width │ species │ metadata$filename │ metadata$file_row_number │
├───────────────────┼──────────────────────────┼─────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼──────────────────┼───────────────────┼──────────────────────────┤
│ iris.parquet │ 015.13.51.40.2 │ setosa │ iris.parquet │ 0
│ iris.parquet │ 124.931.40.2 │ setosa │ iris.parquet │ 1
│ iris.parquet │ 234.73.21.30.2 │ setosa │ iris.parquet │ 2
│ iris.parquet │ 344.63.11.50.2 │ setosa │ iris.parquet │ 3
│ iris.parquet │ 4553.61.40.2 │ setosa │ iris.parquet │ 4
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

步骤 5:创建包含元数据字段的表

CREATE TABLE iris_with_meta AS
SELECT
metadata$filename AS iris_file,
metadata$file_row_number AS row_index,
sepal_length,
sepal_width,
petal_length,
petal_width,
species
FROM @my_internal_stage/iris.parquet;

步骤 6:查询带元数据的数据

SELECT * FROM iris_with_meta LIMIT 5;
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ iris_file │ row_index │ sepal_length │ sepal_width │ petal_length │ petal_width │ species │
├──────────────────┼──────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼──────────────────┤
│ iris.parquet │ 05.13.51.40.2 │ setosa │
│ iris.parquet │ 14.931.40.2 │ setosa │
│ iris.parquet │ 24.73.21.30.2 │ setosa │
│ iris.parquet │ 34.63.11.50.2 │ setosa │
│ iris.parquet │ 453.61.40.2 │ setosa │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
欢迎体验 Databend Cloud

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

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

注册即领 ¥200 代金券。

注册体验