任务简介¶
使用 Tasks 来自动执行、计划和优化数据管道上的业务过程。
在 Snowflake 中,Tasks 可以执行以下任意一种类型的函数:
单个 SQL 语句。
对存储过程的调用。
使用 Snowflake Scripting 的过程逻辑。
对于复杂的过程(如生成报告或执行定期的表维护),通过创建 任务图 来合并任务。要持续处理传入的新数据或已更改数据(像在提取、加载、转换 (ELT) 工作流中一样),可以使用触发任务将任务与 表流 相结合。
备注
任务不支持 表模式演化。
本主题内容:
任务创建工作流概述¶
创建一个 任务管理员角色,该角色可运行以下步骤中的命令。
使用 CREATE TASK 定义新任务。默认情况下,该任务处于暂停状态。有关设置任务参数的信息,请参阅:
使用 EXECUTE TASK 手动测试任务。
更改任务,或使用 ALTER TASK ...RESUME 允许其连续运行。 有关运行 Tasks 的信息,请参阅:
计算资源¶
Tasks 需要计算资源来执行 SQL、Python、Java 和 Scala 函数以及存储过程。对于每个任务,您可以选择是允许 Snowflake 通过创建 Serverless Task 来管理资源,还是使用 用户管理的虚拟仓库模型 自行管理资源。
Serverless Task¶
通过此模型,Tasks 可在 Snowflake 管理的计算上执行。Snowflake 会根据每个工作负载的需要自动调整资源大小。
定期运行的任务是无服务器计算模型的理想选择。当仓库未得到充分利用且当前运行的任务较少时,也建议使用此模型。
Snowflake 对同一项任务最近一次运行的统计数据执行动态分析,并根据结果确定给定运行的计算资源的理想大小。
限制¶
Serverless Task 的最大计算大小相当于 X2LARGE 虚拟仓库。
使用无服务器计算模型创建任务¶
如果使用 CREATE TASK 或 ALTER TASK,请省略 WAREHOUSE 参数。
执行任务的角色必须具有全局 EXECUTE MANAGED TASK 权限。有关任务的访问控制要求的更多信息,请参阅 任务安全性。
您可以通过设置以下参数来控制 Serverless Task 的成本和性能:
SERVERLESS_TASK_MAX_STATEMENT_SIZE:仓库的最大大小,以防止出现意外费用。
SERVERLESS_TASK_MIN_STATEMENT_SIZE:仓库的最小大小,以确保性能可预测。
TARGET_COMPLETION_INTERVAL:期望的任务完成时间。
指定这些设置时,优先级如下:
SERVERLESS_TASK_MAX_STATEMENT_SIZE
SERVERLESS_TASK_MIN_STATEMENT_SIZE
TARGET_COMPLETION_INTERVAL
Snowflake 如何估算无服务器计算资源¶
Snowflake 会根据目标时间范围以及之前任务运行的性能自动估算完成任务所需的计算资源。
目标时间范围可以通过 TARGET_COMPLETION_INTERVAL 设置。如果未设置此值,Snowflake 会调整无服务器计算资源的大小,以在下一个计划的执行时间之前完成。
任务完成后,Snowflake 会按以下方式估算所需的计算资源:
示例¶
示例 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'
SCHEDULING_MODE = 'FLEXIBLE'
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。通过将 SCHEDULING_MODE 设置为灵活,任务可以在一天中的任何时间开始。
示例 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。
用户管理的虚拟仓库模型¶
通过此模型,您可以完全控制每个工作负载所使用的计算资源。
当您想要手动管理计算资源上不可预测的负载时,建议使用此模型。启用了 自动暂停和自动恢复 的 多集群仓库 还有助于调节 Credit 的消耗。
选择仓库大小¶
如果选择使用现有仓库为单项任务提供计算资源,请遵循 仓库注意事项 中描述的最佳实践。要了解任务的计算需求,可根据仓库大小和群集情况,使用不同的仓库分析单项任务或 任务图 的平均运行时间。还应考虑仓库是否由多个进程共享。
要分析任务的平均运行时间,请查询 TASK_HISTORY 账户使用情况视图。任务的计划时间和完成时间之间的平均差即为任务的预期平均运行时间。该差异包括当其他进程使用仓库中的计算资源时任务排队的时间。
对于任务图,在前置任务完成运行和任何子任务启动之后会有短暂的延迟。选择一个足够大的仓库来容纳同时运行的多个子任务。
下图显示了 1 分钟的时间段,在此时间段内,单项任务排队 20 秒,然后运行 40 秒。这意味着计划任务后的前 20 秒内,其他进程正在使用仓库资源。

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

