任务简介¶
任务使用用户定义的函数来自动化和计划业务流程。通过一个任务,可在数据管道中执行从简单到复杂的函数。通过 任务图,可将多个任务放在一起,形成数据管道,从而处理复杂的用例。您还可以将任务与连续 ELT 工作流程的 表流 结合起来,以处理最近更改的数据。
一个任务可以执行以下任何一种函数:
单个 SQL 语句
调用存储过程
使用 Snowflake Scripting 的过程逻辑
可将触发任务与连续 ELT 工作流程的 表流 结合使用,以处理最近更改的表行。
任务还可以独立使用,通过将行插入或合并到报告表中来生成定期报告,或是执行其他定期工作。要运行包含任务的复杂业务流程,请考虑使用 任务图 将多个任务链接在一起。
备注
任务不支持 表模式演化。
本主题内容:
任务创建工作流程¶
本部分概述了任务设置工作流程。
创建一个 任务管理员角色,该角色可运行以下步骤中的命令。
使用 CREATE TASK 创建任务。任务默认处于暂停状态。有关创建任务的更多信息,请参阅以下部分:
使用 手动任务执行 测试任务。
执行 ALTER TASK ...RESUME 以允许根据任务定义中指定的参数运行任务。有关任务执行的更多信息,请参阅以下部分:
计算资源¶
任务需要计算资源以执行 SQL 代码。对于单个任务,可选择以下任意一种计算模型:
无服务器计算模型
由用户管理的虚拟仓库
Serverless Task¶
通过任务的无服务器计算模型,您可以依靠由 Snowflake 管理的计算资源,而非由用户管理的虚拟仓库。Snowflake 会根据每个工作负载的需要自动调整无服务器计算资源的大小。Snowflake 对同一项任务最近一次运行的统计数据执行动态分析,并根据结果确定给定运行的无服务器计算资源的理想大小。Serverless Task 的最大计算大小相当于 XXLARGE 用户管理的虚拟仓库。
要使用无服务器计算模型,请在使用 CREATE TASK 创建任务时省略 WAREHOUSE 参数。请注意,执行 CREATE TASK 命令的角色必须具有全局 EXECUTE MANAGED TASK 权限。有关任务的访问控制要求的更多信息,请参阅 任务安全性。
Serverless Task 的运行计费方式与依赖虚拟仓库提供计算资源的任务(使用标准的 Credit 消耗模式)有所不同。有关更多信息,请参阅 任务成本。
您可以通过设置以下参数来控制 Serverless Task 的成本和性能:
SERVERLESS_TASK_MAX_STATEMENT_SIZE:在 Serverless Task 上运行的仓库的最大大小,用以防止产生意外成本。
SERVERLESS_TASK_MIN_STATEMENT_SIZE:Serverless Task 上可预测性能的仓库的最小大小。
TARGET_COMPLETION_INTERVAL:期望的任务完成时间。Snowflake 会自动调整无服务器计算资源的大小,以在目标完成间隔内指定的时间内完成任务。如果未为计划任务设置此值,Snowflake 则会调整无服务器计算资源的大小,以在下一个计划执行时间之前完成。
如果一系列任务执行在 TARGET_COMPLETION_INTERVAL 的指定值或更小的倍数内完成,则 Snowflake 会将无服务器计算缩减到下一个大小,以便后续任务执行在指定的 TARGET_COMPLETION_INTERVAL 内完成。
如果一系列任务的执行时间超出 TARGET_COMPLETION_INTERVAL 的倍数,则 Snowflake 会将无服务器计算扩展到下一个大小,以便后续任务执行在指定的 TARGET_COMPLETION_INTERVAL 内完成。
指定这三个设置时,优先级如下:
SERVERLESS_TASK_MAX_STATEMENT_SIZE
SERVERLESS_TASK_MIN_STATEMENT_SIZE
TARGET_COMPLETION_INTERVAL
备注
仅为任务设置 SERVERLESS_TASK_MIN_STATEMENT_SIZE 和 SERVERLESS_TASK_MAX_STATEMENT_SIZE 参数。在更高级别(架构、数据库、账户)设置这些参数可能会影响某些 Snowflake 功能的行为。
以下是使用这些参数控制 Serverless Task 的一些示例。
示例 1:创建一个每小时运行一次的 Serverless Task,且目标完成间隔为 120 分钟:
CREATE TASK SCHEDULED_T1 SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
TARGET_COMPLETION_INTERVAL='120 MINUTE' AS SELECT 1;
通过将 TARGET_COMPLETION_INTERVAL 设置为一段相对较长的持续时间,这表明任务执行运行更长时间是可以接受的。Snowflake 会自动调整无服务器计算的大小,以便任务执行在指定的 TARGET_COMPLETION_INTERVAL 内完成。
示例 2:创建一个每小时运行一次的 Serverless Task,且目标完成时间为 10 分钟:
CREATE TASK SCHEDULED_T2 SCHEDULE='USING CRON 0 * * * * UTC'
TARGET_COMPLETION_INTERVAL='10 MINUTE'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
通过将 TARGET_COMPLETION_INTERVAL 设置为一段相对较短的持续时间,这表明倾向于快速完成任务。Snowflake 会自动调整无服务器计算的大小,以便任务执行在指定的 TARGET_COMPLETION_INTERVAL 内完成,直到达到 SERVERLESS_TASK_MAX_STATEMENT_SIZE。
示例 3:创建一个每天计划一次的 Serverless Task,并设置目标完成间隔以及最小和最大仓库大小的范围:
CREATE TASK SCHEDULED_T3 SCHEDULE='USING CRON 0 0 * * * UTC'
TARGET_COMPLETION_INTERVAL='180 M'
SERVERLESS_TASK_MIN_STATEMENT_SIZE='MEDIUM' SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
通过此配置,Serverless Task 每天午夜至少在 TARGET_COMPLETION_INTERVAL 为 3 小时的中型仓库上运行一次。Snowflake 会自动调整无服务器计算的大小,以便任务执行在指定的 TARGET_COMPLETION_INTERVAL 内完成,直到达到 SERVERLESS_TASK_MAX_STATEMENT_SIZE。
示例 4:创建一个每天计划一次且无目标完成间隔的 Serverless Task:
CREATE TASK SCHEDULED_T4 SCHEDULE='USING CRON 0 0 * * * UTC'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
通过此配置,Serverless Task 每天午夜运行一次。如果一系列任务执行持续时间未在下一个计划时间之前完成,Snowflake 会自动调整无服务器计算的大小,以便任务执行在指定的 SCHEDULE 内完成,直到达到 SERVERLESS_TASK_MAX_STATEMENT_SIZE。
有关参数和语法的更多信息,请参阅 CREATE TASK 和 ALTER TASK。
由用户管理的任务¶
您也可以在创建任务时指定一个现有虚拟仓库来管理单项任务的计算资源。若要使用此选项,需要选择一个大小适合于任务执行的 SQL 操作的仓库。
选择仓库大小¶
如果选择使用现有仓库为单项任务提供计算资源,请遵循 仓库注意事项 中描述的最佳实践。要了解任务的计算需求,可根据仓库大小和群集情况,使用不同的仓库分析单项任务或 任务图 的平均运行时间。还应考虑仓库是否由多个进程共享。
要分析任务的平均运行时间,请查询 TASK_HISTORY 账户使用情况视图。任务的计划时间和完成时间之间的平均差即为任务的预期平均运行时间。该差异包括当其他进程使用仓库中的计算资源时任务排队的时间。
对于任务图,在前置任务完成运行和任何子任务启动之后会有短暂的延迟。选择一个足够大的仓库来容纳同时运行的多个子任务。
下图显示了一个 1 分钟的窗口,其中一个任务排队 20 秒,然后运行 40 秒。这意味着在任务计划后的前 20 秒内,其他进程正在使用仓库资源。

下图显示了一个每次运行平均需要 5 分钟才能完成的任务图。图中显示了 2 次任务图运行完成所需的时间段。此时间段的计算起止时间为从计划启动根任务的时间,直到最后一个子任务完成运行。
在此示例中,任务图所运行的仓库与其他并发操作共享。当任务图中的每项任务运行完毕之时,以及下一任务开始运行之前,这些并发操作会消耗所有可用资源。因此,每项任务的时间段均包含一定的排队时间,用于等待其他操作完成并释放计算资源。

有关选择计算模型的建议¶
下表描述了有助于决定何时使用 Serverless Task 与由用户管理的任务的各种因素:
类别 |
Serverless Task |
由用户管理的任务 |
备注 |
---|---|---|---|
并发任务工作负载的数量、持续时间和可预测性 |
建议用于利用率较低、同时运行的任务太少或完成速度较快的仓库。 运行相对稳定的任务是 Serverless Task 的理想选择。 |
建议用于运行多项并发任务的充分利用的仓库。 |
对于 Serverless Task,Snowflake 根据计算资源的实际使用量向您的账户计费。 对于由用户管理的任务,仓库的计费基于仓库大小,每次恢复仓库的最短时间为 60 秒。 |
计划间隔 |
如果遵守计划间隔非常重要,建议使用此项。 如果独立任务或计划任务图的运行超过了间隔时间,则 Snowflake 会增加计算资源的大小。 |
如果遵守计划间隔不太重要,建议使用此项。 |
计划间隔 是指任务图中独立任务或根任务的计划执行之间的时间间隔。 增加计算资源可减少部分(但不是全部)SQL 代码的执行时间,但不能确保在批处理窗口内完成任务运行。 |
Serverless Task 运行的最大大小等于 XXLARGE 仓库的大小。如果一个任务工作负载需要更大的仓库,则创建一个具有所需大小仓库的由用户管理的任务。
运行任务¶
本节介绍计划和运行任务的不同方式、如何处理任务失败以及如何确定任务的版本。
任务计划¶
任务一般按计划运行。可在创建任务时使用 CREATE TASK 或稍后使用 ALTER TASK 来定义计划。
独立任务或任务图中的根任务通常按计划运行。可在创建任务时使用 CREATE TASK 或稍后使用 ALTER TASK 来定义计划。
Snowflake 确保一次只执行一个具有计划的任务实例。如在下一个计划内的执行时间到来时,任务仍在运行,则会跳过该计划内的时间。
Snowflake 会自动调整和缩放 Serverless Task 的计算资源大小。对于由用户管理的任务,选择合适的仓库大小,以便任务在计划内完成其工作负载。有关信息,请参阅 选择仓库大小。
任务计划与夏令时¶
任务定义中的 cron 表达式支持指定时区。当从标准时间转换为夏令时或从夏令时转换为标准时间时,计划的任务可能会出现意外行为。
例如:
在从夏令时转换为标准时间期间,计划于美国/洛杉矶时区 (
0 1 * * * America/Los_Angeles
) 1 AM 开始的任务将运行两次。一次是在1 AM 运行,另一次是在当地时间 1:59:59 AM 变为1:00:00 AM 时运行。在从标准时间转换为夏令时期间,计划于美国/洛杉矶时区 (
0 2 * * * America/Los_Angeles
) 2 AM 开始的任务将无法运行,因为当地时间会从 1:59:59 AM 变为 3:00:00 AM。
为避免因夏令时而意外执行任务,请考虑以下事项:
不要将任务安排在 1 AM 到 3 AM 之间运行。
每年两次手动调整在 1 AM 到 3 AM 之间计划任务的 cron 表达式,以补偿时间变化。
使用不适用于夏令时的时间格式,如 UTC。
触发任务¶
您可以使用触发任务,仅在定义的流具有新数据时才运行。这消除了在新数据的可用性不可预测时需要频繁轮询源的问题。它还减少了延迟,因为数据是立即处理的。
在定义的流具有数据并触发任务运行之前,触发任务不会使用计算资源。
以下是触发任务的运行条件:
当关联流跟踪的表中的数据发生更改时。
当任务首次恢复时,使用流中已有的任何数据。
触发任务每 12 小时自动运行一次运行状况检查,以防止流 过时。如果流中没有数据,Snowflake 将跳过运行而不使用计算资源。
创建触发任务¶
要创建新的触发任务,请省略 SCHEDULE
参数并将目标流包含在 WHEN
子句。
CREATE TASK triggeredTask WAREHOUSE = my_warehouse
WHEN system$stream_has_data('my_stream')
AS
INSERT INTO my_downstream_table
SELECT * FROM my_stream;
ALTER TASK triggeredTask RESUME;
要将现有任务从计划任务迁移到触发任务,请取消 SCHEDULE
参数的设置。现有任务必须具有在 WHEN
子句中定义的目标流。
ALTER TASK task SUSPEND;
ALTER TASK task UNSET SCHEDULE;
ALTER TASK task RESUME;
以下是触发任务参数的详细信息和限制:
默认情况下,触发任务最多每 30 秒运行一次。您可以修改 USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS 参数,以便更频繁地运行任务,最短间隔为 10 秒。
触发任务
WHEN
条件必须基于数据变化。when 条件支持使用
AND
和OR
条件。如果定义的流中只有一个有数据,则AND
条件会导致跳过任务。
触发任务注意事项¶
以下是有关管理、配置和监控触发任务的详细信息:
在
SHOW TASKS
和DESC TASK
输出中,触发任务的SCHEDULE
属性显示为NULL
。在 information_schema 和 account_usage 架构的 task_history 视图的输出中,SCHEDULED_FROM 列显示为 TRIGGER。
如果流或流正在跟踪的表被删除或重新创建,则触发任务将自动暂停。重新创建表或流后,用户可运行
ALTER TASK <task_name> RESUME
命令恢复已触发的处理。
触发任务限制¶
以下是触发任务的限制:
不支持数据共享、目录表、外部表和混合表上的流。
不支持 Serverless Task。
手动执行任务¶
EXECUTE TASK 命令手动触发任务的单次运行。此 SQL 命令非常有用,可在允许新任务或修改的任务在生产环境中执行 SQL 代码之前测试它们。
可直接在脚本或存储过程中调用此 SQL 命令。此外,此命令还支持在外部数据管道中集成任务。任何可以通过身份验证进入您 Snowflake 账户并授权 SQL 操作的第三方服务都可以执行 EXECUTE TASK 命令来运行任务。
任务运行的版本控制¶
首次恢复或手动执行独立任务时,系统会设置任务的初始版本。独立任务使用此版本运行。暂停和修改任务后,恢复或手动执行独立任务时会设置新版本。
当任务暂停时,任务的所有未来计划运行都将被取消;但是,当前运行的任务将使用当前版本继续运行。
例如,假设任务已暂停,但任务的计划运行已开始。任务的所有者在任务仍在运行期间修改任务调用的 SQL 代码。任务使用任务开始运行时的当前版本运行并执行其定义中的 SQL 代码。恢复或手动执行任务时,将会为任务设置一个新版本。这个新版本包括对任务的修改。
要检索任务版本的历史记录,请查询 TASK_VERSIONS Account Usage 视图 (在 SNOWFLAKE 共享数据库中)。
在运行失败后自动暂停任务¶
(可选)在指定次数的连续运行失败或超时后自动暂停任务。此功能可暂停消耗 Snowflake credit 但无法运行至完成的任务,从而降低相关费用。
设置任务的 SUSPEND_TASK_AFTER_NUM_FAILURES = num
参数。当参数设置为大于 0
的值时,在超过指定的任务运行连续失败次数或超时后,任务将自动暂停。
可在创建任务时使用 CREATE TASK 或稍后使用 ALTER TASK 设置此参数。也可在 Snowsight 中更改此值。
还可以在账户、数据库或架构级别设置 SUSPEND_TASK_AFTER_NUM_FAILURES 参数。此设置适用于修改对象中包含的所有任务。请注意,在较低级别显式设置的参数将替换在较高级别设置的参数值。
自动重试失败的任务运行¶
如果任何任务在 FAILED 状态下完成,Snowflake 可以自动重试该任务。默认情况下禁用自动任务重试。要启用此功能,请将 TASK_AUTO_RETRY_ATTEMPTS 设置为大于 0 的值。
使用错误通知的任务会发送有关每次失败的重试尝试的通知。有关更多信息,请参阅 配置发送错误通知的任务。
如果您在账户、数据库或架构级别设置 TASK_AUTO_RETRY_ATTEMPTS 参数值,相关更改将在修改过的对象中的任务下次计划运行时应用到这些任务。
为任务设置会话参数¶
可以为任务运行所在的会话设置会话参数。为此,请修改现有任务并使用 ALTER TASK ...:samp:SET {session_parameter} = {value}[, {session_parameter} = {value} ... ]
设置所需的参数值,或者在 Snowsight 中编辑任务。
任务支持所有会话参数。有关完整列表,请参阅 参数。任务不支持账户或用户参数。
查看账户的任务历史记录¶
可以使用 SQL 或 Snowsight 来查看账户的任务历史记录。要在 Snowsight 中查看任务历史记录,请参阅 查看 Snowsight 中的任务和任务图。有关所需权限的信息,请参阅 查看任务历史记录。
要查看单项任务的运行历史记录,请执行以下操作:
- SQL:
查询 TASK_HISTORY 表函数(在 Snowflake Information Schema 中)。
要查看当前计划的或正在执行的任务图运行的详细信息,请执行以下操作:
- SQL:
查询 CURRENT_TASK_GRAPHS 表函数(在 Snowflake Information Schema 中)。
要查看过去 60 分钟内成功执行、失败或取消的任务图运行历史记录,请执行以下操作:
- SQL:
查询 COMPLETE_TASK_GRAPHS 表函数(在 Snowflake Information Schema 中)。
查询 COMPLETE_TASK_GRAPHS 视图 视图(在 Account Usage 中)。
任务成本¶
与运行任务以执行 SQL 代码相关的费用因任务的计算资源来源而异:
- 由用户管理的仓库
Snowflake 会根据任务运行时的仓库使用情况(类似于在客户端或 Snowflake Web 界面中执行相同 SQL 语句的仓库使用情况),向您的账户收取 credit 使用量。每秒 credit 计费和仓库自动暂停功能可以让您灵活地从较大的大小开始,然后调整大小以匹配您的工作负载。
- 无服务器计算模型
Snowflake 根据计算资源使用情况向您的账户计费。费用根据资源的总使用量(包括云服务使用量)计算,衡量方式是 计算小时 Credit 使用量。计算小时的成本根据仓库规模和查询运行时而变化。有关更多信息,请参阅 无服务器 Credit 使用量 或 查询:无服务器任务总成本。
Snowflake 分析任务历史记录中的任务运行情况,动态确定无服务器计算资源的正确大小和数量。由于 Snowflake 自动缩放资源以管理任务运行,因此运行任务的成本按比例扩缩。
要了解任务消耗了多少 credit,请参阅 `Snowflake 服务使用表 `_ 中的“无服务器功能 credit 表”。
在创建任务时,考虑以下最佳实践来优化成本:
将 SCHEDULE 设置为以较低频率运行。
使用 auto-suspend 和 auto-retry 参数来防止在失败任务上浪费资源。
为无服务器功能创建预算和支出限制警报。有关更多信息,请参阅 通过预算监控 Credit 使用量。
要检索特定任务的当前 Credit 使用量,请查询 SERVERLESS_TASK_HISTORY 表函数。以任务所有者的身份执行以下语句,其中
<database_name>
is the database that contains the task and<task_name>
为任务名称:SET num_credits = (SELECT SUM(credits_used) FROM TABLE(<database_name>.information_schema.serverless_task_history( date_range_start=>dateadd(D, -1, current_timestamp()), date_range_end=>dateadd(D, 1, current_timestamp()), task_name => '<task_name>') ) );
要检索所有 Serverless Task 的当前 Credit 使用量,请查询 SERVERLESS_TASK_HISTORY 视图。以账户管理员的身份,执行以下语句:
SELECT start_time, end_time, task_id, task_name, credits_used, schema_id, schema_name, database_id, database_name FROM snowflake.account_usage.serverless_task_history ORDER BY start_time, task_id;
任务安全性¶
要开始执行任务,您必须具有正确的访问权限。本节介绍如何管理对任务的访问。
有关任务图所有权的信息,请参阅 管理任务图所有权。
访问控制权限¶
创建任务¶
要创建任务,角色必须至少具有以下权限:
对象 |
权限 |
备注 |
---|---|---|
账户 |
EXECUTE MANAGED TASK |
仅对依赖于无服务器计算资源的任务是必需的。 |
数据库 |
USAGE |
|
架构 |
USAGE、CREATE TASK |
|
仓库 |
USAGE |
仅对依赖于由用户管理的仓库的任务是必需的。 |
运行任务¶
创建任务后,任务所有者必须具有以下权限才能运行任务:
对象 |
权限 |
备注 |
---|---|---|
账户 |
EXECUTE TASK |
在执行角色拥有的任何任务时为必需。撤销某个角色的 EXECUTE TASK 权限会阻止所有后续任务在该角色下运行。 |
账户 |
EXECUTE MANAGED TASK |
仅对依赖于无服务器计算资源的任务是必需的。 |
数据库 |
USAGE |
|
架构 |
USAGE |
|
任务 |
USAGE |
|
仓库 |
USAGE |
仅对依赖于由用户管理的仓库的任务是必需的。 |
此外,该角色必须具有运行任务执行的 SQL 语句所需的权限。
查看任务历史记录¶
要查看任务,您必须具有以下一个或多个权限:
ACCOUNTADMIN 角色
任务的 OWNERSHIP 权限
全局 MONITOR EXECUTION 权限
恢复或暂停任务¶
除任务所有者外,具有任务 OPERATE 权限的角色还可以暂停或恢复任务。此角色必须具有包含任务的数据库和架构的 USAGE 权限。不需要其他任何权限。
在恢复任务时,Snowflake 会验证任务所有者角色是否具有 运行任务 中所列出的权限。
创建自定义角色来管理任务权限¶
使用自定义角色,您可以轻松管理授予 Snowflake 中每个账户或角色的权限。要使用自定义角色更改所有账户或角色的权限,请更新自定义角色。或者,通过移除自定义角色来撤销权限。
创建自定义角色以创建任务¶
Snowflake 需要不同的权限来创建无服务器任务和由用户管理的任务。
例如,要创建由用户管理的任务,可以创建一个名为 warehouse_task_creation
的自定义角色,并就该角色可在其中创建任务的仓库授予角色 CREATE TASK 和 USAGE 权限。
USE SYSADMIN;
CREATE ROLE warehouse_task_creation
COMMENT = 'This role can create user-managed tasks.';
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
作为可以创建 Serverless Task 的角色的示例;创建一个名为 serverless_task_creation
的自定义角色,并授予角色 CREATE TASK 权限和账户级别 EXECUTE MANAGED TASK 权限。
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
创建自定义角色来管理任务¶
创建一个具有 EXECUTE TASK 权限的自定义角色,并为此自定义角色授予任何任务所有者角色,以允许更改他们自己的任务。要移除任务所有者角色执行任务的能力,可以从任务所有者角色中撤消该自定义角色。
例如,创建一个名为 taskadmin
的自定义角色,并授予该角色 EXECUTE TASK 权限。将 taskadmin
角色分配给名为 myrole
的任务所有者角色:
USE ROLE securityadmin;
CREATE ROLE taskadmin;
在将账户级权限授予新角色之前,将活动角色设置为 ACCOUNTADMIN
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
将活动角色设置为 SECURITYADMIN 以表示该角色可将一个角色授予给另一个角色
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
有关创建自定义角色和角色层次结构的更多信息,请参阅 配置访问控制。
删除任务所有者角色¶
当删除任务的所有者角色时,该任务会将所有权转移给删除所有者角色的那个角色。当任务转移所有权时,它会自动暂停,并且在新的所有者恢复任务之前不会计划新的执行。
如果在任务运行时删除角色,则任务运行将在被删除的角色下完成处理。
系统服务任务执行¶
虽然 Snowflake 可以以任务所有者的权限运行任务,但任务运行与用户无关。实际上,每次运行都是由系统服务执行的。任务与特定用户是分离的,以避免用户被删除、因身份验证问题而被锁定或角色被移除时可能出现的复杂情况。
由于任务运行与用户分离,任务运行的查询历史记录与系统服务相关联。因此,该服务没有用户凭据,并且没有个人可冒充其身份。系统服务的活动仅限于您的账户。该服务内置了与其他操作相同的加密保护和其他安全协议。
任务 DDL¶
为支持创建和管理任务,Snowflake 提供以下一组特殊的 DDL 命令:
此外,提供商可以使用以下标准访问控制 DDL,来查看、授予或撤消对 ELT 所需数据库对象的访问权限:
任务函数¶
为支持检索任务相关信息,Snowflake 提供以下一组 SQL 函数: