管理常规数据加载¶
本主题提供管理常规数据加载的最佳实践、一般准则和重要注意事项。
本主题内容:
对暂存数据文件进行分区¶
在规划定期数据加载(例如 ETL [提取、转换、加载])进程或定期导入计算机生成的数据时,请务必使用逻辑粒度路径在内部(即 Snowflake)暂存区或外部位置(S3 桶或 Azure 容器)中对数据进行分区。创建一个分区结构,其中包括标识详细信息(如应用程序或位置)以及写入数据的日期。然后,您可以使用单个命令将分区数据的任何部分复制到 Snowflake 中。您可以按最初填充表时的小时、日、月甚至年将数据复制到 Snowflake 中。
使用路径的分区 S3 桶的一些示例:
s3://bucket_name/application_one/2016/07/01/11/
s3://bucket_name/application_two/location_one/2016/07/01/14/
其中:
application_one
、application_two
、location_one
等标识路径中所有数据源的详细信息。数据可按编写日期整理。可选的 24 小时目录减少了每个目录中的数据量。
备注
S3 传输 Snowflake 使用的每个 COPY 语句的目录列表,因此减少每个目录中的文件数量可以提高 COPY 语句的表现。您甚至可以考虑每小时在文件夹中创建 10-15 分钟增量的子文件夹。
同样,也可以在内部暂存区暂存文件时添加路径。例如:
PUT file:///tmp/file_20160701.11*.csv @my_stage/<application_one>/<location_one>/2016/07/01/11/;
加载暂存数据¶
通过指定暂存文件的精确路径,将组织的数据文件加载到 Snowflake 表中。有关更多信息,请参阅 按路径组织数据。
移除加载的数据文件¶
成功加载暂存文件中的数据后,请考虑移除暂存文件,以确保不会再次无意中加载数据(重复)。
备注
在成功加载数据之前,不要移除暂存文件。要检查数据是否已成功加载,请使用 COPY_HISTORY 命令。检查 STATUS
列以确定是否已加载文件中的数据。请注意,如果状态为 Load in progress
,则移除暂存文件可能会导致部分加载和数据丢失。
可以使用以下方法从 Snowflake 暂存区(用户暂存区、表暂存区或命名暂存区)中删除暂存文件:
通过在 COPY INTO <table> 命令中指定 PURGE 复制选项,可以在加载过程中将已成功加载的文件从暂存区中删除。
加载完成后,使用 REMOVE 命令移除暂存区中的文件。
移除文件可确保不会无意中再次加载这些文件。这还能提高加载性能,因为它减少了 COPY 命令为验证暂存区中的现有文件是否已加载而必须扫描的文件数量。