Query metadata for staged files¶
Snowflake 会自动为内部(即 Snowflake)暂存区或外部(Amazon S3、Google Cloud Storage 或 Microsoft Azure)暂存区中的文件生成元数据。此元数据“存储”在虚拟列中,这些列可以:
使用标准 SELECT 语句查询。
与常规数据列一起,使用 COPY INTO <table> 加载到表中。有关查询暂存数据文件的一般信息,请参阅 Query data in staged files。
Metadata columns¶
目前,可以查询或复制以下元数据列到表中:
- METADATA$FILENAME
当前行所属的暂存数据文件的名称。包括数据文件的完整路径。
- METADATA$FILE_ROW_NUMBER
暂存数据文件中每条记录的行号。
- METADATA$FILE_CONTENT_KEY
当前行所属的暂存数据文件的校验和。
- METADATA$FILE_LAST_MODIFIED
当前行所属的暂存数据文件的上次修改时间戳。返回为 TIMESTAMP_NTZ。
- METADATA$START_SCAN_TIME
为暂存数据文件中的每条记录启动操作时间戳。返回为 TIMESTAMP_LTZ。
Query limitations¶
元数据不能插入到现有表行中。
元数据列只能按名称查询;因此,它们不包含在以下任何语句的输出中:
Query examples¶
Example 1: Query the metadata columns for a CSV file¶
下面的示例演示如何暂存多个 CSV 数据文件(具有相同的文件格式),然后查询文件中的元数据列以及常规数据列。
此示例假定文件具有以下名称,并且位于 macOS 或 Linux 环境的根目录中:
/tmp/data1.csv包含两条记录:/tmp/data2.csv包含两条记录:
要暂存和查询文件,请执行以下操作:
备注
在此示例中,需要文件格式才能正确分析暂存文件中的字段。在第二个查询中,文件格式省略,导致 | 字段分隔符被忽略,并返回 $1 和 $2 的值。
但是,如果文件格式包含在暂存定义中,则可以从 SELECT 语句中省略。有关更多信息,请参阅下一个示例。
Example 2: Query the metadata columns for a JSON file¶
此示例演示如何暂存包含以下对象的 JSON 数据文件,然后查询文件中的元数据列以及对象:
此示例假定该文件已命名为 /tmp/data1.json,并且位于 macOS 或 Linux 环境的根目录中:
要暂存和查询文件,请执行以下操作:
Example 3: Load metadata columns into a table¶
该 COPY INTO <table> 命令支持将元数据从暂存数据文件复制到目标表中。在 COPY 语句中使用数据转换语法(即 SELECT 列表)。有关使用 COPY 语句转换数据的详细信息,请参阅 Transform data during a load。
The following example loads the metadata columns and regular data columns from Example 1: Query the metadata columns for a CSV file into a table: