查询目录表¶
本主题介绍如何查询目录表以检索暂存区上所有文件的列表,其中包含每个文件的元数据,例如 Snowflake 文件 URL。
查询目录表的语法:
SELECT * FROM DIRECTORY( @<stage_name> )
其中:
stage_name
启用了目录表的暂存区名称。
有关 SELECT 语句以及语句中其他子句的信息,请参阅 Snowflake SQL 命令参考中的 查询语法。
输出¶
目录表查询的输出可以包括以下列:
列
数据类型
描述
RELATIVE_PATH
TEXT
要使用文件 URL 访问的文件的路径。
SIZE
NUMBER
文件大小(以字节为单位)。
LAST_MODIFIED
TIMESTAMP_LTZ
上次在暂存区中更新文件的时间戳。
MD5
HEX
文件的 MD5 校验和。
ETAG
HEX
文件的 ETag 标头。
FILE_URL
TEXT
文件的 Snowflake 文件 URL。
文件 URL 具有以下格式:
https://<account_identifier>/api/files/<db_name>.<schema_name>.<stage_name>/<relative_path>其中:
account_identifier
暂存区的 Snowflake 账户主机名。主机名以账户定位器(由 Snowflake 提供)开头,以 Snowflake 域 (
snowflakecomputing.cn
) 结尾:
account_locator.snowflakecomputing.cn
有关更多详细信息,请参阅 账户标识符。
备注
对于 业务关键 账户,即使您的账户未启用与 Snowflake 服务的专用连接,也会在 URL 中的
snowflakecomputing.cn
(privatelink.snowflakecomputing.cn
) 之前附加privatelink
段。db_name
包含文件所在暂存区的数据库名称。
schema_name
包含文件所在暂存区的架构名称。
stage_name
文件所在暂存区的名称。
relative_path
要使用文件 URL 访问的文件的路径。
使用说明¶
如果从内部暂存区下载的文件已损坏,请与暂存区创建者核实是否为该暂存区设置了
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE')
。
示例¶
以下示例检索名为 mystage
的暂存区目录表中的所有元数据列:
SELECT * FROM DIRECTORY(@mystage);
以下示例从大小超过 100 K 字节的文件中检索目录表的 FILE_URL 列值:
SELECT FILE_URL FROM DIRECTORY(@mystage) WHERE SIZE > 100000;
以下示例从逗号分隔值文件中检索目录表的 FILE_URL 列值:
SELECT FILE_URL FROM DIRECTORY(@mystage) WHERE RELATIVE_PATH LIKE '%.csv';
使用目录表为非结构化数据创建视图¶
您可以将目录表与其他 Snowflake 表联接,以生成非结构化数据视图,这些数据将文件 URLs 与有关文件的元数据组合在一起。
下图说明了如何使用已启用目录表的暂存区以及单独的数据表为暂存区上的非结构化文件创建综合视图。
示例:创建 PDF 文件及其数据的视图
下面的示例通过使用 file_url
键将名为 my_pdf_stage
的暂存区上的目录表与名为 report_metadata
的表相联接,创建了一个名为 reports_information
的视图。暂存区包含 PDF 报表,而 report_metadata
表包含有关每个 PDF 报表(例如 author
和 publish_date
)的结构化信息。生成的视图提供了一种获取有关非结构化 PDFs 及其相关结构化元数据的信息的方法。
CREATE VIEW reports_information AS
SELECT
file_url as report_link,
author,
publish_date,
approved_date,
geography,
num_of_pages
FROM directory(@my_pdf_stage) s
JOIN report_metadata m
ON s.file_url = m.file_url