Snowflake如何读取S3中Parquet文件的数值精度等元数据
结论
可以直接在Snowflake中检索Parquet文件的数值类型精度、小数位数等元数据,不需要依赖Glue Catalog或其他外部工具。
单文件元数据检索方案
方案1:用INFER_SCHEMA直接读取Parquet原生元数据
这是最推荐的单文件测试方案,无需提前建表,直接扫描目标Parquet文件返回原生定义的元数据:
SELECT COLUMN_NAME, TYPE, PRECISION, -- 数值总有效位数 SCALE, -- 你需要的小数位数 NULLABLE FROM TABLE( INFER_SCHEMA( LOCATION => '@你的Stage名称/目标文件所在路径/xxx.parquet', FILE_FORMAT => '你已创建的Parquet文件格式名称' ) );
- 返回的
PRECISION和SCALE完全匹配Parquet文件头存储的原生元数据,不是Snowflake的自动推导默认值 - 支持直接指定单个文件路径,不需要扫描整个Stage的全量文件,符合单文件测试的需求
方案2:已建外部表的场景直接查信息架构
如果你已经基于该Parquet文件结构创建了外部表,可以直接查询Snowflake信息架构获取字段精度参数:
SELECT COLUMN_NAME, DATA_TYPE, NUMERIC_PRECISION, NUMERIC_SCALE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '你的外部表名称' AND TABLE_SCHEMA = '外部表所属的Schema名称';
注意:如果创建外部表时你手动修改了字段类型、精度或小数位数,该方法返回的是你手动配置的参数,不是Parquet文件的原生元数据,这种场景请使用方案1扫描原文件获取真实值。
什么时候需要用到外部工具?
只有当你需要批量扫描全桶数十万级别Parquet文件做统一元数据归集、校验等操作时,才需要考虑用Glue Catalog或者自行开发脚本提取元数据,单文件、小批量的元数据检索用Snowflake原生功能完全可以覆盖。
内容的提问来源于stack exchange,提问作者dovregubben
相关产品推荐
相关产品推荐

