我计划每 15 分钟运行一次任务:
CREATE OR REPLACE TASK mytask
WAREHOUSE = 'SHARED_WH_MEDIUM'
SCHEDULE = '15 MINUTE'
STATEMENT_TIMEOUT_IN_SECONDS = 3600,
QUERY_TAG = 'KLIPFOLIO'
AS
CREATE OR REPLACE TABLE mytable AS
SELECT * from xxx;
;
alter task mytask resume;
Run Code Online (Sandbox Code Playgroud)
我从输出中看到task_history()任务是SCHEDULED:
select * from table(aftonbladet.information_schema.task_history(task_name => 'MYTASK')) order by scheduled_time;
QUERY_ID NAME DATABASE_NAME SCHEMA_NAME QUERY_TEXT CONDITION_TEXT STATE ERROR_CODE ERROR_MESSAGE SCHEDULED_TIME COMPLETED_TIME RETURN_VALUE
*** MYTASK *** *** *** SCHEDULED 2020-01-21 09:58:12.434 +0100
Run Code Online (Sandbox Code Playgroud)
但我希望它立即运行而不等待 SCHEDULED_TIME,有什么方法可以实现这一点吗?
这两个概念最近让我很困惑。
Snowflake Database更多的是指数据服务,其网址如下:
这更像是一个提供SQL引擎功能的云上数据平台或数据仓库。
另一方面,雪花模式更像是一种设计数据库模式的算法。
它们是完全不同的两种东西,只是巧合地有相同的名字吗?
我正在尝试将数据从临时表插入到主表中。该表有近 300 列,混合了 Varchars、Integers、Decimals、Dates 等数据类型。
Snowflake 给出无用的错误消息“无法识别数值”
我已经仔细检查并删除了查询的各个部分,以尝试隔离它的来源。经过几个小时并剪掉每一栏后,这种情况仍然在发生。
有谁知道 Snowflake 诊断查询(如 Redshift 那样)可以告诉我问题发生的特定列?
雪花是否支持使用类似UPDATE *or的语法更新/插入所有列INSERT *
MERGE INTO events
USING updates
ON events.eventId = updates.eventId
WHEN MATCHED THEN
UPDATE *
WHEN NOT MATCHED THEN
INSERT *
Run Code Online (Sandbox Code Playgroud)
类似于 Databricks 的做法:https ://docs.databricks.com/spark/latest/spark-sql/language-manual/delta-merge-into.html
或者我们是否必须列出每一列及其值?
当我尝试上述操作时出现错误
语法错误...意外的“*”。
并且文档没有多大帮助:https://docs.snowflake.com/en/sql-reference/sql/merge.html
谢谢,
我已经使用 dbt 几个月了,所以对它还很陌生。运行测试模型时,使用视图物化没有任何问题:
{{ config(materialized='view') }}
select 1 as id
Run Code Online (Sandbox Code Playgroud)
导致:
15:30:25 | 1 of 1 START view model dbt.stg_CampaignTableTest.................... [RUN]
15:30:26 | 1 of 1 OK created view model dbt.stg_CampaignTableTest............... [SUCCESS 1 in 1.48s]
Run Code Online (Sandbox Code Playgroud)
但是,当我切换到表实现时,我收到一条错误消息,表明未在 Snowflake 中选择活动仓库:
{{ config(materialized='table') }}
select 1 as id
Run Code Online (Sandbox Code Playgroud)
导致:
15:32:52 | 1 of 1 START table model dbt.stg_CampaignTableTest................... [RUN]
15:32:53 | 1 of 1 ERROR creating table model dbt.stg_CampaignTableTest.......... [ERROR in 1.22s]
Database Error in model stg_CampaignTableTest (models/test/stg_CampaignTableTest.sql)
000606 (57P03): No active warehouse …Run Code Online (Sandbox Code Playgroud) 对于增量模型,DBT 文档在这里说:
\n\n\nunique_key 应在模型定义中作为表示简单列的字符串或可以一起使用的单引号列名称列表提供,例如 [\'col1\', \'col2\', \xe2\x80 \xa6])
\n
我已经用这个增量定义在 DBT 中构建了一个增量模型
\n{{\n config(\n materialized=\'incremental\',\n unique_key = [\'Col1\', \'Col2\', \'Col3\']\n )\n}}\nRun Code Online (Sandbox Code Playgroud)\n它编译成 Snowflake 中的合并语句:
\n{{\n config(\n materialized=\'incremental\',\n unique_key = [\'Col1\', \'Col2\', \'Col3\']\n )\n}}\nRun Code Online (Sandbox Code Playgroud)\n这合理地引发了一个 SQL 错误,抱怨括号:
\n\n\nSQL编译错误:语法错误第4行位于位置32意外\'[\'。第 4 行语法错误位于位置 45 意外的 \',\'。语法错误第 4 行位于位置 98 处意外的 \'[\'。第 4 行语法错误,位置 111 处出现意外的 \',\'。
\n
我找不到任何其他以这种方式使用多列的好例子。(有涉及连接列的选项,我愿意接受有关最佳方法的建议,但我正在尝试找出如何使用 DBT 推荐的语法)
\n我正在尝试将 Snowflake DWH 中的一个角色更改OWNERSHIP为其他角色。SayOld Owner Role是具有当前所有权的角色,New Owner Role是我希望授予所有权的角色,并且R3是一个已经可以访问感兴趣的对象的角色。当我尝试这样做时,出现以下错误。
SQL 执行错误:存在对角色“R3”的安全“SELECT”权限的依赖授予。必须先将其撤销。可能存在不止一项附属补助金
为什么现有角色会成为所有权变更的问题?
我想知道是否有人使用过AWS Redshift和Snowflake,并使用了一个更好的案例.我使用过Redshift,但最近有人建议Snowflake作为一个很好的选择.我的用例基本上是零售营销数据,将由少数分析师使用,他们不是非常精通SQL,并且最有可能拥有报告工具
如何在雪花工作表中定义数组变量?
set columns = (SELECT array_agg(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS
where table_name='MEMBERS');
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
不支持的功能“来自非常量源表达式的分配”。
我正在尝试将日期(格式为 yyyy-mm-dd)转换为年月格式(例如:2021-07),同时保留日期数据类型。
对于 SQL Server,这可以使用FORMAT函数来完成,如下所示:
SELECT FORMAT(date_column, 'yyyy-MM')
Run Code Online (Sandbox Code Playgroud)
我想知道如何在SNOWFLAKE中实现这一点。我在SNOWFLAKE中找不到FORMAT函数,因此我尝试使用 DATE、DATE_PART,但它们似乎都使我的列成为 varchar,失去了其日期类型。
谢谢。