查询已暂存文件的元数据
为什么和什么是元数据?
Databend 允许你使用 INFER_SCHEMA 函数从数据文件中检索元数据。这意味着你可以从存储在内部或外部阶段的数据文件中提取列定义。通过 INFER_SCHEMA
函数检索元数据可以更好地理解数据结构,确保数据一致性,并实现自动化的 数据集成和分析。每个列的元数据包括以下信息:
- column_name: 表示列的名称。
- type: 表示列的数据类型。
- nullable: 表示列是否允许空值。
- order_id: 表示列在表中的位置。
备注
此功能目前仅适用于 Parquet 文件格式。
INFER_SCHEMA
的语法如下。有关此函数的更多详细信息,请参阅 INFER_SCHEMA。
INFER_SCHEMA(
LOCATION => '{ internalStage | externalStage }'
[ PATTERN => '<regex_pattern>']
)
教程:查询列定义
在本教程中,我们将指导你完成将示例文件上传到内部阶段、查询列定义,并最终基于暂存文件创建表的过程。在开始之前,请下载并保存示例文件 books.parquet 到本地文件夹。
- 创建一个名为 my_internal_stage 的内部阶段:
CREATE STAGE my_internal_stage;
- 使用 BendSQL 暂存示例文件:
PUT fs:///Users/eric/Documents/books.parquet @my_internal_stage
结果:
┌───────────────────────────────────────────────┐
│ file │ status │
│ String │ String │
├─────────────────────────────────────┼─────────┤
│ /Users/eric/Documents/books.parquet │ SUCCESS │
└───────────────────────────────────────────── ──┘
- 从暂存的示例文件中查询列定义:
SELECT * FROM INFER_SCHEMA(location => '@my_internal_stage/books.parquet');
结果:
┌─────────────┬─────────┬─────────┬─────────┐
│ column_name │ type │ nullable│ order_id│
├─────────────┼─────────┼─────────┼─────────┤
│ title │ VARCHAR │ 0 │ 0 │
│ author │ VARCHAR │ 0 │ 1 │
│ date │ VARCHAR │ 0 │ 2 │
└─────────────┴─────────┴─────────┴─────────┘
- 基于暂存的示例文件创建一个名为 mybooks 的表:
CREATE TABLE mybooks AS SELECT * FROM @my_internal_stage/books.parquet;
检查创建的表:
DESC mybooks;
结果:
┌─────────┬─────────┬──────┬─────────┬───────┐
│ Field │ Type │ Null │ Default │ Extra │
├─────────┼─────────┼──────┼─────────┼───────┤
│ title │ VARCHAR │ NO │ '' │ │
│ author │ VARCHAR │ NO │ '' │ │
│ date │ VARCHAR │ NO │ '' │ │
└─────────┴─────────┴──────┴─────────┴───────┘
SELECT * FROM mybooks;
结果:
┌───────────────────────────┬───────────────────┬──────┐
│ title │ author │ date │
├───────────────────────────┼───────────────────┼──────┤
│ Transaction Processing │ Jim Gray │ 1992 │
│ Readings in Database Systems│ Michael Stonebraker│ 2004│
└───────────────────────────┴───────────────────┴──────┘