运行任务¶
本节介绍计划和运行任务的不同方式、如何处理任务失败以及如何确定任务的版本。
计划任务¶
任务一般按计划运行。
可在创建任务时使用 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 将跳过运行而不使用计算资源。
创建触发任务¶
使用 CREATE TASK,并使用 WHEN
子句定义目标流。(请勿包括 SCHEDULE
参数。)
通过选择以下其中一项,为任务分配计算资源:
要手动管理资源(用户管理的仓库任务),请添加
WAREHOUSE
参数。要允许 Snowflake 管理资源 (Serverless Task),请添加
TARGET_COMPLETION_INTERVAL
参数。Snowflake 会估算所需的资源并进行调整,以在此时间内完成任务。
将现有任务从计划任务迁移到触发任务¶
暂停任务,取消设置 SCHEDULE
参数,然后恢复任务。现有任务必须具有在 WHEN
子句中定义的目标流。
ALTER TASK task SUSPEND;
ALTER TASK task UNSET SCHEDULE;
ALTER TASK task RESUME;
将现有的用户管理的触发任务迁移到无服务器触发任务¶
暂停任务。移除 WAREHOUSE
参数并添加 TARGET_COMPLETION_INTERVAL
参数。恢复任务。
触发任务注意事项¶
在
SHOW TASKS
和DESC TASK
输出中,触发任务的SCHEDULE
属性显示为NULL
。在 information_schema 和 account_usage 架构的 task_history 视图的输出中,SCHEDULED_FROM 列显示为 TRIGGER。
处理多个数据流时,可以使用以下条件参数来管理任务的启动时间:
WHEN … AND
和WHEN … OR
。
触发任务限制¶
默认情况下,触发任务最多每 30 秒运行一次。您可以修改 USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS 参数,以便更频繁地运行任务,最短间隔为 10 秒。
不支持目录表、External Tables 和混合表上的流。
触发任务示例¶
示例 1:创建一个用户管理任务,在两个流中任意一个流的数据发生变化时运行:
CREATE TASK my_task
WHEN SYSTEM$STREAM_HAS_DATA('my_return_stream')
OR SYSTEM$STREAM_HAS_DATA('my_order_stream')
WAREHOUSE = my_warehouse
AS
INSERT INTO customer_activity
SELECT customer_id, return_total, return_date, ‘return’
FROM my_return_stream
UNION ALL
SELECT customer_id, order_total, order_date, ‘order’
FROM my_order_stream;
示例 2:创建一个任务,当在两个不同的数据流中检测到数据变化时运行。由于任务使用 AND 条件,如果两个流中只有一个有新数据,则会跳过该任务。
由于 TARGET_COMPLETION_INTERVAL 为 120 分钟,Snowflake 会估算并调整在此时间内完成任务所需的计算资源。
CREATE TASK triggeredTask
WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
TARGET_COMPLETION_INTERVAL='120 MINUTES'
AS
INSERT INTO completed_promotions
SELECT order_id, order_total, order_time, promotion_id
FROM orders_stream
WHERE promotion_id IS NOT NULL;
手动运行任务¶
使用 CREATE TASK 或 ALTER TASK 创建新任务并设置任务参数。
使用 EXECUTE TASK 触发该任务的单次运行。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 ... SET session_parameter = value[, session_parameter = value ... ]
设置所需的参数值,或者在 Snowsight 中编辑任务。
任务支持所有会话参数。有关完整列表,请参阅 参数。Tasks 不支持账户或用户参数。
查看账户的任务历史记录¶
可以使用 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 使用量 或 查询:Serverless Task 总成本。
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.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="warehouse_task_creation",
comment="This role can create user-managed tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["USAGE"], securable_type="warehouse", securable=Securable(name='warehouse1')
)
作为可以创建 Serverless Task 的角色的示例;创建一个名为 serverless_task_creation
的自定义角色,并授予角色 CREATE TASK 权限和账户级别 EXECUTE MANAGED TASK 权限。
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="serverless_task_creation",
comment="This role can create serverless tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['serverless_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
root.roles['serverless_task_creation'].grant_privileges(
privileges=["EXECUTE MANAGED TASK"], securable_type="account"
)
创建自定义角色来管理任务¶
创建一个具有 EXECUTE TASK 权限的自定义角色,并为此自定义角色授予任何任务所有者角色,以允许更改他们自己的任务。要移除任务所有者角色执行任务的能力,可以从任务所有者角色中撤消该自定义角色。
例如,创建一个名为 taskadmin
的自定义角色,并授予该角色 EXECUTE TASK 权限。将 taskadmin
角色分配给名为 myrole
的任务所有者角色:
USE ROLE securityadmin;
CREATE ROLE taskadmin;
from snowflake.core.role import Role
root.session.use_role("securityadmin")
root.roles.create(Role(name="taskadmin"))
在将账户级权限授予新角色之前,将活动角色设置为 ACCOUNTADMIN
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
root.session.use_role("accountadmin")
root.roles['taskadmin'].grant_privileges(
privileges=["EXECUTE TASK", "EXECUTE MANAGED TASK"], securable_type="account"
)
将活动角色设置为 SECURITYADMIN 以表示该角色可将一个角色授予给另一个角色
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
from snowflake.core.role import Securable
root.session.use_role("securityadmin")
root.roles['myrole'].grant_role(role_type="ROLE", role=Securable(name='taskadmin'))
有关创建自定义角色和角色层次结构的更多信息,请参阅 配置访问控制。
删除任务所有者角色¶
当删除任务的所有者角色时,该任务会将所有权转移给删除所有者角色的那个角色。当任务转移所有权时,它会自动暂停,并且在新的所有者恢复任务之前不会计划新的执行。
如果在任务运行时删除角色,则任务运行将在被删除的角色下完成处理。
系统服务任务执行¶
虽然 Snowflake 可以以任务所有者的权限运行任务,但任务运行与用户无关。实际上,每次运行都是由系统服务执行的。任务与特定用户是分离的,以避免用户被删除、因身份验证问题而被锁定或角色被移除时可能出现的复杂情况。
由于任务运行与用户分离,任务运行的查询历史记录与系统服务相关联。因此,该服务没有用户凭据,并且没有个人可冒充其身份。系统服务的活动仅限于您的账户。该服务内置了与其他操作相同的加密保护和其他安全协议。
任务 DDL¶
为支持创建和管理任务,Snowflake 提供以下一组特殊的 DDL 操作:
此外,提供商可以使用以下标准访问控制 DDL,来查看、授予或撤消对 ELT 所需数据库对象的访问权限:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
`RoleResource </developer-guide/snowflake-python-api/reference/latest/_autosummary/snowflake.core.role.RoleResource>`_(账户角色)方法:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_of
iter_grants_on
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
UserResource 方法:
grant_role
iter_grants_to
revoke_role
任务函数¶
为支持检索任务相关信息,Snowflake 提供以下一组函数: